我们正在使用 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
有什么方法可以获取丢弃的数据包的数量吗?我想计算诸如最后一分钟、一小时内丢弃的数据包数量之类的指标。很快。
主要目的是监控配置错误和安全漏洞。如果防火墙规则有错误,一堆数据包就会突然开始被丢弃。同样,如果发生攻击,我们预计被拒绝的数据包数量会发生变化。
答案1
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
显示我的本地网络上没有丢弃数据包,但 182 被 icmp 拒绝,并显示一条日志消息,例如您列出的消息。配置中策略为 DROP 的最后两条规则是
-A INPUT -j LOG --log-prefix "input_drop: "
-A INPUT -j REJECT --reject-with icmp-host-prohibited
您可以使用 来将所有链的计数器归零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
您还可以获取有关内核因各种原因在其他地方丢弃的数据包的一些统计信息:
$ netstat -s | grep -i drop
27 outgoing packets dropped
16 dropped because of missing route
2 ICMP packets dropped because socket was locked