我在新的 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;
}
}
我的问题很简单:我读到并且期望在没有任何允许任何数据包的规则的情况下,我自己的会话应该被阻止,并且我应该可以重新启动。为什么情况显然并非如此,和/或是什么允许我的会话?
我注意到,只有当我明确阻止该流时,它才确实被阻止。
答案1
在没有任何规则允许任何打包的情况下,我自己的会话应该被阻止
默认情况下,您的规则集允许一切。
为了真正阻止所有连接,您需要policy drop;
在每type filter ...
行后面添加。如果将每条规则放在自己的行上,则分号是可选的。
如此紧凑的规则集确实是不明智的。至少你需要允许环回连接,否则许多程序将无法以神秘的方式工作:
对于输入,iif lo accept
对于输出oif lo accept
。
并且允许所有链建立连接是必要的:ct state established,related accept
- 该规则对于每个链都是相同的。
答案2
默认情况下nftables
不创建任何链,这意味着每个数据包都被接受和允许。
您已经创建了三个根据链input
forward
和output
如果未指定这些默认策略,则accept
与没有任何链相同。
要默认阻止任何数据包,您需要将默认操作策略设置为drop
如下所示:
# Sees incoming packets that are addressed to and have now been routed to the local system and processes running there
add chain filter input {
type filter hook input priority filter; policy drop;
}
# Sees packets that originated from processes in the local machine
add chain filter output {
type filter hook output priority filter; policy drop;
}
然后向这些链显式添加规则以允许特定流量。
- 有关创建链的更多信息,请参阅这里。
- 你应该找到
nftables
维基百科对于开发防火墙最有用。