iptablesとは
iptablesとはIPパケットフィルタのことで、これを設定することによって想定していないポートからのアクセスやパケットを排除することができます。
■ iptablesのルール
-L ルールの一覧表示
-F ルールをすべて削除
-A ルールを追加することを示す
-P ポリシーを設定
-p [tcp][udp] プロトコルを指定する
--dport ポート番号 受信ポートを指定する
--sport ポート番号 宛先ポートを指定する
-j [ACCEPT][DROP] ルールのターゲットを指定する
-a ipアドレス 接続元のIPアドレスを指定する
-m state --state 接続状態を知ることができる。この行以降の要素を指定する
NEW 新規接続のパケット
ESTABLISHED 既存パケットと関連するパケット
RELATED FTPなどのデータ接続のパケット
-F ルールをすべて削除
-A ルールを追加することを示す
-P ポリシーを設定
-p [tcp][udp] プロトコルを指定する
--dport ポート番号 受信ポートを指定する
--sport ポート番号 宛先ポートを指定する
-j [ACCEPT][DROP] ルールのターゲットを指定する
-a ipアドレス 接続元のIPアドレスを指定する
-m state --state 接続状態を知ることができる。この行以降の要素を指定する
NEW 新規接続のパケット
ESTABLISHED 既存パケットと関連するパケット
RELATED FTPなどのデータ接続のパケット
現在の設定の確認
まず現在の設定を確認します。
# sudo iptables -L
これで現在の設定の一覧が表示されます。初期段階では何も設定されていないはずなので
Chain INPUT (policy ACCEPT)
targe prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
このように表示されるはずです。各々の意味はtarge prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
■ INPUT
受信したパケットに関するルール
■ FORWARD
転送するパケットに関するルール
■ OUTPUT
送信するパケットに関するルール
起動スクリプトの作成
ネットワークが立ち上がったときに、自動的に「iptables」の設定を行うには
/etc/network/if-pre-up.d/
のフォルダの中に実行権限をつけたスクリプトをおいておけば自動実行されます。それでは設定ファイルを作成します。ファイル名は「if-up」とします。
# sudo vim /etc/network/if-pre-up.d/if-up
ファイルの中身は以下のようにします。これはあくまで一例ですので各自の設定にあわせて設定の変更を行ってください。
#!/bin/sh
#############################
#初期化
#############################
iptables -F
#############################
#ポリシーの設定
#############################
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#############################
#ルールの設定
#############################
#ループバックを許可
iptables -A INPUT -i lo -j ACCEPT
#SSHを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
#FTPを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 4000:4029 -j ACCEPT
#Webを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
#SMTPを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 465 -j ACCEPT
#IMAPを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 993 -j ACCEPT
#proxyを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -j ACCEPT
#LAN上のPCのみDNSを許可
iptables -A INPUT -p udp --dport 53 -s 192.168.0.0/24 -j ACCEPT
#接続状態にあるものを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
次に実行権限を与えます。#############################
#初期化
#############################
iptables -F
#############################
#ポリシーの設定
#############################
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#############################
#ルールの設定
#############################
#ループバックを許可
iptables -A INPUT -i lo -j ACCEPT
#SSHを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
#FTPを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 4000:4029 -j ACCEPT
#Webを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
#SMTPを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 465 -j ACCEPT
#IMAPを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 993 -j ACCEPT
#proxyを許可
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -j ACCEPT
#LAN上のPCのみDNSを許可
iptables -A INPUT -p udp --dport 53 -s 192.168.0.0/24 -j ACCEPT
#接続状態にあるものを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# sudo chmod 700 /etc/network/if-pre-up.d/if-up
以上で設定は完了です。
サーバを再起動し、設定が反映されているか確認します。
# sudo shutdown -r now
再起動後
# iptables -L
で、設定した通りのルールが適応されていればOKです。参考
@IT