iptables を使ってパケットフィルタリング

ルータを介さずにモデムを直繋ぎすると、接続しているだけで何もしなくてもほんの数分でウィルスからワームから山盛りてんこ盛りになるなんていう話を聞きます。

このページでは debian squeeze で iptabls を使って簡単なパケットフィルタリングをする方法をメモしておきます。あくまで簡単な方法なので、本格的にパケットフィルタリングをする場合は、コマンドラインで man iptables してみたり iptables(8)Iptablesチュートリアル 1.2.2 を読んでちゃんと勉強して下さい。

iptabls というのは基本的にターミナル上で実行するコマンドなのですが、PC の NIC が起動する直前に動かしたいので、フィルタリング開始用シェルスクリプトを書いて /etc/network/if-pre-up.d/ に放り込みます。

/etc/network/if-pre-up.d/iptables-up

#!/bin/sh

# FTPサービス用モジュールを有効にする
# (PC で FTPサーバを動かさない場合は必要ありません)
modprobe ip_conntrack_ftp

# 初期化
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -X
iptables -Z

# 基本設定
iptables -P INPUT DROP          # 入るパケットは何も設定が無ければ基本的に通さない
iptables -P OUTPUT ACCEPT       # 出るパケットは何も設定が無ければ基本的に通す
iptables -P FORWARD DROP        # 中継するパケットは何も設定が無ければ基本的に通さない

# INPUT の設定

# localhost から入るパケットを許可 
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT

# PC から出るパケットで要求した、返事のパケットが入るのを許可
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# FTPサービスを使う為に 21番ポートに入ってくるパケットを許可
# (PC で FTPサーバを動かさない場合は必要ありません)
iptables -A INPUT -p tcp -m state --state NEW,RELATED,ESTABLISHED --dport 21 -j ACCEPT

本当は iptables -P OUTPUT ACCEPT の部分も DROP にして、PC から出るパケットについてもきちんと細々とした設定を適用した方が良いのですけれども、Web上のサービスを利用する時に色々ややこしい事になる場合もあるので、とりあえずは ACCEPT にして、自分が使う特定の Web上のサービスのポート番号や接続先の IPアドレスが判明してから PC から出るパケットについてもフィルタリングした方が良いと思います。

フィルタリング停止用スクリプトも /etc/network/if-post-down.d/ に放り込みましょう。

/etc/network/if-post-down.d/iptables-down

#!/bin/sh

# 基本設定
# (全てのパケットを通す)
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# 初期化
iptables -F
iptables -Z
iptables -X

以上の設定で NIC が起動する直前にフィルタリングを開始し、NIC が停止した直後にフィルタリングを停止するようになります。また好きな時に

$ sudo /etc/network/if-post-down.d/iptables-down

で止めたり、

$ sudo /etc/network/if-pre-up.d/iptables-up

でまた付けたりするのも可能です。

動作確認環境 : Debian GNU/Linux 7.0 wheezy

戻る


Last updated : 2013/08/21
Author : 犬山ぽち丸 / INUYAMA Pochimaru / Pochimaru Inuyama
E-mail : pochi@hoshinoumi.net
Key ID : 4A1B5E85
Key fingerprint : 4605 4D40 6154 20C1 5592 3E54 5A37 FEE9 4A1B 5E85

正当な XHTML 1.1 です 正当な CSS です