ネットワークにクライアントがあり、arpspoofがインストールされたコンピューターを介してルーターに接続されています。パケット転送を停止したい場合は、次のコマンドを実行します。
iptables -A FORWARD -j REJECT
それは私が期待したように働いています。しかし、私が何かをしようとすると:
iptables -A FORWARD -j ACCEPT
パケットを最初のように通過させることができません。
私は何か間違ったことをしているのですか、それとも「受け入れる」とは異なる他の引数を使用する必要がありますか?
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
ルールが来るbeforeACCEPT
ルールなので、最初にトリガーされるため、転送は行われません。
したがって、REJECT
ルールを追加する代わりに、ACCEPT
ruleを削除する必要があります。 REJECTルールを削除するには、次を実行します。
iptables -D FORWARD -j REJECT
詳細については、iptablesのマンページを参照してください。
-A
フラグは、ルールをチェーンに追加するようにiptablesに指示します。つまり、ルールはREJECT
ルールの下に置かれ、最初のルールが一致するため、使用されません。
iptables -L FORWARD
を使用してルールをリストすると、自分で確認できます。追加したルールを削除するには、次を実行します。
iptables -D FORWARD -j REJECT
チェーンにそのようなルールがなくなるまで。
FORWARD
ルールの最後で、ルールが1つだけになる新しいチェーンにジャンプするために、どうしようとするのでしょうか。 ACCEPT
またはREJECT
の場合があります。いう...
iptables -N accept-chain
iptables -A accept-chain -j ACCEPT
iptables -A FORWARD -j accept-chain
その後、accept-chain
でこの1つのルールを次のように変更できます
iptables -R accept-chain 1 -j REJECT
トラフィックを無効にする場合、または-j ACCEPT
を有効にする場合。
また、ルーティングのオンとオフを切り替える理由
echo "0" > /proc/sys/net/ipv4/ip_forward
パケット転送を無効にする場合と"1"
-有効にする場合。
順序は重要です。これにより、ルールが追加ではなく上部に挿入されます。
iptables -I FORWARD 1 -j ACCEPT
-私は挿入することであり、#1は位置です