如何通过 iptables 获取有关丢弃流量的指标?

Hak*_*aba 4 networking firewall iptables packet

我们正在使用 iptables 防火墙。它根据定义的规则记录和删除各种包。iptables 日志文件条目如下所示:

2017-08-08T19:42:38.237311-07:00 compute-nodeXXXXX kernel: [1291564.163235] drop-message : IN=vlanXXXX OUT=cali95ada065ccc MAC=24:6e:96:37:b9:f0:44:4c:XX:XX:XX:XX:XX:XX SRC=10.50.188.98 DST=10.49.165.68 LEN=60 TOS=0x00 PREC=0x00 TTL=57 ID=14005 DF PROTO=TCP SPT=52862 DPT=50000 WINDOW=29200 RES=0x00 SYN URGP=0
Run Code Online (Sandbox Code Playgroud)

有没有办法获得丢弃的数据包的数量?我想计算最后一分钟、一小时内丢弃的数据包数量等指​​标...... 很快。

主要目的是监控配置错误和安全漏洞。如果防火墙规则有错误,就会突然开始丢弃一堆数据包。类似地,如果发生攻击,我们预计被拒绝的数据包数量会发生变化。

meu*_*euh 6

iptables 中的每个规则都有计数器,可以用-v选项显示。添加-x以避免计数器在非常大时被缩写(例如 1104K)。例如,

$ sudo iptables -L -n -v -x
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source    destination 
   39 22221 ACCEPT udp  --  *  *   0.0.0.0/0  0.0.0.0/0 udp spts:67:68 dpts:67:68
 ...
  182 43862 LOG    all  --  *  *   0.0.0.0/0  0.0.0.0/0 LOG flags 0 level 4 prefix "input_drop: "
  182 43862 REJECT all  --  *  *   0.0.0.0/0  0.0.0.0/0 reject-with icmp-host-prohibited
Run Code Online (Sandbox Code Playgroud)

显示我的本地网络上没有丢弃的数据包,但 182 被 icmp 和一条日志消息(例如您列出的消息)拒绝。具有 DROP 策略的配置中的最后两条规则是

  -A INPUT -j LOG --log-prefix "input_drop: "
  -A INPUT -j REJECT --reject-with icmp-host-prohibited
Run Code Online (Sandbox Code Playgroud)

您可以使用 将所有链的计数器归零iptables -Z


这些计数用于 iptables 本身丢弃的数据包。但是,例如,可能还有其他过滤软件也会因拥塞而丢弃数据包。您需要查看每个人提供的任何统计数据。(过时的)netstat程序可以轻松显示由于拥塞而在以太网接口丢弃的数据包计数,甚至在它们被传送到 iptables 之前:

$ netstat -i 
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR 
enp5s0    1500  1097107      0     38 0       2049166      0      0      0 
Run Code Online (Sandbox Code Playgroud)

并且您还可以获取有关内核出于各种原因在其他地方丢弃的数据包的一些统计信息:

$ netstat -s | grep -i drop
27 outgoing packets dropped
16 dropped because of missing route
2 ICMP packets dropped because socket was locked
Run Code Online (Sandbox Code Playgroud)