iptables でパケットフィルタリング

iptables でセキュリティ対策。

コンピュータをインターネットに繋ぐ場合は、 必ずセキュリティ対策をしましょう。 セキュリティ対策をしていないパソコンは、 いつクラッキングされるかわかりません。 ここでは、iptables を利用したパケットフィルタリングについて解説します。

iptables とは

あらかじめ許可されたパケット以外を受け付けないようにパケットフィルタリングを行う機能を、iptables と呼びます。 これをしておかないと、 ハッカーが自由に自分のパソコンに出入りできてしまいます。 クライアントマシン(自分がメールを読んだり、ファイルを作成するマシン) に、iptables を用いたフィルタリングを設定しておきましょう。 カーネル 2.4 から ipchains ではなく、 iptables を使うようになったので、 今後は iptables の設定方法をマスターすれば良いでしょう。 ルータの設定にも必要なスキルで、もっと高度な設定もできるのですが、 ここでは必要最小限の設定をすることにします。

  1. 現在の状態の確認
  2. ポリシーの設定
  3. サービス毎の個別の設定
  4. 設定の反映

設定条件

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

自分のパソコンのアドレス 192.168.1.1
ドメインネームサーバ(DNS) 192.168.0.2
100.111.122.133
メールサーバ 192.168.0.3
プロキシサーバ 192.168.0.4

現在の状態を確認する。

まず、現在の状態を確かめてみましょう。 root になった状態で、iptables -L と入力しましょう。 iptables が起動されていると、下のように表示されます。

# iptables -L
Chain INPUT (Policy ACCEPT)
target prot opt source   distination

Chain FORWARD (Policy ACCEPT)
target prot opt source   distination

Chain OUTPUT (Policy ACCEPT)
target prot opt source   distination

上のように、Vine 2.6 をインストールすると、 デフォルトでは INPUT(入力) FORWARD(転送) OUTPUT(出力) の全てのパケットを通す設定になっています。 これでは全く効果が無いですね。 順番にポートを閉じていきましょう。

ポリシーの設定

iptables の設定ファイルは /etc/sysconfig/iptables です。 このファイルを開くと、上のメッセージの内容が記述してあるはずです。 このファイルを変更することで、フィルタリングの設定を行います。 まず、全部拒否する設定にします。 FORWARD はルータのみに必要なものなので、 クライアントでは必ず拒否する設定にしましょう。

##### 必要なもの以外すべて拒否する
*filter
:INPUT DROP 
:FORWARD DROP
:OUTPUT DROP

個別のルールの設定

ループバックアドレス(自分のアドレス)への入出力を認めることにします。

##### 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 閲覧をできるようにします。 ここではプロキシサーバを経由する設定にしてあります。 プロキシサーバのアドレスとポート番号(8080) を指定します。

##### プロキシサーバとの通信を許可、ポートは 8080 を使用する。
-A OUTPUT -p tcp --dport 8080 -d 192.168.0.4 -j ACCEPT
##### 直接接続する場合の設定 http(80) と https(443) を使用する。
#-A OUTPUT -p tcp --dport 80 -j ACCEPT
#-A OUTPUT -p tcp --dport 443 -j ACCEPT
#####

メールの送受信をできるようにします。 送信用に SMTP(25) を、受信用に POP(110) を使用可能にします。

##### メールサーバとの通信を許可、SMTP(25) POP(110)
-A OUTPUT -p tcp --dport 25 -d 192.168.0.3 -j ACCEPT
-A OUTPUT -p tcp --dport 110 -d 192.168.0.3 -j ACCEPT
#####  IMAP(143) を使う場合はこちら
#-A OUTPUT -p tcp --dport 143 -d 192.168.0.3 -j ACCEPT
#####

最後に、接続が確立されたパケットを許可します。

##### 接続が確立された TCP を許可
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT

再起動して設定を反映する。

全ての設定が終わったら、新しい設定を反映させるために、 iptables を再起動します。 下のように表示されれば成功です。

# service iptables restart
現在のすべてのルールとユーザ定義チェインを初期化中: [ OK ]
現在のすべてのルールとユーザ定義チェインを破棄中: [ OK ]
iptables のファイアウォールルールを適用中: [ OK ]

iptables によるパケットフィルタリング! サーバー編に進む

Copyright (C) 2003-2010. ThinkpadでLinux All rights reserved.