Iptablesのデバッガー


47

iptablesルールを使用してパケットを追跡する簡単な方法を探しています。すべてのトラフィックをログに記録する必要はありません(また、ごく少数のルールのLOGターゲットのみが必要なため)。

Wireshark for Iptablesのようなもの。または、プログラミング言語のデバッガーに似たものですらあります。

ありがとう、クリス

注:派手なGUIツールである必要はありません。ただし、パッケージカウンターを表示する以上のことを行う必要があります。

更新:求められている機能を提供するものが見つからないようです。その場合:レッツ少なくともログインiptablesに基づいています良い技術を見つける- (のための同じルールを記述する必要が簡単にオン・オフすることができ、かつ重複書き込みiptablesのルールを必要としない-j LOG-j ...)を

回答:


10

直接的な解決策は考えられませんが、パケットを追跡する方法についてのラウンドは考えられます。

  1. ログプレフィックスディレクティブ(--log-prefix "Rule 34")を使用して各ルールを記録します
  2. scapyを使用してテストパケットまたはパケットストリームを生成し、TOSフィールドを一意の値に設定します
  3. そのTOS設定のログファイル出力をgrepし、どのルールがログに記録したかを確認します。

アイデアをありがとう。残念ながら、私はすべてのルールをログに記録することはできません(。ディスクは、おそらくそれを行うために十分な速さではないでしょう、一つのシステム上の別では、ロギングはカーネルでは使用できませんiptablesの。)
クリスLercher

1
名前付きパイプをファイルsoftpanorama.org/Logs/Syslog/pipes_in_syslog.shtmlとして使用します ただし、カーネルにログインできないため、SOL
Haakon

おかげで、おそらく私の問題を解決することはできませんが、syslogのパイピングが可能になるということを知っておくのは一般的にいいことです-いつか役に立つかもしれません!
クリスラーチャー

ロギングに関する1つの関連する質問:iptablesは複数のパケットを同時に処理しますか(ログエントリをインターリーブできるように)?その場合、TOSのアイデアは多くのiptables LOG分析にとって絶対に必要なものだと思います!
クリスラーチャー

私はその答えを知りません。ただし、各インターフェイスは少なくともiptablesによって同時に処理されると予想されます。
ホーコン

82

最新の十分なカーネルとiptablesのバージョンがある場合は、TRACEターゲットを使用できます(少なくともDebian 5.0に組み込まれているようです)。トレースの条件をできるだけ具体的に設定し、デバッグしていないときはトレースルールを無効にする必要があります。これは、多くの情報をログに出力するためです。

TRACE
このターゲットは、テーブル、チェーン、ルールを通過するパケットに一致するすべてのルールをカーネルが記録するようにパックをマークします。(ロギングには、ipt_LOGまたはip6t_LOGモジュールが必要です。)パケットは、ストリングプレフィックス「TRACE:tablename:chainname:type:rulenum」でログに記録されます。ここで、タイプはプレーンルールの「rule」、暗黙ルールの「return」ユーザー定義チェーンの最後に、組み込みチェーンのポリシーの「ポリシー」。rawテーブルでのみ使用できます。

このようなルールを追加した場合

iptables -t raw -A PREROUTING -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE
iptables -t raw -A OUTPUT -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE

次のような出力が提供されます。

# cat /var/log/kern.log | grep 'TRACE:'
Mar 24 22:41:52 enterprise kernel: [885386.325658] TRACE: raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325689] TRACE: mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325713] TRACE: nat:PREROUTING:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: nat:nat.1:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: mangle:INPUT:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:INPUT:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_all_c1:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_irc_c2:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)

8
ありがとう、これはすごい!それは実際には最良の答えです、私はそれを受け入れられることを望みます(それは報奨金の多い質問だったので、受け入れられた答えは明確です)。(カーネルの制限により)すべてのシステムで使用することはできませんが、一部のシステムでは使用できます。私が探していたものに本当に近いので、この答えは賛成に値します。
クリスラーチャー

昨夜、iptablesのmanページを読み直していたときにこの機能を見つけたので、別の質問に答えることができました。比較的新しい機能のようです。承認済みとしてマークできないという心配はありません。たぶん、これは私に別のポピュリストバッジを獲得するのに十分な時間をかけて投票されるでしょう。
ゾレダチェ

これは本当に、iptablesでパケットをトレースするための標準的な答えです。最近のカーネルの中には、デフォルトで有効にしないものがあります。
ピーターグレース

カーネルはどのくらい前にTRACEをサポートしていますか?CentOS 6.4で成功しましたが、CentOS 6.2では使用しませんでした
-sebelk

6

1つの投稿で3つの回答:

1)スクリプトによるデバッグ:

#!/bin/bash
debug() {
    if [ -n "$debug" ]; then
        $@ || echo -e "The command which launched the error:\n$@"
    else
        $@
    fi
}
debug=1
IPTABLES="debug /sbin/iptables"

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
....

2)syslogによるデバッグ

このウェブサイトから:http : //www.brandonhutchinson.com/iptables_fw.html

If you want to make a syslog entry of dropped packets, change:

# Drop all other traffic
/sbin/iptables -A INPUT -j DROP

To:

# Create a LOGDROP chain to log and drop packets
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP


You may also want to configure the --log-level to log dropped packets to a separate file instead of /var/log/messages:

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP --log-level debug


/etc/syslog.conf change:

# Send iptables LOGDROPs to /var/log/iptables
kern.=debug                                             /var/log/iptables

Reload the syslogd service for the change to take effect.
/sbin/service syslog reload

3)デバッグなし、素敵なiptables編集:

また、これは参考になります:http ://www.fwbuilder.org/


1
ありがとう。ポイント1)および3)iptablesルールを介してパケットを追跡することとはあまり関係ありませんが、「-log-level」に基づいてログエントリをリダイレクトすることに関するポイントは、最終的に実際にフォールバックする必要がある場合に役立ちます。ロギング(他に解決策がない場合)。
クリスラーチャー

2

同じ質問があり、ZoredacheがTRACE / ipt_LOGを指していることが解決策であることがわかりました!

さらに、現在アクティブなすべてのiptablesルールの前にLOGルールを挿入/削除するスクリプトを見つけました。私はそれを試してみましたが、本当に素晴らしいツールであることがわかりました。-出力はTRACEソリューションに似ています-利点:ロード元に関係なく、アクティブなiptables構成で動作します。その場でログのオン/オフを切り替えることができます!Firewall Builderまたは使用するツールによって生成されたファイアウォールスクリプトを変更する必要はありません...-欠点:変更なしで、スクリプトはすべてのアクティブルールのログルールを作成します。代わりに、TRACEルールを使用する場合、おそらくiptablesの処理を今すぐ調査したいアドレス/サービス/接続にロギングを制限するでしょう。

とにかく、私はアプローチが好きです:)トニー・クレイトンへの称賛、見てください:http : //lists.netfilter.org/pipermail/netfilter/2003-March/043088.html

よろしく、クリス


0

私は通常、パケットとバイトのカウンターを使用して、ルールがどのように機能するかを確認し、欠落または誤りを見つけます。

「iptables -nvL」で表示できます。


2
しかし、著者が何を望んでいるかはわかります。使用中のインターフェイスでiptablesルールをテストしようとする場合、特にカウンターを監視するだけでは、パケットがいくつかのルールで一致し、プロセス内のユーザー定義チェーンを飛び回る可能性が高い場合はあまり役に立ちません(一般的な場合不要なIPアドレスのフィルタリング、およびフラッド保護ルール)。
PP。

@PP:まさに、あなたは私の心を読んでいます。@Vi:ありがとう、これはいくつかの状況で役立ちます。私は時々それを使いました。今、私はもっと強力な何かが必要です。
クリスラーチャー

-2

知る限り、IPパケットは最初に一致するまでルールチェーンを通過します。ですから、ここで何が問題なのか本当にわかりません。あなたが持っている場合:

  1. ルール1
  2. ルール2
  3. ルール3 LOG

また、パケットはログに記録されます。つまり、ルール3が最初に一致するルールです。


違います。パケットは複数のルールに一致できますが、一致します。ルールにアクション(-j DROPまたはなど-j ACCEPT)がない限り、チェーンのさらに下で一致を継続します。
PP。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.