iptables でパケットフィルタリング! サーバー編

サーバーでの利用するときの設定方法

今回は linux がインストールされているコンピュータをサーバーとして利用する場合に必要なiptables によるパケットフィルタリングについて解説します。 ここではウェブサーバー、メールサーバとして、不特定多数からの接続要求を許可することにします。 設定方法はクライアントの場合と同じで、iptables を編集します。

  1. ポリシーの設定
  2. サービス毎の個別の設定
  3. 設定の反映

設定条件

以下のような条件の場合の設定を解説していきますので、 具体的な数値はそれぞれの環境に合わせて変更してください。

サーバーとして利用するコンピュータのアドレス 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.