web-dev-qa-db-ja.com

Iptablesのデバッガー

Iptablesルールを介してパケットを追跡する簡単な方法を探しています。私はすべてのトラフィックをログに記録したくないので(そして、ごく少数のルールのLOGターゲットだけを取得したいので)、これはロギングについてはそれほど重要ではありません。

Wireshark for Iptablesのようなもの。あるいは、プログラミング言語のデバッガーに似たものでもかまいません。

ありがとうクリス

注:豪華なGUIツールである必要はありません。ただし、パッケージカウンターなどを表示するだけでは不十分です。

pdate:要求された機能を提供するものが見つからないかのように見えます。その場合:少なくともiptablesロギングに基づく優れた手法を見つけましょう。これは簡単にオンとオフを切り替えることができ、iptablesルールを重複して記述する必要はありません(-j LOGと同じルールを記述する必要があります)。 -j ...

48
Chris Lercher

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

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

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

[〜#〜]トレース[〜#〜]
このターゲットはパックをマークし、カーネルがパケットがテーブル、チェーン、ルールを通過するときにパケットに一致するすべてのルールをログに記録します。 (ロギングにはipt_LOGまたはip6t_LOGモジュールが必要です。)パケットは、文字列接頭辞を付けてログに記録されます。ユーザー定義のチェーンの最後と、組み込みチェーンのポリシーの「ポリシー」。生のテーブルでのみ使用できます。

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

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)
82
Zoredache

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/

6
Marc Riera

同じ質問があり、ZoredacheがTRACE/ipt_LOGをポイントしていることがわかりました!

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

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

よろしく、クリス

2
chris

私は通常、パケットとバイトのカウンターを使用して、ルールがどのように機能するかを確認し、不足しているものや間違っているものを見つけます。

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

0
Vi.