uname -a
Linux test 5.10.0-17-cloud-amd64 #1 SMP Debian 5.10.136-1 (2022-08-13) x86_64 GNU/Linux
# enable logging
sudo modprobe ipt_LOG
sudo modprobe nf_log_ipv4
sudo sysctl net.netfilter.nf_log.2=nf_log_ipv4
# Try to log traffic
sudo iptables -t raw -I PREROUTING -s 1.2.3.4 -j LOG
sudo iptables -t raw -I PREROUTING -s 1.2.3.5 -j LOG
# I see logs for these IPs
tail /var/log/kern.log
# Try to trace traffic
sudo iptables -t raw -I PREROUTING -s 1.2.3.4 -j TRACE
sudo iptables -t raw -I PREROUTING -s 1.2.3.5 -j TRACE
# See no trace logs for these IPs
tail /var/log/kern.log
我在日志文件中看到了 LOG,但是没有看到任何跟踪日志。我找不到任何关于为什么会出现这种情况的信息。
答案1
Debian切换到iptables-超过-nftables与 Debian 10 兼容,因此这包括 Debian 11。
$ update-alternatives --list iptables
/usr/sbin/iptables-legacy
/usr/sbin/iptables-nft
$ update-alternatives --display iptables
iptables - auto mode
link best version is /usr/sbin/iptables-nft
link currently points to /usr/sbin/iptables-nft
link iptables is /usr/sbin/iptables
[...]
目标TRACE
框架与此变体特别不同,以便利用nftablesAPI。iptablesTRACE
目标和xtables-monitor
:
使用 iptables-nft,目标被转换为 nftables 的
meta nftrace
表达式。因此,内核通过 netlink 将跟踪事件发送到用户空间,然后可以使用xtables-monitor --trace
命令显示它们。有关详细信息,请参阅xtables-监视器(8)。
xtables-monitor
用于监视规则集的更改或显示使用 TRACE 目标标记的数据包的规则评估事件.xtables-monitor
将一直运行直到用户中止执行(通常使用 CTRL-C)。
这意味着大量的文档和博客变得陈旧并且只展示传统的方法。
现在有了iptables-nft
,只需运行这个就可以显示跟踪:
xtables-monitor -t
新 API 至少具有一个优点:
较旧的 API(使用命令时仍然存在iptables-legacy
)将 TRACE 结果发送到内核环形缓冲区(例如:使用dmesg
)。此缓冲区不了解网络命名空间,因此可以选择仅记录初始网络命名空间活动(包括 TRACE 结果),或使用切换记录所有网络命名空间活动。TRACE 非常冗长,这很快就会成为一个问题。
新的 API 使用网络链接多播式套接字消息,向可能的多个侦听器提供信息。它还具有网络命名空间感知功能。它不会污染日志。实施者选择破坏此特定目标的兼容性,仅在调试时使用,以利用nftables' API 而不是保留原始行为。
这意味着当运行多个网络命名空间时,可以分别跟踪它们(只要它们具有带有 TRACE 目标的规则),例如这样:
ip netns exec othernamespace xtables-monitor -t
与所有其他网络命名空间完全隔离。
这nftables命令nft monitor trace
大部分情况下也能正常工作(可能不显示本机 xtables 匹配和目标),而不是xtables-monitor -t
监视这些iptables规则,因为它们是相同的 API。
实际上,使用NFLOG
目标而不是LOG
具有类似的行为(并且与使用旧版或 nft API 相同)并使用相同类型的工具发送日志,对于专门的日志记录工具:通常ulogd
但即使tcpdump
在 Linux 上也能够捕获它。例如:
1号航站楼:
$ ping 127.0.0.1
[...]
终端 2 (作为 root):
# iptables -I INPUT -i lo -p icmp -j NFLOG --nflog-group 123
# tcpdump -ttttt -n -l -i nflog:123
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on nflog:123, link-type NFLOG (Linux netfilter log messages), snapshot length 262144 bytes
00:00:00.000000 IP 127.0.0.1 > 127.0.0.1: ICMP echo request, id 47883, seq 36, length 64
00:00:00.000399 IP 127.0.0.1 > 127.0.0.1: ICMP echo reply, id 47883, seq 36, length 64
00:00:01.023906 IP 127.0.0.1 > 127.0.0.1: ICMP echo request, id 47883, seq 37, length 64
00:00:01.023976 IP 127.0.0.1 > 127.0.0.1: ICMP echo reply, id 47883, seq 37, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel