私の iptables ファイアウォールには奇妙な問題があります。2 つの連続した同一のルール (最初のルールが で、ACCEPT
2 番目のルールが )を設定するとDENY
、着信パケットが拒否され (そのようにログに記録されます) ます。
着信パケットが最初のルールでは無視され、2 番目のルールではキャッチされるというのはどういうことでしょうか?
fwbuilder ビューはここにあります:
ダンプは次のとおりですiptables
:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
In_RULE_0 all -- 0.0.0.0/0 0.0.0.0/0 state NEW
In_RULE_1 all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
In_RULE_0 all -- 0.0.0.0/0 0.0.0.0/0 state NEW
In_RULE_1 all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain In_RULE_0 (2 references)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "FW RULE 0 -- ACCEPT "
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain In_RULE_1 (2 references)
target prot opt source destination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "FW RULE 1 -- DENY "
DROP all -- 0.0.0.0/0 0.0.0.0/0
ルールだけでも試してみましたACCEPT
が、引っかかりませんでした。
私が見つけた唯一の違いは、DENY
ルールが ではないことですstate NEW
が、これは私がすでに構成していて正常に動作している数十のファイアウォールでも同じです。
答え1
次の点に注意してください: iptables オプションを持つルールは、-I
ルールをリストの先頭に配置します。 オプションを持つルールは、-A
ルールをリストの末尾に配置します。
あなたの場合: 両方の (ほぼ同一の) iptables ルールで「-I」を使用した可能性があります。2 番目のルールはリストの先頭に最初のルールの前に挿入され、そのため、ルールが次の順序で含まれるルール リストが作成されます:
match -s x.x.x.x action DROP
match -s x.x.x.x action ACCEPT
パケットは両方のルールに一致するため、DROP
実際の動作テーブル (RAM 内に存在する) の順序で最初のルール ( ) が有効になります。順序は、iptable 構成ファイル内の順序とは関係ありません。
順序を入れ替えると、結果が異なります。
答え2
わかりました。私の FW は完全に正常でしたが、仮想ホストの設定が間違っていました。エラーはありませんでしたが、iptables は許可されていませんでした。許可すると、FW は動作するようになりました... iptables レベルでエラーが見つからないのも不思議ではありません... ご協力ありがとうございました :)
答え3
を使用する場合、 iptables はIn_RULE_0
新しい接続にのみ適用されますstate NEW
。
また、これは INPUT チェーン (サーバーへのパケット) ではなく、FORWARD チェーン (サーバーを通過するパケット) に設定されます。
どのようにテストしていますか? サーバーの特定のインターフェースを ping していますか?
以下の完全な出力を投稿できますか:
iptables -vnL
INPUTチェーン上のトラフィックをログに記録するには、次のルールを試してください(サーバーインターフェースへのping)。
iptables -I INPUT 1 -j In_RULE_0