debugging器的iptables

我正在寻找一个简单的方法来通过iptables规则来跟踪数据包。 这不是关于日志logging,因为我不想logging所有的stream量(我只想要很less的规则有LOG目标)。

像Wireshark的iptables的东西。 或者甚至可能类似于编程语言的debugging器。

谢谢Chris

注意:它不一定是一个奇特的GUI工具。 但它不仅仅是展示一个包装柜台。

更新:几乎看起来好像我们找不到任何提供所要求function的东西。 在这种情况下:我们至less可以find一种基于iptables日志logging的好技术 – 可以很容易地打开和closures,而且不需要冗余地写iptables规则(必须为-j LOG-j ...写相同的规则-j ...

我想不出一个直接的解决scheme,但我可以想象一个跟踪数据包的方法。

  1. 用日志前缀指令(–log-prefix“Rule 34”)logging每条规则
  2. 使用scapy生成一个testing数据包或数据包stream,并将TOS字段设置为唯一
  3. grep该TOS设置的日志文件输出并查看哪些规则logging了它。

如果你有足够的内核和版本的iptables,你可以使用TRACE目标(至less在Debian 5.0中是内置的)。 您应该设置跟踪条件尽可能具体,并且在不debugging时禁用任何TRACE规则,因为它会将大量信息传递给日志。

跟踪
这个目标标记打包,以便内核将logging每个匹配数据包的规则,如遍历表,链,规则。 (logging需要使用ipt_LOG或ip6t_LOG模块。)数据包以string前缀“TRACE:tablename:chainname:type:rulenum”logging,其中type可以是普通规则的“rule”,隐式规则是“return”在用户定义的链条的末端和用于内置链条的策略的“策略”。 它只能用在原始表格中。

如果你添加这样的规则

 iptables -t raw -A PREROUTING -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE iptables -t raw -A OUTPUT -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE 

你将会看到像这样的输出。

 # cat /var/log/kern.log | grep 'TRACE:' Mar 24 22:41:52 enterprise kernel: [885386.325658] TRACE: raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325689] TRACE: mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325713] TRACE: nat:PREROUTING:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: nat:nat.1:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: mangle:INPUT:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:INPUT:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_all_c1:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_irc_c2:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402) 

一个职位的三个答案:

1)通过脚本debugging:

 #!/bin/bash debug() { if [ -n "$debug" ]; then $@ || echo -e "The command which launched the error:\n$@" else $@ fi } debug=1 IPTABLES="debug /sbin/iptables" $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP .... 

2)通过syslog进行debugging

从这个网站: http : //www.brandonhutchinson.com/iptables_fw.html

 If you want to make a syslog entry of dropped packets, change: # Drop all other traffic /sbin/iptables -A INPUT -j DROP To: # Create a LOGDROP chain to log and drop packets /sbin/iptables -N LOGDROP /sbin/iptables -A LOGDROP -j LOG /sbin/iptables -A LOGDROP -j DROP # Drop all other traffic /sbin/iptables -A INPUT -j LOGDROP You may also want to configure the --log-level to log dropped packets to a separate file instead of /var/log/messages: # Drop all other traffic /sbin/iptables -A INPUT -j LOGDROP --log-level debug /etc/syslog.conf change: # Send iptables LOGDROPs to /var/log/iptables kern.=debug /var/log/iptables Reload the syslogd service for the change to take effect. /sbin/service syslog reload 

3)没有debugging,漂亮的iptables编辑:

这也可以是有用的: http : //www.fwbuilder.org/

有同样的问题,发现指向TRACE / ipt_LOG的Zoredache是​​解决scheme!

此外,我发现一个脚本,插入/删除所有当前活动的iptables规则之前的日志规则。 我试了一下,发现它是一个非常好的工具。 – 输出与TRACE解决scheme类似 – 优点:它可以在活动的iptablesconfiguration上工作,不pipe从哪里加载。 你可以打开/closures日志logging! 不需要修改防火墙生成器可能生成的任何防火墙脚本,也不需要使用任何工具。 – 缺点:无需修改,脚本就会为所有活动规则创build日志规则。 相反,在使用TRACE规则时,您可能会限制日志logging到您想要现在调查iptables处理的地址/服务/连接。

无论如何,我喜欢的东西:)托尼·克莱顿的荣誉,看看: http : //lists.netfilter.org/pipermail/netfilter/2003-March/043088.html

问候,克里斯

我通常使用数据包和字节计数器来查看规则是如何工作的,并找出什么是缺失或错误。

你可以通过“iptables -nvL”查看它们。

AFAIK一个IP数据包遍历规则链直到第一次匹配。 所以我真的不知道这里有什么问题。 如果你有:

  1. 规则1
  2. 规则2
  3. 规则3日志

而一个数据包进入日志,这意味着规则3是第一个匹配的规则。