Linux iptablesが拒否されました-有効に戻す方法を教えてください。


8

ネットワークにクライアントがあり、arpspoofのあるコンピュータを介してルーターに接続しています。パケット転送を停止したい場合は、次のコマンドを実行します。

iptables -A FORWARD -j REJECT

それは私が期待したように働いています。しかし、私が次のようなことをしようとすると:

iptables -A FORWARD -j ACCEPT

パケットを最初のように通過させることができません。

私は何か間違ったことをしているのですか、それとも「承諾」とは異なる他の引数を使用する必要がありますか?


4
あなたが使用しているところで-A、多分あなたは、使用したい-P設定するPの olicy(チェーン内の他のルールが適用されないデフォルトアクション)。たとえば、iptables -P FORWARD DROP(にすることはできませんREJECT)。
JoL、2017

「質問は合理的なシステム管理スキルを実証する必要がある」とはどういう意味ですか?:)
Marco

回答:


35

IPtablesにはルールのリストがあり、各パケットについて、ルールのリストを順番にチェックします。パケットに一致し、ポリシー(ACCEPT、REJECT、DROP)を指定するルールが見つかると、一致するパケットの運命が決定されます。これ以上のルールは検査されません。

これは、コマンドを実行する順序が重要であることを意味します。を使用する場合iptables -A、ルールのリストの最後にルールを追加するので、次のようなルールリストが作成されます。

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     all  --  anywhere             anywhere

REJECTルールはルールの前にあるため、ACCEPT最初にトリガーされ、転送は行われません。

したがって、REJECTルールを追加する代わりに、ルールを削除する必要がありますACCEPT。REJECTルールを削除するには、次を実行します。

iptables -D FORWARD -j REJECT 

詳細については、iptablesのマンページを参照してください。


18

-Aフラグは、それがあなたの下で終わる意味、チェインにルールを追加するのiptablesを伝えREJECT、ルール、および最初のルールがマッチするので、それを使ったことがないです。

あなたはあなたのルールをリストしiptables -L FORWARD、あなたはこれを自分で見るでしょう。追加したルールを削除するには、次を実行します。

iptables -D FORWARD -j REJECT 

チェーンにそのようなルールがなくなるまで。


1

FORWARDルールが1つだけになる新しいチェーンにジャンプするために、ルールの終わりにどうしようとするのでしょうか。ACCEPTまたはかもしれませんREJECT。いう...

iptables -N accept-chain
iptables -A accept-chain -j ACCEPT
iptables -A FORWARD -j accept-chain

その後、この1つのルールをaccept-chain次のように変更できます

iptables -R accept-chain 1 -j REJECT

トラフィックを無効にするか-j ACCEPT、有効にします。

また、ルーティングのオンとオフを切り替える方法

echo "0" > /proc/sys/net/ipv4/ip_forward

パケット転送を無効にする場合と"1"-有効にする場合。


0

順序は重要です。これにより、ルールが追加ではなく上部に挿入されます。

iptables -I FORWARD 1 -j ACCEPT

-私は挿入することです、そして#1は位置です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.