ipchainsを用いたIPマスカレードおよびパケットフィルタリングの設定.カーネル2.4以降は ipchainsではなくiptableを用いるのであしからず.
Debian potetoのカーネルは,はじめからIPマスカレードをサポートしているはずです. modconfでIPマスカレード関連のモジュールを組み込んでやれば後は設定のみです.
フレッツADSLになったので,接続時にパケットフィルタの設定をするようにしました. まずは,参考ページ
90%以上TLECからのパクリでなんですが,以下のようなスクリプトファイルを作成し
/etc/ppp/ip-up.d/と/etc/ppp/ip-down.d/
におきます.debianの場合ip-upとip-downをみればわかりますが,run-parts
コマンドによってip-up.d/とip-down.d/
のスクリプトをppp接続の完了時と切断時に実行してくれます.
#!/bin/sh # create ppp-in chain /sbin/ipchains -N ppp-in /sbin/ipchains -A input -i ppp0 -j ppp-in # create ppp-out chain /sbin/ipchains -N ppp-out /sbin/ipchains -A output -i ppp0 -j ppp-out # packet fillter setting /sbin/ipchains -A ppp-in -d $PPP_LOCAL -f -j DENY -l # for IP snoop /sbin/ipchains -A ppp-in -s 10.0.0.0/8 -j DENY -l /sbin/ipchains -A ppp-in -s 172.16.0.0/12 -j DENY -l /sbin/ipchains -A ppp-in -s 192.168.0.0/16 -j DENY -l /sbin/ipchains -A ppp-in -s 0.0.0.0/8 -j DENY -l /sbin/ipchains -A ppp-in -s 127.0.0.0/8 -j DENY -l /sbin/ipchains -A ppp-in -s 169.254.0.0/16 -j DENY -l /sbin/ipchains -A ppp-in -s 192.0.2.0/24 -j DENY -l /sbin/ipchains -A ppp-in -s 224.0.0.0/4 -j DENY -l /sbin/ipchains -A ppp-in -s 240.0.0.0/4 -j DENY -l # block local packet # block local address packet /sbin/ipchains -A ppp-out -s 0/0 -d 10.0.0.0/8 -j DENY -l /sbin/ipchains -A ppp-out -s 0/0 -d 172.16.0.0/12 -j DENY -l /sbin/ipchains -A ppp-out -s 0/0 -d 192.168.0.0/16 -j DENY -l # block samba packet /sbin/ipchains -A ppp-out -s 0/0 -d 0/0 137:139 -p udp -j DENY /sbin/ipchains -A ppp-out -s 0/0 -d 0/0 137:139 -p tcp -j DENY # for Windows2000 packet /sbin/ipchains -A ppp-out -s 0/0 -d 0/0 445 -p tcp -j DENY /sbin/ipchains -A ppp-out -s 0/0 -d 0/0 445 -p udp -j DENY # TCP packet setting # accept port # return IP masqulade packet /sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $PPP_LOCAL 61000:65095 -j ACCEPT /sbin/ipchains -A ppp-in -p udp -s 0/0 -d $PPP_LOCAL 61000:65095 -j ACCEPT # ssh /sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $PPP_LOCAL ssh -j ACCEPT # DNS tcp packet /sbin/ipchains -A ppp-in -p tcp -s 0/0 53 -d $PPP_LOCAL -j ACCEPT # ftp /sbin/ipchains -A ppp-in -p tcp -s 0/0 -d $PPP_LOCAL ftp-data:ftp -j ACCEPT # reject port setting # auth /sbin/ipchains -A ppp-in -p tcp -s 0/0 -d 0/0 auth -j REJECT # other tcp packet setting /sbin/ipchains -A ppp-in -s 0/0 -d $PPP_LOCAL -p tcp -y -j DENY -l /sbin/ipchains -A ppp-in -s 0/0 -d $PPP_LOCAL -p tcp ! -y -j ACCEPT # UDP setting # DNS udp packet /sbin/ipchains -A ppp-in -p udp -s 0/0 53 -d $PPP_LOCAL -j ACCEPT # ICMP packet # ACCEPT # echo-reply used ping # destination-unreachable used tcp/udp # time-exceeded used traceroute /sbin/ipchains -A ppp-in -p icmp -s 0/0 echo-reply -d $PPP_LOCAL -j ACCEPT /sbin/ipchains -A ppp-in -p icmp -s 0/0 destination-unreachable -d $PPP_LOCAL -j ACCEPT /sbin/ipchains -A ppp-in -p icmp -s 0/0 time-exceeded -d $PPP_LOCAL -j ACCEPT # ICMP reject /sbin/ipchains -A ppp-in -p icmp -s 0/0 echo-request -d $PPP_LOCAL -j DENY -l /sbin/ipchains -A ppp-in -j DENY -l
このスクリプトはip-up.d/においてppp接続時にipchains設定を行います. sshとftpのポートを空けてあるので,外部からsshおよびftp接続が可能です. しかし,一般的にftpを空けるのは危険らしいのでやめたほうがいいらしいです.
#!/bin/sh # delete ppp-in chain from input /sbin/ipchains -D input -i $PPP_IFACE -j ppp-in # delete ppp-out from output /sbin/ipchains -D output -i $PPP_IFACE -j ppp-out # flush ppp-in rules /sbin/ipchains -F ppp-in # flush ppp-out rules /sbin/ipchains -F ppp-out # delete ppp-in /sbin/ipchains -X ppp-in # delete ppp-out /sbin/ipchains -X ppp-out
同様にipchains-downスクリプト.こちらはip-down.d/にいれておいて,ppp接続を切断するときに ipchainsルールを削除します.
ipchainsコマンドの簡単な説明です.詳しくはman ipchainsをヨロシク
ipchains -A input -i ppp0 -j ppp-in
ipchains -A ppp-in -p tcp -s 0/0 -d $PPP_LOCAL 61000:65095 -j ACCEPT
大体そんな感じ.-lでログを取るように指定したりもできます.