iptables でパケットフィルタリング! サーバー編
サーバーでの利用するときの設定方法
今回は linux がインストールされているコンピュータをサーバーとして利用する場合に必要なiptables によるパケットフィルタリングについて解説します。 ここではウェブサーバー、メールサーバとして、不特定多数からの接続要求を許可することにします。 設定方法はクライアントの場合と同じで、iptables を編集します。
設定条件
以下のような条件の場合の設定を解説していきますので、 具体的な数値はそれぞれの環境に合わせて変更してください。
| サーバーとして利用するコンピュータのアドレス | 192.168.1.1 |
| ドメインネームサーバ(DNS) |
192.168.0.2
100.111.122.133 |
ポリシーの設定
iptables の設定ファイルは /etc/sysconfig/iptables です。 このファイルを開くと、上のメッセージの内容が記述してあるはずです。 このファイルを変更することで、フィルタリングの設定を行います。 まず、全部拒否する設定にします。 WEB サーバーとして利用するので、OUTPUT は許可します。 INPUT については、正当なアクセスのみを許可するようにします。 (もちろん、これで完璧というわけではありません。 セキュリティに完全は無い、と考えてください。) FORWARD はルータのみに必要なものなので、 WEB サーバーには不要です。拒否するようにしましょう。
##### 必要なもの以外すべて拒否する *filter :INPUT DROP :FORWARD DROP :OUTPUT ACCEPT
個別のルールの設定
ループバックアドレス(自分のアドレス)への入出力を認めることにします。
##### loopback への入出力は許可 -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT
ドメインネームサーバとの通信を許可することにします。 DNS との通信はプロトコルが udp で、ポート が 53 番なので、 以下のように設定します。 -d は宛先を、-s は発信元を示します。 DNS のアドレスは各自の環境に合わせて変更してください。
##### DNS サーバとの通信を許可 ## local => DNS -A OUTPUT -p udp --dport 53 -d 192.168.0.2 -j ACCEPT -A OUTPUT -p udp --sport 53 -d 192.168.0.2 -j ACCEPT -A OUTPUT -p udp --dport 53 -d 100.111.122.133 -j ACCEPT -A OUTPUT -p udp --sport 53 -d 100.111.122.133 -j ACCEPT ## DNS => local -A INPUT -p udp --dport 53 -s 192.168.0.2 -j ACCEPT -A INPUT -p udp --sport 53 -s 192.168.0.2 -j ACCEPT -A INPUT -p udp --dport 53 -s 100.111.122.133 -j ACCEPT -A INPUT -p udp --sport 53 -s 100.111.122.133 -j ACCEPT
WEB サービスを許可するように設定します。 http および、https による接続を許可することにします。 http は 80 番ポートを、https は 443 番ポートを用います。
##### 直接接続する場合の設定 http(80) と https(443) を使用する。 #-A INPUT -p tcp --dport 80 -j ACCEPT #-A INPUT -p tcp --dport 443 -j ACCEPT #####
メール送受信要求を許可します。 この設定では、不正メールも中継してしまいますので、 sendmail や postfix で pop before smtp などの不正メール対策を実施してください。
##### SMTP(25) と POP(110) を許可する -A INPUT -p tcp --dport 25 -d 192.168.1.1 -j ACCEPT -A INPUT -p tcp --dport 110 -d 192.168.1.1 -j ACCEPT ##### IMAP(143) を使う場合はこちら #-A INPUT -p tcp --dport 143 -d 192.168.1.1 -j ACCEPT #####
ping(ネットワークが導通しているかどうか調べるコマンド)を許可します。 大量に ping を送りつける、という攻撃に備えて、1秒間に1回だけ許可します。
##### ping (icmp) を許可 -A INPUT -p tcp -p icmp -j ACCEPT ##### 毎秒 1 回だけ許可 -A INPUT -i ppp+ -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
再起動して設定を反映する。
全ての設定が終わったら、新しい設定を反映させるために、 iptables を再起動します。 下のように表示されれば成功です。
# service iptables restart 現在のすべてのルールとユーザ定義チェインを初期化中: [ OK ] 現在のすべてのルールとユーザ定義チェインを破棄中: [ OK ] iptables のファイアウォールルールを適用中: [ OK ]
Copyright (C) 2003-2010. ThinkpadでLinux All rights reserved.