良く使うiptablesの運用管理方法2つをメモ

Linuxをサーバとして使う場合、iptablesにルールを追加したり、削除したりして再設定する必要が出てくる場面が多いと思います。そしてこのような場面にiptablesのルールを自由に編集し、さらに編集したルールを自動設定させてiptablesを運用管理する方法として、iptables-saveとiptables-restoreを使う方法と、シェルスクリプトを使う方法の2つを良く使います。ここでは、この2つの運用管理方法についてメモします。
なお、以降のコマンドは全てroot権限で行います。また、実行環境はubuntu12.04になります。

iptables-save、iptables-restoreを使った運用管理方法

iptablesには、現状のルール設定をファイルに書き出す「iptables-save」と、ファイルに書き込まれたルールを読み込んでiptablesにルールを設定する「iptables-restore」というコマンドが用意されています。よって、まず「iptables-save」で現状のルール設定をファイルに書き出し(以降では、書き出したファイルをルールファイルと呼ぶことにします。)、そのルールファイルにルールを書き加えたり、削除したりして編集したルールファイルを「iptables-restore」で読み込むことで、iptablesのルールを編集することができます。さらにシェルスクリプトを使うことで編集したルールをPC起動と同時に自動設定させることができます。まとめると以下のような手順になります。

  1. iptables-saveで現状のルールをルールファイルとして書き出す
  2. ルールファイルを編集する
  3. 編集したルールファイルをiptables-restoreで読み込む
  4. iptablesのルールをPC起動と同時に自動設定させる

以降で各手順についてメモします。

1. iptables-saveで現状のルールをルールファイルとして書き出す

下記のようにiptables-saveとLinuxのリダイレクト「>」を組み合わせて出力先のファイルを指定し、ルール設定を書き出し保存することができます。以下の場合は、現在のディレクトリに「iptables_rule」というルールファイルが作成されます。Linuxのリダイレクトについては下に参考サイトを載せておきます。

書き出しルールファイルの中身については後述します。なお、書き出したルールファイルを編集する前に、ルールファイルのコピーを取っておくことをお勧めします。コピーがあれば、間違って編集してしまった場合などに焦らずに済みます。よって私は以下のように、元ファイルに「.org」を付けてコピーを保存するようにしています。

次はルールファイルを編集します。

参考サイト
ITpro – リダイレクトとは


2. ルールファイルを編集する

iptables-saveでルール設定を書き出したルールファイル(iptables_rule)の中身は例えば以下のような内容になります。(以下のルールファイルの内容は、あくまで例として挙げるために用意したものであり、実際に運用して使える内容ではないのでそのまま使わないで下さい。)

このファイルを見ると、「*nat」、「*mangle」、「*filter」とiptablesの3つのフィルター名が記述された行があり、この行以降に各フィルターのルールが記述されています。例えば、filterに関するルールを抽出すると、以下のようになっています。

各行について順番に説明すると、以下のようになります。

  • 1行目: これはコメント部分になります。「#」から始まる部分は全てコメントになります。ここでは、iptables-saveによってこのファイルが作成された日時が記述されています
  • 2行目: 「*」にフィルター名が続き、ここから各フィルターに関するルールが記述されることを意味しています。ここでは、filterに関するルールの記述がここから始まることを意味しています。
  • 3行目-5行目: 「:チェイン名 ポリシー [バイトカウンタ:パケットカウンタ]」という形式で記述されています。バイトカウンタ、パケットカウンタはそれぞれ各チェインのルールに合致したバイト数、パケット数を表しています。例えば、上記の「:INPUT DROP [5:220]」は、INPUTチェインのポリシーはDROP(破棄)であり、そのバイトカウンタの値は5、パケットカウンタの値は220になります。
  • 6行目-10行目: iptablesのルールが記述されています。INPUT、FORWARD、OUTPUTの各チェインに関するルールが複数記述されていることが分かります。
  • 11行目: 実行命令になります
  • 12行目: 1行目と同様に実行日時です

以上がfilterに関するルールの記述部分に関する説明になります。そして、これはnat、mangleの各フィルターについても全く同じ形式で記述されています。
よって、iptables-saveで作成したルールファイル編集する場合は、各フィルター毎に記述されたルール部分(上記のfilter部分に関しては6行目ー10行目が該当)に新しいルールを追加、削除、編集することになります。ただし、新しいルールを追加する場合、そのルールを記述する場所、すなわちルールの順番が意味を持つので気をつけて下さい。ルールの順番が持つ意味については、iptablesの設定内容確認と設定例が参考になるかもしれませんので参照下さい。

ルールファイルの編集が完了したら、後はルールファイルをiptables-restoreで読み込めばiptablesのルール編集および設定は完了です。

3. 編集したルールファイルをiptables-restoreで読み込む

ルールファイルの編集が終わったら、後はiptables-restoreを使ってルールファイルをiptablesに読み込ませてルールを設定します。iptables-restoreは、以下のようにiptables-saveと同様、Linuxのリダイレクトを使用して、指定したルールファイルからルールを読み込んで設定します。ただし、iptables-saveの場合とはリダイレクトの向きが異なるので注意して下さい。

