iptables -Aと-Iオプションの違い


20

DNSサーバーへのDNSクエリを許可するようにiptablesを(何時間も)構成しようとしましたが、使用していたルール追加オプションのためにiptablesがアクセスをブロックし続けることがわかりました。ほとんどのフォーラムは、次のようなルールを提案しています。

iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

しかし、私の場合、ルールを機能させるには、ルールをinsertタイプに変更する必要がありました。

iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT

あるルールは追加用であり、別のルールは挿入用であり、両方の用語の意味を知っていますが、誰かが2つの違いを説明し、どのオプションをいつ使用するかを説明してもらえますか?Ubuntuのiptablesの使い方を調べましたが、あまり情報がありません。

回答:


24

iptables -Aルールセットの最後にルールを追加iptables -Iしますが、指摘したようにルールセットの特定の位置にルールを挿入します。

iptablesのmanエントリを見ると、次のことがわかります。

-I、--insert chain [rulenum] rule-specification指定されたルール番号として、選択したチェーンに1つ以上のルールを挿入します。したがって、ルール番号が1の場合、1つまたは複数のルールがチェーンの先頭に挿入されます。これは、ルール番号が指定されていない場合のデフォルトでもあります。

そして、ここが-Iあなたのために働いたのに-Aそうしなかった理由です。ルール番号を指定しない場合、ルールは最初の位置に挿入されます。つまり、iptablesは最初から最後まですべてのルールを処理し、最初の一致を適用して停止するため、ルールセットのどこかにDNSパケットを禁止するルール(おそらくUDPを一般的に禁止するルールでしょうか?)がある必要があることを意味します
ところで、それはまた、ほとんどのパケットに一致することを意図したルールを一番上に置くべき理由でもあります:最も使用されているルールをandに置くと、パケットは各リソースに対してチェックされ、多くのリソースを消費する可能性があります。

また、使用法について:-Aルールを最後に追加する場合や、ルールがどこにあるかが重要でない場合に、節約して使用できます。ルールを特定の位置に配置するには、-Iたとえば次のように使用しますiptables -I INPUT 6 -p tcp -j DROP(これにより、INPUTルールセットの位置6にあるホスト自体に宛てられたすべてのtcpパケットにDROPステートメントが追加されます)。

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