我操作系统中的 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;
}
}
如何解决?
该表在
inet
家族中(表示 IPv4+IPv6 的组合),因此inet
需要 family 参数,否则默认为ip
:由于没有
ip filter
表也没有ip filter input
链,这个命令:失败。
正确的命令是(作为 root 或 with
sudo
。下面的所有命令都将作为 root 或 with 运行sudo
)......但是上面的命令通常是危险的,因为它会生成过多的日志并淹没存储这些日志的文件系统,除非为此做好准备,否则不应按原样使用。
对于这种没有实际防火墙的情况,最好不要记录已经存在的流的部分数据包(即:处于已建立连接跟踪状态的数据包),留下新的、相关的(例如:发回的 ICMP 错误)和无效数据包。这是使用conntrack的帮助完成的。好的措施还限制日志的数量(例如:每分钟最多 20 个)。我还添加了
counter
语句的三倍,以便能够nft list ruleset
在到达日志语句之前显示(使用)有关每个添加的过滤器的体积差异的统计信息。不需要它们。为了保留它供以后重用,可以使用(但不应删除命令)
/etc/nftables.conf
的输出来编辑先前的文件,并重新启动nftables服务()或直接重新加载文件()以恢复其内容。nft -s list ruleset
flush ruleset
systemctl restart nftables
nft -f /etc/nftables.conf