Networking
如何通過 iptables 獲取有關丟棄流量的指標?
我們正在使用 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
有什麼方法可以獲取丟棄數據包的數量嗎?我想計算最後一分鐘、一小時內丟棄的數據包數量等指標。很快。
主要目的是監控配置錯誤和安全漏洞。如果防火牆規則有誤,突然一堆數據包開始被丟棄。同樣,如果發生攻擊,我們預計被拒絕數據包的數量會發生變化。
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
顯示我的本地網路上沒有丟棄的數據包,但 icmp 拒絕了 182 個數據包,並顯示了一條日誌消息,例如您列出的那個。具有 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