web-dev-qa-db-ja.com

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

ドロップされたパケットの数を取得する方法はありますか?最後の1分、1時間にドロップされたパケット数などのメトリックを計算したいと思います。など。

主な目的は、構成の誤りやセキュリティ違反の監視です。ファイアウォールルールに誤りがあると、突然大量のパケットがドロップされ始めます。同様に、攻撃が発生している場合は、拒否されたパケットの数が変動すると予想されます。

2
Hakan Baba

-vオプションで表示できるiptablesの各ルールのカウンターがあります。 -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のポリシーを持つ構成の最後の2つのルールは、

  -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
3
meuh