我的操作系统中的 nftables 状态:
sudo systemctl status nftables
● nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; disabled; vendor preset: enabled)
Active: active (exited) since Fri 2022-11-04 11:01:47 HKT; 1s ago
Docs: man:nft(8)
http://wiki.nftables.org
Process: 3780 ExecStart=/usr/sbin/nft -f /etc/nftables.conf (code=exited, status=0/SUCCESS)
Main PID: 3780 (code=exited, status=0/SUCCESS)
CPU: 7ms
Nov 04 11:01:47 debian systemd[1]: Starting nftables...
Nov 04 11:01:47 debian systemd[1]: Finished nftables.
现在我想记录所有传入流量:
sudo nft add rule filter input log
Error: Could not process rule: No such file or directory
add rule filter input log
^^^^^^
列出配置文件nftables.conf
:
cat /etc/nftables.conf
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}
如何修复它?
答案1
该表位于inet
家庭(代表 IPv4+IPv6 的组合)因此inet
需要 family 参数,否则默认为ip
:
如果指定的标识符没有地址族,则
ip
默认使用该族。
由于没有ip filter
表也没有ip filter input
链,所以这个命令:
nft add rule filter input log
失败。
正确的命令是(作为 root 或使用sudo
。下面的所有命令都应作为 root 或使用 运行sudo
)...
nft add rule inet filter input log
...但上面的命令通常很危险,因为它会生成太多日志并淹没存储这些日志的文件系统,除非做好准备,否则不应按原样使用。
对于这种没有实际防火墙的情况,最好不要记录已存在流的数据包部分(即:数据包在已确立的conntrack 状态)留下新的、相关的(例如:发回的 ICMP 错误)和无效的数据包。这是使用完成的连线的帮助。也为了好的措施限制日志数量(例如:每分钟最多 20 个)。我还添加了三倍counter
语句,以便能够在到达日志语句之前显示(使用nft list ruleset
)有关每个添加的过滤器的体积差异的统计信息。他们是不需要的。
nft add rule inet filter input counter ct state != established counter limit rate 20/minute counter log
为了保留该文件以供以后重用,可以使用(但不应删除该命令)/etc/nftables.conf
的输出来编辑以前的文件,并且nft -s list ruleset
flush ruleset
nftables服务重新启动 ( systemctl restart nftables
) 或文件直接重新加载 ( nft -f /etc/nftables.conf
) 以恢复其内容。