Chapter 11. iptablesのターゲットとジャンプ

Table of Contents
11.1. ACCEPTターゲット
11.2. CLASSIFYターゲット
11.3. CLUSTERIPターゲット
11.4. CONNMARKターゲット
11.5. CONNSECMARKターゲット
11.6. DNATターゲット
11.7. DROPターゲット
11.8. DSCPターゲット
11.9. ECNターゲット
11.10. LOGターゲット
11.11. MARKターゲット
11.12. MASQUERADEターゲット
11.13. MIRRORターゲット
11.14. NETMAPターゲット
11.15. NFQUEUEターゲット
11.16. NOTRACKターゲット
11.17. QUEUEターゲット
11.18. REDIRECTターゲット
11.19. REJECTターゲット
11.20. RETURNターゲット
11.21. SAMEターゲット
11.22. SECMARKターゲット
11.23. SNATターゲット
11.24. TCPMSSターゲット
11.25. TOSターゲット
11.26. TTLターゲット
11.27. ULOGターゲット
11.28. まとめ

ターゲット (target) とジャンプ (jump) は、ルールの条件部に完全に合致するパケットを、どう処すべきかをルールに指示する。基本的なターゲットとしては、まず、最初に説明する ACCEPTDROP がある。しかしその前に、ジャンプがどのようなものか簡単に見ておくことにしよう。

ジャンプとターゲットの指定方法は、まったく同じだ。ただし、ジャンプの場合には、ジャンプ先のチェーンが同じテーブル内に存在している必要がある。既に述べたように、ユーザ定義チェーンは -N コマンドで作成する。例を示そう。 filter テーブルに tcp_packets という名前のチェーンを作るとすれば、このようにする:

iptables -N tcp_packets
    

その後、下記のようにすれば、そこへ飛ぶジャンプターゲットが指定できる:

iptables -A INPUT -p tcp -j tcp_packets
    

こうすると、 INPUT チェーンから tcp_packets チェーンにジャンプして、 tcp_packets チェーンの中を巡ることができる。もし仮に tcp_packets チェーンの終端に達したら、パケットは INPUT チェーンに戻り、他のチェーン (この場合 tcp_packets) へジャンプさせられた項目の次から先を引き続き進んでいく。パケットがサブチェーンのひとつで ACCEPT された場合には、それは親チェーンでも ACCEPT されたことになり、もう親チェーンの中を進むことはない。ただし、他のテーブルのチェーンは通常通り通っていくことに注意しなければならない。テーブルとチェーンの流れについてのより詳しい説明は、チャプター テーブルとチェーンの道のり を参照していただきたい。

かたや、ターゲットは、当該のパケットに対して起こすアクションを定義する。その例が、目的に応じて使い分ける ACCEPTDROP だ。施したい処理はこの他にもいろいろあるとは思うが、そうしたアクションについては、このセクションで詳しく述べてゆく。ターゲットへのジャンプは、ターゲットが異なれば、伴う結果も自ずと異なる。一部のターゲットでは、パケットは前述のようにチェーンとその親チェーンの進行をやめる。そうしたルールの例が、 DROPACCEPT だ。進行をストップしたルールは、もう、そのチェーンのルールも、親チェーンのルールも巡らない。一方、別のターゲットでは、パケットにしかるべきアクションを起こした後も、パケットは残りのルールを進んでいく。この種の例としては LOG, ULOG, TOS といったターゲットがある。これらのターゲットは、パケットをログ・改変した後、現在のチェーンにおける次のルールへパケットを渡す。このような動作をさせたくなるのは、例えば、あるパケット/ストリームの TTLTOS をともに変えたい場合だ。一部のターゲットでは追加オプション (TOS の値の設定など) も指定できる一方、どんなオプションも必要としないターゲットも存在する -- ただし必要なら使うこともできる (ログ接頭辞、マスカレード先ポートなど)。これからターゲットを解説していく中で、そういった点についてもできるだけカバーしていく。では、どんな種類のターゲットがあるのか見ていくことにしよう。