如何添加规则来记录所有传入流量?

如何添加规则来记录所有传入流量?

我的操作系统中的 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 rulesetflush rulesetnftables服务重新启动 ( systemctl restart nftables) 或文件直接重新加载 ( nft -f /etc/nftables.conf) 以恢复其内容。

相关内容