iptables:找出哪个数据包被哪条规则阻止了?

iptables:找出哪个数据包被哪条规则阻止了?

我该如何设置 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”(表示内置链的策略)。它只能在原始表中使用。

相关内容