本題の iptables の設定を行います。X-Window 備え付けのツールを使って、ベースとなるフィルタリング設定を行います。以下、設定のポイントです。
iptabals の設定には幾つかの方法があります。
iptablesコマンドにより、テーブル、チェーン、パラメーターを追加していきます。特に追加するルールの順番を意識する必要があります。その都度 kernel にロードされメモリ内での実行となります。
メモり内のルールを保存・復元するためのコマンドが用意されています。再起動後も有効にしたい場合、メモリ内にある情報を外部ファイルに書き出す必要があります。
/etc/sysconfig/iptables に出力され、iptables起動時にこのファイルに記載されたフィルターが適用されます。復元する restore も あります。こちらは復元オプションが幾つかあります。
上記 iptables コマンドを羅列した スクリプト.sh を作成し一括でフィルタリングを登録します。シェルスクリプトにする事で順番を通常、rc.local など起動スクリプトに上記スクリプト追加する事で、再起動後にも有効にする方法です。iptables を再起動した場合は、同様に消えてしまいます。再度シェルスクリプトを実行します。またシステム再起動後有効にする場合は、rc.local にシェルスクリプトを登録するなどして対応します。
外部ファイル /etc/sysconfig/iptables に直接フィルタリング ルールを記述することでもフィルタリングを有効にする事が出来ます。この場合、変更を有効にするには iptabelsサービスを再起動する必要があります。
また、iptables コマンドで、位置を指定しないで実行した場合、先に評価される内容としてルールが追加されます。適用するルールによっては順番が重要になります。
システム起動時、先にネットワークサービスが起動されると iptables サービスが起動されるまでの間、僅かな時間、無防備状態になります。ネットワークサービスが起動される前に iptables サービスを起動しフィルタリングを有効にする必要があります。
一般的には、コマンドでフィルタリングルールを追加、削除をし確認を行います。コマンド操作に慣れれておけば、リモート(telnet) 等で緊急を要するパケット制限など迅速に対応する事も出来ます。しかし、始めての方が iptables コマンド、テーブルやチェーン、書式を理解して設定を行うのは、難しいため、ここでは、X-Window による 「セキュリティレベル」 ツールを利用した例で説明しています。
X - メニューから 「セキュリティレベル」 を開き、以下の様に設定します。公開するサービスポート(つまり穴をあける)については、適宜選んでください。また、ここでは、ルーター直下、つまり簡易ファイアーウォール下での設定ですので、リスクは軽減されています。
WAN / LAN に対して WWW FTP メールサーバーを公開する場合は以下の様に設定します。
このインターフェイスはデスクトップ環境向けの簡易設定しか行えません。基本的に外部らの一方的なパケットを遮断し、内側から出て行くパケットに関しては微かな制御はコマンド.sh を作成するか、外部に読み込みファイルをポリシに応じて作成する必要があります。
また、このツールで作成出来るのは filterテーブルのみで、RH-Firewall-1-INPUT チェインとして保存されます。ここには表示されていない ICMP や、IPv6に関してもデフォルトで有効になっています。(ディストリビューション、バージョンによっても異なると思います)
ご注意!
信頼できるデバイス eth1 にチェックを入れた のは、初心者がサーバーを設定する上でファイアーウォールの問題なのか、サーバー側の設定の問題なのか、問題の切り分けが行い易いようにという配慮からです。最終的にはWAN方向同様に必要なポートだけを開くようにして下さい。(理由は後述)
ご注意!
このGUIツールを使うのは今回限りです。外部ファイル /etc/sysconfig/iptables に対し、iptables コマンドを使用し、service iptables save でルールを追加、または、直接、外部ファイルを修正していく事になりますが、再びこのツールを起動して保存してしまうと、外部ファイル /etc/sysconfig/iptables が上書きされ元の filter テーブルのみの内容に戻ってしまいます。RH-Firewall-1チェーンのみが修正されるような配慮はされていないようです。(ディストリ 特有の問題かも。GUIツールを使ったのは今回が初めてなので、ちょと未確認です。)
※補足
直接シェルスクリプトに記述し、あまり外部ファイルに依存しないやり方だと、この煩わしさがないうえ、リモート保守においても迅速に対応できますが、初心者には荷が重いです。市販ルーターでブラウザでパケットフィルタリングを設定できる製品もありますが、これと同じように、iptables コマンドを外部からブラウザ経由で行う方法もあります。
Webmin のiptables モジュールを使う方法です。あまりお勧めできませんが、興味があったら調べて見てください。
このツールを使って設定を行った場合、filter テーブルにRH-Firewall-1 というチェーンが追加されます。RH-Firewall-1 チェーンでは以下が定義されています。何が行われているか見てみます。
iptables について全ては説明できませんので、上記の書き出されたルールから習得の足掛かりとして、チェーンについて触れておきます。その他、ルール、コマンド、パラメータ等は man iptabales を参照して下さい。
複数のフィルターをまとめて一つの一連のチェーン(グループ)にまとめることが出来ます。例えば、上記の RH-Firewall-1-INPUT チェーンの例では
6行目 :RH-Firewall-1-INPUT
6行目で、チェーン名が定義され、
9 ~ 21行目までが RH-Firewall-1-INPUT の一連のチェーンとなっています。
7行目 -A INPUT -j RH-Firewall-1-INPUT
8行目 -A FORWARD -j RH-Firewall-1-INPUT
7 ~ 8行目で
INPUT (受信パケット) / FORWARD (転送パケット)に対して RH-Firewall-1-INPUT チェーンルールを適用するように指定されています。
RH-Firewall-1-INPUT チェーンの例では、フィルタールールの方向性は全く指定されていないため、このような内容になっていますが、、eth1 や eth0 または、IPアドレスごとに、 RH-Firewall-1-INPUT チェーンのようなルールセットを作成することで、ネットワーク毎にルールセットを適用するといった使い方や、一連の動作毎のルールセットをチェーンとし使いまわす事が出来るため、管理が行いやすくなるなるばかりか、ミスも軽減されます。
■テーブル ~利用できるテーブルは以下の三種類
※ 詳細は man iptables を参照してください。
. | 利用できる組込みチェーン |
---|---|
filter | INPUT / FORWARD / OUTPUT テーブルを指定しなかった場合、filter テーブルにルールが追加されます。 |
nat | PREROUTING / OUTPUT / POSTROUTING IPアドレスを変換する時に使用するテーブルで、IPマスカレード等の設定を行うときに利用します。 |
mangle | PREROUTING / OUTPUT 特定のパケットを変換する場合に利用するテーブル。 |
■予め組み込まれているチェーン
※ 詳細は man iptables を参照してください。
INPUT | 受信パケット |
---|---|
OUTPUT | 送信パケット |
FORWARD | 転送パケット |
PREROUTING | 受信時にIPアドレスを変換するチェイン |
POSTROUTING | 送信時にIPアドレスを変換するチェイン |