我在新的 Debian 12(在 AWS EC2 上)上安装了 nftables。我通过端口 22/tcp 连接到实例(外部 EC2 IP)。我提到 EC2 是因为也许他们做了奇怪的把戏。然后我安装了 nftables:
sudo apt install nftables
sudo systemctl enable nftables
sudo systemctl start nftables
此时,我有一个空配置:
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter;
}
chain forward {
type filter hook forward priority filter;
}
chain output {
type filter hook output priority filter;
}
}
我的问题很简单:我读到并且期望在没有任何允许任何数据包的规则的情况下,我自己的会话应该被阻止,并且我应该可以重新启动。为什么情况显然并非如此,和/或是什么允许我的会话?
我注意到,只有当我明确阻止该流时,它才确实被阻止。
默认情况下,您的规则集允许一切。
为了真正阻止所有连接,您需要在
policy drop;
每行后面添加type filter ...
。如果将每条规则放在自己的行上,则分号是可选的。如此紧凑的规则集确实是不明智的。至少你需要允许环回连接,否则许多程序将无法以神秘的方式工作:
对于输入,
iif lo accept
对于输出oif lo accept
。并且允许所有链建立连接是必要的:
ct state established,related accept
- 该规则对于每个链都是相同的。默认情况下,nftables 不会创建任何链,这意味着每个数据包都会被接受和允许。
您已经创建了三个基础链
input
forward
,output
如果未指定这些链,则默认策略
accept
与没有任何链相同。要默认阻止任何数据包,您需要将默认操作策略设置为
drop
如下所示:然后向这些链显式添加规则以允许特定流量。
有关创建链的更多信息,请参阅:
https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains
您应该发现 nftables wiki 对于开发防火墙最有用:
https ://wiki.nftables.org/wiki-nftables/index.php/Main_Page