なお、iptables-restoreによってルールを設定しても、ubuntuを再起動すると、設定する前の状態に戻ってしまします。したがって、自分が作成したルールファイル通りのルールをubuntu起動時に自動設定させる必要があります。そしてそのためにはシェルスクリプトを利用します。そこで自動設定させる方法を次にメモします。

4. iptablesのルールをPC起動と同時に自動設定させる

以上でiptablesのルール編集と設定は完了ですが、自分が作成したルールファイル通りのルールをiptablesにubuntu起動時に自動設定させる必要があります。そしてそのためにはシェルスクリプトを利用します。具体的には、以下を記述したシェルスクリプト(ファイル名を「set_iptables.sh」とします)を作成して、そのシェルスクリプトを「/etc/network/if-pre-up.d/」に置きます。「if-pre-up.d」ディレクトリは、ubuntuが起動と同時に実行するシェルスクリプトを置く場所です。

そしてset_iptables.shに実行権限を与えるために以下のコマンドを実行します。

あとはubuntuの起動と同時に自動設定されます。ただし、すでにfirestarterなどのファイアウォールソフトウェアが動作している場合は注意が必要です。この場合は、上記の処理によってiptablesへルールが自動設定されても、iptablesのルールが上書きされてしまい、結局firestarterのルールが設定されることになります。よって、上記の作業によってiptablesnの自動起動を行う場合は、firestarterが自動起動しないようにするか、アンインストールする必要があります。

以上がiptables-saveとiptables-restoreを使ってiptablesのルールを自由に編集し、さらに編集したルールをubuntuの起動と同時に自動設定させて運用する方法になります。

シェルスクリプトを使った運用管理方法

シェルスクリプトは、ターミナル上で実行するコマンドを複数まとめて記述したものであり、シェルスクリプトを実行することで記述された複数のコマンドを一度に実行できます。よって、iptablesのコマンドをシェルスクリプトとして記述して実行することで、iptablesのルールを設定することができます。シェルスクリプトの中身は、基本的にはiptablesのコマンドと同じものが記述されているだけになります。例えば、iptablesのルールを設定するシェルスクリプト (ファイル名を「iptables_script.sh」とします。) の中身は以下のようになります。(以下のシェルスクリプトはあくまで例として挙げるために用意したものであり、実際に運用して使える内容ではないのでそのまま使わないで下さい。実際に運用できるシェルスクリプトとして参考にしたサイトを後に載せていますので、そちらを参考にしてみると良いと思います。)

一部だけですが、シェルスクリプトとしては以上のようにiptablesのコマンドがひたすら羅列するだけになります。スクリプトを使うと、ポート番号やネットワークの定義ができるため管理が楽になります。また、上のシェルスクリプトにはありませんが、if文を使用して条件分岐して処理させることもできます。このように、シェルスクリプトを使うとかなり自由度の高いルール設定を行うことができます。注意点としては、上でも述べたように、iptablesのルールの順番が意味を持つので注意して下さい。

なお、上記のiptablesのコマンドについて不明な点が多い場合は、iptablesの概要メモが参考になるかもしれませんので参照してみて下さい。

シェルスクリプトを作成したら、次にこのシェルスクリプトに以下のコマンドによって実行権限を与えます。

そして実行権限を付与した後で以下のコマンドによってシェルスクリプトを実行すれば、シェルスクリプト内に記述されたルールがiptablesに設定されます。

また、iptablesへのルールをPC起動と同時に設定するために、すでに説明したiptabes-save、iptables-restoreを使った方法と同様に、作成したシェルスクリプトを/etc/network/if-pre-up.dに置きます。これで作成したシェルスクリプトが自動実行されてiptablesにルールが設定されます。ただし、上でも説明したように他のファイアウォールソフトウェアが動作している場合は注意が必要です。

実際に運用するシェルスクリプトを作成する際に参考になったサイトを以下に載せておきます。大変参考になりました。ありがとうございます。

参考サイト
Qiita-俺史上最強のiptablesをさらす


まとめ

iptablesのルールを編集して自動設定させて運用管理する方法2つをメモしました。個人的には、基本的にはシェルスクリプトを使った方法でiptablesを運用し、試したいルールがある場合などは、iptables-save、iptables-restoreを使って少しルールを編集してみるといったように使い分けるのが良いのかなと思っています。iptablesはLinuxをサーバ用途で使う場合には必須であり、まだまだ勉強不足な点が多いので少しづつ勉強してまたメモしていきたいと思います。

このエントリーをはてなブックマークに追加

SPONSORED LINK

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

  1. iptablesの設定内容確認と設定例 said on 2013年10月7日 at 01:12

    […] ### 2013/10/7 追記 ### 良く使うiptablesの運用管理方法2つをメモにiptablesの運用管理方法として、iptables-save、iptables-restoreを使った方法とシェルスクリプトを使った方法の2つをメモしたのでこちらもご参照下さい。 […]

  2. iptablesの概要メモ said on 2013年10月7日 at 01:14

    […] ### 2013/10/7 追記 ### 良く使うiptablesの運用管理方法2つをメモにiptablesの運用管理方法として、iptables-save、iptables-restoreを使った方法とシェルスクリプトを使った方法の2つをメモしました。iptablesの運用管理についてはこちらの方が情報が多いと思うので、良ければご参照下さい。 […]

トラックバック URL