![iptables:找出哪个数据包被哪条规则阻止了?](https://linux22.com/image/501510/iptables%EF%BC%9A%E6%89%BE%E5%87%BA%E5%93%AA%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8C%85%E8%A2%AB%E5%93%AA%E6%9D%A1%E8%A7%84%E5%88%99%E9%98%BB%E6%AD%A2%E4%BA%86%EF%BC%9F.png)
我该如何设置 iptables 以便知道哪个数据包被哪个规则阻止?我知道的一个解决方案是 -j LOG --log-prefix。还有其他方法吗?
答案1
您可以查看数据包/字节计数器:
链式防火墙 (2 个引用)
包字节数目标 保护 选择 退出 源 目的地73万 42千兆接受所有 -- lo * 0.0.0.0/0 0.0.0.0/0
您可以使用“-Z”选项清除计数器。如果您想跟踪源,您可以将数据包类型引导到它们自己的表中,并根据源单独接受它们。
iptables -N SMTP
iptables -I INPUT -p tcp --dport 25 -j SMTP
iptables -A SMTP -s $network_1 -j ACCEPT
iptables -A SMTP -s $network_2 -j ACCEPT
iptables -A SMTP -j RETURN
#Track by network instead of application
iptables -N NETWORK_1
iptables -I INPUT -s $network_1 -j NETWORK_1
iptables -A NETWORK_1 -p tcp --dport 25 -j ACCEPT -m comment --comment "MAIL"
iptables -A NETWORK_1 -p udp --dport 10000:20000 -j ACCEPT -m comment --comment "VOIP RTP"
iptables -A NETwORK_1 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A NETWORK_1 -p tcp -j ACCEPT -m comment --comment "UNKNOWN TCP"
iptables -A NETWORK_1 -j RETURN -m comment --comment "This rule is not required but used for ip accounting"
答案2
还有 -j ULOG,您可以将其与 ulogd 一起使用。
答案3
观察TRACE
目标
此目标标记数据包,以便内核记录与数据包匹配的每个规则,因为这些规则遍历表、链和规则。(记录需要 ipt_LOG 或 ip6t_LOG 模块。)数据包使用字符串前缀记录:“TRACE:tablename:chainname:type:rulenum”,其中类型可以是“rule”(表示普通规则)、“return”(表示用户定义链末尾的隐式规则)和“policy”(表示内置链的策略)。它只能在原始表中使用。