Linux的iptables规则调试、连接跟踪、报文跟踪

作者: 李佶澳   转载请保留:原文地址   更新时间:2018/09/01 15:27:24

说明

在调查kubernetes的node上的重启linux网络服务后,pod无法联通的问题时,突然发现,没有掌握一套行之有效的调试iptables规则、追踪linux上的连接、报文的方法。

iptables规则调试 – limit

linux的iptables使用-调试方法中介绍了一种调试方法:使用limit模块打印日志

#在/etc/rsyslog.conf添加
kern.=debug     /var/log/firewall

可能需要手动创建文件/var/log/firewall

重启rsyslog:

touch /var/log/firewall
systemctl restart rsyslog

之后可以添加如下的iptables规则,当报文满足规则条件时,就会在/var/log/firewall中打印出日志。

iptables -t raw -A OUTPUT -m limit --limit 5000/minute -j LOG --log-level 7 --log-prefix "raw out: "

和其它iptables一样,也可以添加IP、端口等条件:

iptables -t raw -A PREROUTING -p icmp -s 8.8.8.8/32 -m limit --limit 500/minute -j LOG --log-level 7 --log-prefix "mangle prerouting: "

打印出来的日志如下:

Jun 13 19:58:21 dev-slave-110 kernel: raw prerouting: IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=13629 SEQ=15

iptables规则调试 – TRACE

TRACE只能在raw表中使用

netfilter/iptables/conntrack debugging中给出了另一个方法,通过-j TRACE

-A PREROUTING -p icmp -s 8.8.8.8/32 -j TRACE

iptables-extensions中可以找到对TRACE的介绍:

This target marks packets so that the kernel will log every rule which match the packets as those traverse the tables, chains, rules.

还需要加载内核模块:

modprobe ipt_LOG

之后可以通过dmesg,或者在/var/log/message中查看到匹配的报文的日志:

Jun 16 17:44:05 dev-slave-110 kernel: TRACE: raw:PREROUTING:rule:2 IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=4064 SEQ=24
Jun 16 17:44:05 dev-slave-110 kernel: TRACE: raw:cali-PREROUTING:rule:1 IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=4064 SEQ=24
Jun 16 17:44:05 dev-slave-110 kernel: TRACE: raw:cali-PREROUTING:rule:3 IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=4064 SEQ=24
Jun 16 17:44:05 dev-slave-110 kernel: TRACE: raw:cali-from-host-endpoint:return:1 IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=4064 SEQ=24
Jun 16 17:44:05 dev-slave-110 kernel: TRACE: raw:cali-PREROUTING:return:5 IN=eth0 OUT= MAC=52:54:15:5d:39:58:02:54:d4:90:3a:57:08:00 SRC=8.8.8.8 DST=10.39.0.110 LEN=84 TOS=0x00 PREC=0x00 TTL=32 ID=0 PROTO=ICMP TYPE=0 CODE=0 ID=4064 SEQ=24

查看连接跟踪表 – conntrack

安装:

yum install -y conntrack-tools

使用:

$ conntrack -h
Command line interface for the connection tracking system. Version 1.4.4
Usage: conntrack [commands] [options]

Commands:
  -L [table] [options]        List conntrack or expectation table
  -G [table] parameters       Get conntrack or expectation
  -D [table] parameters       Delete conntrack or expectation
  -I [table] parameters       Create a conntrack or expectation
  -U [table] parameters       Update a conntrack
  -E [table] [options]        Show events
  -F [table]            Flush table
  -C [table]            Show counter
  -S                    Show statis

连接跟踪表的参数可以在kernel文档Documentation/networking/nf_conntrack-sysctl.txt中找到。

参考

  1. kubernetes的node上的重启linux网络服务后,pod无法联通
  2. linux的iptables使用-调试方法
  3. netfilter/iptables/conntrack debugging
  4. nftables HOWTO
  5. 利用raw表实现iptables调试

本文原创首发于网站:www.lijiaocn.com

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: lijiaocn@foxmail.com,备注网站合作 友情链接: lijiaocn github.com