5. 実践編

 PPP 接続をしている間はファイアウォールを設定し,それ以外はファ イアウォールを設置しない,そういう状況を考えて設定してみましょう。

# pppd は ip-up,ip-down というスクリプトを実行します。前者は接
# 続が確立された時,後者は切断された時に実行されます。ip-up には
# 引数が渡ります。$1 は接続に用いるインターフェイス,$2 は tty
# デバイス,$3 はシリアルスピード,$4 はローカルの IP アドレス,
# $5 はリモート側のIP アドレスです。

ip-up は以下のようになりました。

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

#!/bin/sh
umask 022

# 変数の設定
iface=$1
device=$2
speed=$3
localip=$4
remoteip=$5

# ppp-in というチェインを作成します
/sbin/ipchains -N ppp-in

# input チェインに
# 「インターフェイスが ppp0 の場合,ターゲットは ppp-in チェイン」
# というルールを追加します
/sbin/ipchains -A input -i ppp0 -j ppp-in

# 「自サイトの SMTP ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip smtp -j REJECT

# 「自サイトの NetBIOS ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip 137:139 -j DENY
/sbin/ipchains -A ppp-in -p udp -s 0/0 -d $localip 137:139 -j DENY

# 「自サイトの X server ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip 6000 -j DENY

# 「自サイトの X font server ポートへの接続を弾く」
# というルールを ppp-in チェインに追加します。
/sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $localip 7000 -j DENY

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

ip-down は以下のような感じです

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

#!/bin/sh

# input チェインから ppp-in ルールを削除します
/sbin/ipchains -D input -i ppp0 -j ppp-in

# ppp-in チェインを空にします
/sbin/ipchains -F ppp-in

# ppp-in チェインを削除します
/sbin/ipchains -X ppp-in

8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

 これまでの ipfwadm では ppp0 だけの特別な設定を任意に追加,削 除するといったことが非常に困難でしたが,チェインを使うことにより 非常にスマートに設定することができます。