iptables の設定(1)

前回は、SSH の設定を行った。今回から2回にわたり、ホストへの通信を制限するため iptables と ip6tables の設定を行う。

対象
内部用サーバー
外部用サーバー
OS
CentOS release 5.10

iptables と TCP Wrapper

iptables は、Linux Kernel に用意された Firewall 機能(Netfilter モジュール)の制御を行うためのツールだ。iptables は IPv4 の設定を行うツールで、IPv6の設定を行う場合は ip6tables を使用する。kernel レベルで動作するため、アプリケーションに依存せず通信を制御できる。たとえば、Web サーバー Apache が TCP 80番ポートで待ち受けを行っているとしよう。iptables で TCP 80番ポートへアクセスを許可していなければ、パケットは Kernel で破棄されて Apache には届かない。Kernel がパケットを処理するので、破棄した場合、アプリケーションから見ると通信は行われなかったように見える。

一方 TCP Wrapper は、アプリケーションに組み込むライブラリ(libwrap)として実装されている。アプリケーションが TCP Wrapper を組み込んでいれば、「hosts.deny」「hosts.allow」に記述されたルールに従って制御を行う。サーバーアプリケーションが TCP Wrapper を組み込んでいなければ、「hosts.deny」と「hosts.allow」にルールを記述しても意味はない。

ざっくり、iptables/ip6tables は自分自身に対してファイアウォール的な役割を担い、TCP Wrapper はアプリケーションごとの細かな制御を行うために利用すると考えていいだろう。今回の構成とは大きく異なるが、Linux のシステムをルーターとして利用する場合は、iptables/ip6tables の設定がネットワークに対してファイアウォールの役割を担う。

ホストを iptables で守る必要があるか

不要なサービスを停止すると、ホスト上で待ち受けを行うサービスは必要なものだけになる。iptables で制御できるのは、基本的に IP アドレスとポート番号がベースとなるため、「ホスト上で待ち受けを行うサービス」に対してセキュリティの強化を行うことはできない。従って、iptables は不要という人もいるが、設定ミス、パッケージのインストールやアップデートで予期しないポートの待ち受けが発生する可能性を考えて iptables/ip6tables を利用する。

一方、TCP Wrapper は特に設定を行わない。今後、iptables/ip6tables で許可したサービスで、追加の制御が必要になれば利用するかもしれないが、基本的にアプリケーションはパッケージを利用する予定なので、TCP Wrapper が組み込まれているかどうかはパッケージの設定に依存する。iptables/ip6tables と TCP Wrapper を併用すると、通信ができないときのトラブルシューティングが難しくなることがあるので、IP アドレス/ポート番号の制御は iptables で行う予定だ。

今回のホスティングサービスの構成には、ネットワーク全体を守るファイアウォールがないが、ファイアウォールが存在しており、DMZ 上にサービスを提供するサーバーが複数ある場合は、今回の構成と同様に iptables を利用して通信を制限しておいた方がよいだろう。DMZ 上のサーバーがクラックされた場合、iptables で制限をしていないと次々にサーバーが制圧されてしまう可能性がある。必要なポートは開けておかなければならないので防御は限定的だが、備えは厚くしておくほうがよい。

iptables と ip6tables の設定ファイル

iptables/ip6tables は、フィルタリングする対象を示す「テーブル」、ルールを適用するタイミングを示す「チェイン」と、チェインに追加するルールで構成されている。
テーブルは、filter、nat、mangleの3つ。filter テーブルはパケットの許可や破棄を設定する。nat テーブルは、パケットの内容を変更を設定する(NAPT/IP Masquerade を使用する際に利用)。mangle テーブルは、特別なパケット変換を設定する。今回対象とするのは、filter テーブルだけだ。
filter テーブルには、INPUT、FORWARD、OUTPUT の3種類のチェインが用意されており、それぞれホストに入ってくるパケット、通過するパケット、ホストから送出するパケットを制御できる。

iptables も ip6tables もオプションをつけて実行すれば、テーブルとチェインを指定してルールを追加できるが、ルールを一から考えていくのは大変だ。Cent OS の場合、起動スクリプト「/etc/init.d/iptables」は「/etc/sysconfig/iptables」ファイルを、「/etc/init.d/ip6tables」「/etc/sysconfig/ip6tables」ファイルを読み込んで、起動時に iptables/ip6tables のルールを追加する。従って、この2つのファイルのサンプルを元にルールを定義していく。

次回は、この2つのファイルの内容を解説していく。


2 thoughts on “iptables の設定(1)

  1. ピンバック: iptables の設定(2) | UB Lab.

  2. ピンバック: iptables の設定確認 | UB Lab.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.