指定したチェーン全てを削除。先頭にチェーンを追加。ルール番号を指定することで任意の場所に挿入。-Pチェーン内全体で有効なポリシーを定義。デフォルトはAccept。新しいチェーンを作成。パケットフィルタリングを設定する前に既存のフィルタリングルールは全て破棄する必要があります。以下のコマンドで実行することにより全てのルールが削除されます。チェーンは特に明記していませんが、省略した場合、全てのチェーンに適用されます。-Fルールを削除したらポリシーの設定を行います。FORWARDのみ指定できユーザ定義チェーンは指定できません。targetにはDROPまたはACCEPTのみ設定できます。以下ではINPUT/OUTPUTチェーンにDROPポリシーを設定しています。DROP続いて許可ルールを追加していくわけですが、まず最初に制御用の通信であるICMPの設定を行います。ICMPのルールを設定する場合にはオプションでプロトコルにicmpを設定します。icmpには以下のタイプがあります。Reply次の例ではfilterテーブルのINPUT,OUTPUTチェーンにタイプを指定せずにICMPをまるごと許可するルールを追加しています。replayを指定してもOKです。replayを許可するルールになります。ACCEPTiptablesによる通信の制御はループバックに対しても適用されます。通常はループバックに対しては通信を制限しないため許可ルールを設定しておきます。次のようにオプションでloインターフェイスを指定して通信許可の設定を追加します。TCPやUDPのルールを追加する場合にはオプションでプロトコルtcp/udpを指定し、さらにポート番号、送信元アドレスやポート、送信先アドレスやポートを指定することで細かな設定をすることができます。stateモジュールを利用することで通信の段階に応じた制限も可能です。一般的には一旦受け付けた接続は通信は全て許可し、接続の可否だけ制御します。最初に受け付けた通信を許可する設定を行います。-mオプションでstateモジュールの利用を宣言し、--stateオプションでルールの対象となる状態を指定します。以下ではESTABLISHEDとRELATEDのパケットを許可していますので一旦コネクションを接続した後の全ての通信が許可されます。ACCEPT次に接続を許可する設定を行います。)への接続を全て許可する場合は--dportを使って以下のように設定を行います。-mtcpでTCP用モジュールを指定し、プロトコル、宛先ポートを指定しています。ACCEPT特定の相手からのみ接続を許可するには-sオプションを使用します。)を許可する場合の例です。ACCEPTUDPの場合も同様です。)への通信を全て許可する場合には次のように設定を行います。ACCEPTまたサーバ内部から外部への通信の設定はOUTPUTチェーンに対して行います。)の接続を許可する設定の例です。ACCEPT-dオプションを使えば接続相手のIPアドレスを明示的に指定することもできます。以下は192.168.12.2へのSMTP接続を許可する設定です。ACCEPTFORWARDチェーンへ同様の設定をすることでルータとして転送する場合の通信許可も同様に行うことができます。attackは既に古い手法であり、これを使うのであればhashlimitモジュールの使用をおすすめします。hashlimitはクライアントのIPアドレスごとに一定期間の接続回数をカウントし、閾値を超えた場合はドロップするといったことが可能となります。ありがちなのはWebメールサーバなどにおいて辞書攻撃を受けて不正にログインされSPAMを送られるということが過去にありました。いったケースでは短時間に猛烈なアクセスをかけてくるので、こういった類の攻撃を防ぐのにも役立つと思います。このhashlimitを使ったiptablesのconfigは以下のようになります。ACCEPT長いので3行にわけて記載しています。各項目の意味は以下のようになります。単位はmsで120000は2分間。ssh-limit送信元IPを記録するファイル名。繰り返しますがハッシュリミットは規定時間内にどれだけのパケットを受理するのかを制限するためのものです。-hashlimit-htable-expireでその規定時間を設定します。上では2分という値を設定しており、これが一定の区切りとなります。この2分の間に同一送信元IPから5パケット以上届けばリミットが有効となり、その後は毎分5パケットのみ許可されるようになります。2分が経過すると送信元IPが一旦リフレッシュされ、以降は同様の動きとなります。hashlimit-nameで指定するファイルは送信元IPアドレスは以下に記録されます。1920000■実際の設定これまではINPUT/OUTPUTの両方でフィルタリングを考慮してきましが、実際の現場ではINPUTのみ設定することが多いです。市販のFirewall製品のようにiptablesはセッション情報まで保持しておらずこれまでみてきたように入力/出力パケットの両方を考慮しなければならず机上で設計した内容を適用してみると想定どおりに動かないことがよくあります。そもそもサーバ手前のFirewallでフィルタリングすることが多いのでiptablesではINPUTのみで良いように思います。起動のたびにiptablesコマンドをうつのは非現実的なので/etc/sysconfig/iptablesに書き込んでいき起動の際に自動的に適用されるよう設定してゆきます。上のルールを実行するCOMMITログに関しては環境によっては膨大な数になるかもしれないので採取しないというのもありだと思います。IPアドレスなど明示的に指定しなければそれは任意(全て)という意味になります。これでiptablesを起動します。destination■パケットフィルタの状態表示iptablesによるパケットフィルタの状態を表示するユーティリティとしてiptstateを利用することができます。ログを採取することでもある程度の状態を把握することができますが、大量に出力されるためこういったツールを用いることでも有用に活用できると思います。iptstateを利用するには以下のようにインストールを行います。iptstateiptstate-2.2.2-4.el6.i686iptstateをrootユーザで起動すると次のような画面が表示されます。