ipchainsの設定

[サーバの実験室 Redhat/Fedora]

作成 : 2002/07/04

"サーバの実験室"の検索


※ファイアウォールについては、ipchainsからiptablesに移行した。

ファイアウォール

ADSLルータにはファイアウォール機能がついているので、デフォルトでは外部からのパケットをすべて遮断する。 ルータ内部にインターネットサーバを設置する場合は、ルータが受信した特定ポート宛パケットを、内部の指定したサーバに転送するよう設定する(ポートフォワーディング)。

インターネットサーバが受信するパケットは、WEBサーバやメールサーバが受け取るべきパケットだけになるので、サーバにファイアウォール機能を持たせる必要はないかもしれない。 が、練習のため設定してみる。

RedHat Linuxには、ipchainsとiptablesという2種類のファイアウォールソフトがある。 設定が楽だといわれている、ipchainsのほうを使用してみる。

デフォルトのipchains設定

ipchainsによるファイアウォールの設定を確認する。 確認するには、ipchainsコマンドに--listオプションをつけて実行する。

# ipchains --list

Chain input (policy ACCEPT):
target     prot opt     source                destination           ports
ACCEPT     udp  ------  ns5.wakwak.com       anywhere              domain ->   any
ACCEPT     udp  ------  ns7.wakwak.com       anywhere              domain ->   any
ACCEPT     all  ------  anywhere             anywhere              n/a
REJECT     tcp  -y----  anywhere             anywhere              any ->   any
REJECT     udp  ------  anywhere             anywhere              any ->   any
Chain forward (policy ACCEPT):
Chain output (policy ACCEPT):

INPUT(入力)・FORWARD(転送)・OUTPUT(出力)の3つのチェインにわかれている。 それぞれのチェインごとに、ルールは上からチェックされる。 マッチしない場合は、下のルールが検査される。 どのルールにもマッチしない場合は、デフォルトではACCEPT(受容)される。

・INPUTチェインの1行目と2行目は、DNSサーバからのudpパケットをACCEPT(受容)する設定。 portsの「domain -> any」は、DNSサーバの53番ポートからのパケットのみ受容するという意味。 このエントリがないと、DNSサーバからの返答パケットを受け取ることができないため、DNSを使った名前解決ができない。

・INPUTチェインの3行目は、ループバックアドレスからのパケットをすべてACCEPT(受容)する設定。 つまり、自分から自分へパケットは、すべて受け取る。 このエントリがなくても、特に困ることはない(はず)。

・INPUTチェインの4行目は、tcpパケットをREJECT(拒絶)する設定。 opt(オプション)の「y」はSYNパケットが対象となることを示す。 SYNパケットは通信のリモートからの接続要求となるパケットなので、ACCEPT されたポート以外にこのパケットが届く必要はない。 しかし、SYN パケット以外のパケットは受け取らなければ、tcp 通信ができなくなってしまう。 yオプションを忘れると、すべてのtcpパケットをREJECTしてしまうので、注意する。 sourceが「anywhere」となっているので、すべてのリモートからのパケットが対象となる。

・INPUTチェインの5行目は、すべてのudpパケットをREJECT(拒絶)する設定。

サーバにはNICを1枚しか搭載していないため、FORWARDチェインは設定しない。 また、サーバからの送信パケットは規制しないので、OUTPUTチェインも設定しない。

ipchainsコマンドによる設定

INPUTチェインにルールを追加するには、ipchainsコマンドに-Aオプションをつけて実行する。

# ipchains -A input -p プロトコル -s ソース ポート -d デスティネーション ポート -j 処理 オプション

プロトコル: 「tcp」、「udp」、「icmp」を記述する。 すべてを対象とするには、「any」を記述する。

ソース、デスティネーション: FQDN(polaris.as.wakwak.ne.jp)、ネットワークアドレス(192.168.1.0/24または192.168.1.0/255.255.255.0)、IPアドレス(192.168.1.1(/32))を記述することができる。

ポート: ソースまたはデスティネーションアドレスに続いて、対象とする単一ポートまたはポート範囲を記述できる。 指定しない場合は、すべてのポートが対象となる。 httpポートを指定する場合は「80」、予約ポートすべてを指定する場合は「:1023」、予約ポート以外であれば「1024:」と記述する。

処理: 条件にマッチした場合の処理を記述する。 許容するなら「ACCEPT」、拒絶するなら「REJECT」、発信元にエラーを返さず拒否するなら「DENY」を記述する。

その他のオプション(-y): SYNパケットのみ対象とする場合は、「-y」を記述する。 「-y」の対象プロトコルは「tcp」のみ。

その他のオプション(-l): 「-l」を記述すると、そのルールが適用されたときにログを残す。 ログファイルは、/etc/syslog.confで設定される。 Redhat 7.2では、デフォルトで/var/log/messages。

INPUTチェインからルールを削除するには、ipchainsコマンドに-Dオプションをつけて実行する。

# ipchains -D ルール

ipchainsコマンドでルールの追加・削除をした場合は、次のコマンドによりルールを保存しなければならない。 忘れてしまうと、サービスを停止したとき、変更した設定が失われてしまう。

# /etc/init.d/ipchains save

/etc/sysconfig/ipchainsファイル編集による設定

/etc/sysconfig/ipchainsファイルを編集することにより、ファイアウォールの設定を変更することができる。 ファイルへの記述形式は、ipchainsコマンドと同じ。

:input ACCEPT
:forward ACCEPT
:output ACCEPT
-A input -p udp -s 211.9.226.5 53 -d 0/0 -j ACCEPT
-A input -p udp -s 211.9.226.69 53 -d 0/0  -j ACCEPT
-A input -s 0/0 -d 0/0 -i lo -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 -y -j REJECT
-A input -p udp -s 0/0 -d 0/0 -j REJECT

ipchainsを起動時開始サービスに追加

いまのところ、ipchainsサービスはサーバ起動時に開始されるように設定されていない。 ntsysvコマンドなどで設定しておく。

ipchainsサービスの起動

起動時開始サービスに追加しただけでは、サーバを再起動するまでipchainsサービスは開始されない。 すぐにipchainsサービスを開始するには、次のコマンドを実行する。

# /etc/init.d/ipchains start

[サーバの実験室 Redhat/Fedora]