この記事は、進行中の Linux IPTables シリーズの記事の一部です。 IPTables ルールが期待どおりに機能しない場合は、トラブルシューティングのために、IPTables でドロップされたパケットをログに記録することをお勧めします。この記事では、ドロップされた着信パケットと発信パケットの両方をログに記録する方法について説明します。
IPTables を初めて使用する場合は、まず IPTables の基本的な概念に慣れてください。
ドロップされたすべての入力パケットをログに記録
まず、ドロップされた iptables のすべての入力パケットを syslog に記録する方法を理解する必要があります。
すでにたくさんの iptables ファイアウォール ルールがある場合は、これらを一番下に追加します。これにより、ドロップされたすべての入力パケット (着信) が /var/log/messages に記録されます
iptables -N LOGGING iptables -A INPUT -j LOGGING iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 iptables -A LOGGING -j DROP
上記の例では、次のことを行います:
- iptables -N LOGGING:LOGGING という新しいチェーンを作成します
- iptables -A INPUT -j LOGGING:残りの受信パケットはすべて LOGGING チェーンにジャンプします
- 3 行目:着信パケットを syslog (/var/log/messages) に記録します。この行については、以下で詳しく説明します。
- iptables -A LOGGING -j DROP:最後に、LOGGING チェーンに到達したすべてのパケットをドロップします。つまり、実際に着信パケットをドロップするようになりました。
上記の行 #3 には、ドロップされたパケットをログに記録するための次のオプションがあります。
- -m limit:limit matching モジュールを使用します。これを使用すると、–limit オプションを使用してロギングを制限できます。
- –limit 2/min:ロギングの最大平均一致率を示します。この例では、同様のパケットの場合、ロギングを 1 分あたり 2 に制限します。 2/秒、2/分、2/時、2/日も指定できます。これは、同じドロップされたパケットの繰り返しメッセージでログ メッセージを混乱させたくない場合に役立ちます。
- -j LOG:これは、このパケットのターゲットが LOG であることを示します。つまり、ログ ファイルに書き込みます。
- –log-prefix “IPTables-Dropped:” /var/log/messages ファイルに書き込まれるログ メッセージに追加される任意のログ プレフィックスを指定できます
- –log-level 4 これは標準の syslog レベルです。 4は警告です。 0 から 7 の範囲の数値を使用できます。0 は緊急事態、7 はデバッグを意味します。
破棄された発信パケットをすべてログに記録
これは上記と同じですが、下の 2 行目には INPUT ではなく OUTPUT があります。
iptables -N LOGGING iptables -A OUTPUT -j LOGGING iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 iptables -A LOGGING -j DROP
破棄されたすべてのパケットをログに記録する (着信と発信の両方)
これは前と同じですが、前の 2 つの例から行番号 2 を取得し、ここに追加します。つまり、LOGGING チェーンにジャンプする INPUT と OUTPUT に別の行を用意します。
ドロップされた受信パケットと送信パケットの両方をログに記録するには、既存の iptables ファイアウォール ルールの末尾に次の行を追加します。
iptables -N LOGGING iptables -A INPUT -j LOGGING iptables -A OUTPUT -j LOGGING iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 iptables -A LOGGING -j DROP
また、前に説明したように、デフォルトでは、iptables は /var/log/messages を使用してすべてのメッセージをログに記録します。これを独自のカスタム ログ ファイルに変更する場合は、次の行を /etc/syslog.conf に追加します
kern.warning /var/log/custom.log
IPTables ログの読み方
以下は、送受信パケットがドロップされたときに /var/log/messages に記録された行のサンプルです。
Aug 4 13:22:40 centos kernel: IPTables-Dropped: IN= OUT=em1 SRC=192.168.1.23 DST=192.168.1.20 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=59228 SEQ=2 Aug 4 13:23:00 centos kernel: IPTables-Dropped: IN=em1 OUT= MAC=a2:be:d2:ab:11:af:e2:f2:00:00 SRC=192.168.2.115 DST=192.168.1.23 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=9434 DF PROTO=TCP SPT=58428 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0
上記の出力では:
- IPTables-Dropped:これは、ログに –log-prefix オプションを指定して使用したプレフィックスです
- IN=em1 これは、この着信パケットに使用されたインターフェースを示します。これは発信パケットでは空になります
- OUT=em1 これは、発信パケットに使用された インターフェース を示します。これは、着信パケットに対して空になります。
- SRC=パケットの送信元 IP アドレス
- DST=パケットが送信された宛先 IP アドレス
- LEN=パケットの長さ
- PROTO=プロトコルを示します (上記のように、1 行目は送信 ICMP プロトコル用で、2 行目は受信 TCP プロトコル用です)
- SPT=ソース ポートを示します
- DPT=宛先ポートを示します。上記の 2 行目では、宛先ポートは 443 です。これは、着信 HTTPS パケットがドロップされたことを示しています
その他の IPTables チュートリアル
- Linux ファイアウォール チュートリアル:IPTables テーブル、チェーン、ルールの基礎
- Linux IPTables:ファイアウォール ルールを追加する方法 (Allow SSH の例を使用)
- Linux IPTables:着信および発信ルールの例 (SSH および HTTP)
- IPTables Flush:RedHat および CentOS Linux でのすべてのルールの削除/削除
- 最もよく使用される 25 の Linux IPTables ルールの例