パケットフィルタリング&IPマスカレードの設定(iptablesを利用)


saturnは「LAN(PCMCIAカード)の設定」でローカルLAN内のマシンと、 「ADSLの設定(pppoe)」でインターネットとやりとりができるようになりました。
そこで、ローカルLAN内のマシンが saturn を経由して、インターネットへアクセスできるように、 IPマスカレードの設定を行います。
また、外部から変なアクセスができないよう、パケットフィルタリングも設定して、 セキュリティを向上させます。

必要なパッケージ

あと、iptables を使うには、カーネルが iptables をサポートしている必要があります。 →カーネルのコンパイル

スクリプトを作成

まずは、希望の設定を書いたスクリプトを用意します。
#!/bin/sh

IPTABLES=/sbin/iptables

# 設定を初期化
${IPTABLES} -F -t filter
${IPTABLES} -F -t nat

# デフォルトの設定
${IPTABLES} -P INPUT DROP                                           
${IPTABLES} -P FORWARD DROP                                         
${IPTABLES} -P OUTPUT ACCEPT                                             
${IPTABLES} -t nat -P POSTROUTING DROP

# ログに出力して捨てる
${IPTABLES} -N log_drop
${IPTABLES} -A log_drop -j LOG --log-level warning
${IPTABLES} -A log_drop -j DROP

# PPPから入って来るものの設定
${IPTABLES} -N ppp-in
# 中から出たのものの返事は通す
${IPTABLES} -A ppp-in -m state --state ESTABLISHED,RELATED -j ACCEPT
# sshを通す
${IPTABLES} -A ppp-in -p tcp --dport ssh -j ACCEPT
# Webを通す
${IPTABLES} -A ppp-in -p tcp --dport www -j ACCEPT
# メール(smtp、pop3)を通す
${IPTABLES} -A ppp-in -p tcp --dport smtp -j ACCEPT
${IPTABLES} -A ppp-in -p tcp --dport pop3 -j ACCEPT
# ftpを通す
${IPTABLES} -A ppp-in -p tcp --dport 20 -j ACCEPT
${IPTABLES} -A ppp-in -p tcp --dport 21 -j ACCEPT
# それ例外はログに出力して破棄
${IPTABLES} -A ppp-in -j log_drop

# PPPへ出て行くものの設定
${IPTABLES} -N ppp-out
# Windowsの変なパケットは出さない
${IPTABLES} -A ppp-out -p udp --dport 137:139 -j DROP
${IPTABLES} -A ppp-out -p tcp --dport 137:139 -j DROP
# ローカルIPの範囲へ出て行くパケットも破棄
${IPTABLES} -A ppp-out -d 10.0.0.0/8 -j DROP
${IPTABLES} -A ppp-out -d 172.16.0.0/12 -j DROP
${IPTABLES} -A ppp-out -d 192.168.0.0/16 -j DROP

# PPPから入って来てforwardするものの設定
${IPTABLES} -N ppp-forward
# 中から出たのものの返事は通す
${IPTABLES} -A ppp-forward -m state --state ESTABLISHED,RELATED -j ACCEPT

# INPUTの設定
${IPTABLES} -A INPUT -i eth0 -j ACCEPT
${IPTABLES} -A INPUT -i lo -j ACCEPT
${IPTABLES} -A INPUT -i ppp0 -j ppp-in

# OUTPUTの設定
${IPTABLES} -A OUTPUT -o ppp0 -j ppp-out

# FORWARDの設定
${IPTABLES} -A FORWARD -i ppp0 -j ppp-forward
${IPTABLES} -A FORWARD -o ppp0 -j ppp-out
${IPTABLES} -A FORWARD -i lo -j ACCEPT
${IPTABLES} -A FORWARD -i eth0 -j ACCEPT

# IP MASQUERADEの設定
${IPTABLES} -t nat -A POSTROUTING -s 127.0.0.1 -o ppp0 -j MASQUERADE
${IPTABLES} -t nat -A POSTROUTING -s 192.168.33.0/24 -o ppp0 -j MASQUERADE
${IPTABLES} -t nat -A POSTROUTING -s 127.0.0.1 -j ACCEPT
${IPTABLES} -t nat -A POSTROUTING -s 192.168.33.0/24 -j ACCEPT
${IPTABLES} -t nat -A POSTROUTING -o ppp0 -j ACCEPT
# これらは例ですので、自分の希望する設定を記述してください。

テスト

設定を書いたスクリプトを実行し、テストします。
おかしな所があれば、スクリプトを書き直して実行しテストを繰り返しましょう。
OKなら、外部からWWWとsshとftp以外の接続要求のパケットは全て無視し、 ローカルLANからIPマスカレードで、インターネットへアクセスできるようになりました。

設定を保存する

希望の設定ができたら、その設定を保存します。
$ /etc/init.d/iptables save active
これで、設定が保存されます。

起動時に設定されるようにする

起動時に、希望の設定になるようにiptablesの設定と /etc/network/options ファイルを修正します。


戻る