ipfwでブロードバンドルーター [コンピューター]
これは私が以前に自分のサイトで掲載していたものです。このサイトは現在は閉鎖していますので、備忘のためここに移しました。内容は古いものですのでご了承ください。
FreeBSD 5.3 RELEASE で NIC 2枚差しPCルーターを作ってみた.
0. 準備
/etc/rc.conf に以下を追加しておく.openを指定しておかないと,カーネル再構築後,リモートから入れなくなってしまう.
firewall_enable="YES"
firewall_type="open"
firewall_quiet="NO"
1. カーネルの再構築
rootになる.
% su -
Password:
コンフィグレーションファイルのディレクトリに移動.
# cd /sys/i386/conf
ファイルをコピー.
# cp GENERIC router
なお「router」は自分の好きな名前でよい.
エディタで router を開いて以下のように編集.
ident GENERIC を ident router に変更.
PPPoEを有効にするため以下の行を追加.
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
ipfwを有効にするため以下の行を追加.
options IPFIREWALL
ログを採るため以下の行を追加.
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=500
natdを有効にするため以下の行を追加.
options IPDIVERT
tun deviceが有効になっているかどうか見ておく(デフォルトでは有効なので,以下の行があるかどうか確認のみ).
device tun
カーネルをコンパイル,インストールする.
# config router
# cd ../compile/router
(なお FreeBSD 4.X では移動するディレクトリが違うので注意)
# make depend
# make
# make install
再起動する.
# reboot
2. PPPoEの設定
rootのままで,ファイル /etc/ppp/ppp.conf を編集する.
なお,以下のファイルで,rl1は外向きのインターフェース(マシンによって異なります)
id@providorはあなたが接続するプロバイダのID
passwordはあなたが接続するプロバイダのパスワード
とする.
ここから------------------------------------
default:
set log Phase Chat LCP IPCP CCP tun command
set device PPPoE:rl1
set speed sync
set mru 1454
set mtu 1454
set ctsrts off
set timeout 0
accept CHAP
add default HISADDR
# enable dns
so-net:
set authname xxxx@yyy.so-net.ne.jp
set authkey password
ここまで------------------------------------
上のファイルで,default: や so-net: などのラベルは行頭から書き,そのほかの行は行頭に1個以上の空白かTABを入れること。私はすべて行頭から書いてしまい,動かない原因がわからずしばらく悩みました.
/etc/resolv.conf にDNSが記述してあれば,上記の enable.dns はコメントのままでよい.
接続テストをしてみる.
# ppp -ddial so-net
Working in ddial mode
Using interface: tun0
ifconfig コマンドで,tun0にアドレスが割り当てられていれば成功.
# ifconfig
tun0: flags=8051 mtu 1454
inet XXX.XXX.XXX.XXX --> XXX.XXX.XXX.XXX netmask 0xffffffff <-- アドレスが表示されればOK
Opened by PID 20
起動時に自動接続するために,/etc/rc.conf に以下の内容を追加する.
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="so-net"
ppp_nat="NO"
最後の行は,ppp内蔵のNAT機能を無効にするため(あとでnatdを使ってアドレス変換を実現するのでこの機能はいらない)
3. NATの設定
natdの設定ファイルを /etc/natd.conf として以下のように作る.もちろんrootで.
ここから---------------
deny_incoming no
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes
ここまで---------------
natdをFreeBSD起動時に有効にするため,/etc/rc.conf に以下を追加する.
gateway_enable="YES"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-f /etc/natd.conf"
portmap_enable="NO"
4. ipfwの設定
/etc/ipfw.conf として,以下のように作成する.この例は必要最低限のものであり,ほかにもマルチキャストの拒否などおこなっておいた方がよいものがある.
なお,rl0は内側のインターフェースである(マシンによって異なります).
ここから----------------------------------------------
# Firewall rules by Tsukubane
fwcmd="/sbin/ipfw -q"
# すべてのルールを初期化
${fwcmd} -f flush
# 断片化したパケットを拒否
${fwcmd} add 100 deny ip from any to any via tun0 frag
# pingを拒否
${fwcmd} add 200 deny icmp from any to any recv tun0
# ループバックを許可
${fwcmd} add 300 allow ip from any to any via lo0
# ローカルネットワークとの通信はすべて許可
${fwcmd} add 400 allow ip from 192.168.0.0/24 to any via rl0
${fwcmd} add 500 allow ip from any to 192.168.0.0/24 via rl0
# 外のネットワークからローカルアドレスを詐称して来るものを拒否
${fwcmd} add 600 deny all from 192.168.0.0/24 to any recv tun0
${fwcmd} add 700 deny all from 172.16.0.0/12 to any recv tun0
${fwcmd} add 800 deny all from 10.0.0.0/8 to any recv tun0
${fwcmd} add 900 deny all from 127.0.0.0/8 to any recv tun0
# 外のネットワークからローカルアドレス宛に来るものを拒否
${fwcmd} add 1000 deny all from any to 192.168.0.0/24 via tun0
${fwcmd} add 1100 deny all from any to 172.16.0.0/12 via tun0
${fwcmd} add 1200 deny all from any to 10.0.0.0/8 via tun0
${fwcmd} add 1300 deny all from any to 127.0.0.0/8 via tun0
# NetBiosを拒否
${fwcmd} add 3000 deny udp from any 137-139,445 to any
${fwcmd} add 3100 deny tcp from any 137-139,445 to any
${fwcmd} add 3200 deny udp from any to any 137-139,445
${fwcmd} add 3300 deny tcp from any to any 137-139,445
# natの設定
${fwcmd} add 4000 divert natd all from any to any via tun0
# 通信が確立したパケットを許可
${fwcmd} add 5000 allow tcp from any to any established
# 外へ出ていくものは許可
${fwcmd} add 5100 allow ip from any to any out via tun0
# 外への名前問い合わせを許可(ルーターマシンでDNSを運用している場合)
${fwcmd} add 6000 allow udp from any to any 53 out
${fwcmd} add 6100 allow udp from any 53 to any in
# 外への時刻問い合わせを許可(ルーターマシンでntpを運用している場合)
${fwcmd} add 6200 allow udp from any to any 123 out
${fwcmd} add 6300 allow udp from any 123 to any in
# 外からのWWW接続を許可(ルーターマシンでHTTPを運用している場合)
${fwcmd} add 6400 allow tcp from any to any 80 setup
# 外からのSSH接続を許可(ルーターマシンでSSHを受け付ける場合)
${fwcmd} add 6600 allow tcp from any to any 22 setup
# 上記に該当しないものはログを取って拒否
${fwcmd} add 9000 deny log tcp from any to any
${fwcmd} add 9100 deny log udp from any to any
${fwcmd} add 9200 deny log icmp from any to any
ここまで----------------------------------------------
/etc/rc.conf に以下を追加.
(ここの部分は当初は何か書いてあったと思いますが、いま保存してあるファイルに記述がありません)
再起動して完了.
# reboot
オリジナル文書作成:2005年3月6日
FreeBSD 5.3 RELEASE で NIC 2枚差しPCルーターを作ってみた.
0. 準備
/etc/rc.conf に以下を追加しておく.openを指定しておかないと,カーネル再構築後,リモートから入れなくなってしまう.
firewall_enable="YES"
firewall_type="open"
firewall_quiet="NO"
1. カーネルの再構築
rootになる.
% su -
Password:
コンフィグレーションファイルのディレクトリに移動.
# cd /sys/i386/conf
ファイルをコピー.
# cp GENERIC router
なお「router」は自分の好きな名前でよい.
エディタで router を開いて以下のように編集.
ident GENERIC を ident router に変更.
PPPoEを有効にするため以下の行を追加.
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
ipfwを有効にするため以下の行を追加.
options IPFIREWALL
ログを採るため以下の行を追加.
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=500
natdを有効にするため以下の行を追加.
options IPDIVERT
tun deviceが有効になっているかどうか見ておく(デフォルトでは有効なので,以下の行があるかどうか確認のみ).
device tun
カーネルをコンパイル,インストールする.
# config router
# cd ../compile/router
(なお FreeBSD 4.X では移動するディレクトリが違うので注意)
# make depend
# make
# make install
再起動する.
# reboot
2. PPPoEの設定
rootのままで,ファイル /etc/ppp/ppp.conf を編集する.
なお,以下のファイルで,rl1は外向きのインターフェース(マシンによって異なります)
id@providorはあなたが接続するプロバイダのID
passwordはあなたが接続するプロバイダのパスワード
とする.
ここから------------------------------------
default:
set log Phase Chat LCP IPCP CCP tun command
set device PPPoE:rl1
set speed sync
set mru 1454
set mtu 1454
set ctsrts off
set timeout 0
accept CHAP
add default HISADDR
# enable dns
so-net:
set authname xxxx@yyy.so-net.ne.jp
set authkey password
ここまで------------------------------------
上のファイルで,default: や so-net: などのラベルは行頭から書き,そのほかの行は行頭に1個以上の空白かTABを入れること。私はすべて行頭から書いてしまい,動かない原因がわからずしばらく悩みました.
/etc/resolv.conf にDNSが記述してあれば,上記の enable.dns はコメントのままでよい.
接続テストをしてみる.
# ppp -ddial so-net
Working in ddial mode
Using interface: tun0
ifconfig コマンドで,tun0にアドレスが割り当てられていれば成功.
# ifconfig
tun0: flags=8051 mtu 1454
inet XXX.XXX.XXX.XXX --> XXX.XXX.XXX.XXX netmask 0xffffffff <-- アドレスが表示されればOK
Opened by PID 20
起動時に自動接続するために,/etc/rc.conf に以下の内容を追加する.
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="so-net"
ppp_nat="NO"
最後の行は,ppp内蔵のNAT機能を無効にするため(あとでnatdを使ってアドレス変換を実現するのでこの機能はいらない)
3. NATの設定
natdの設定ファイルを /etc/natd.conf として以下のように作る.もちろんrootで.
ここから---------------
deny_incoming no
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes
ここまで---------------
natdをFreeBSD起動時に有効にするため,/etc/rc.conf に以下を追加する.
gateway_enable="YES"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-f /etc/natd.conf"
portmap_enable="NO"
4. ipfwの設定
/etc/ipfw.conf として,以下のように作成する.この例は必要最低限のものであり,ほかにもマルチキャストの拒否などおこなっておいた方がよいものがある.
なお,rl0は内側のインターフェースである(マシンによって異なります).
ここから----------------------------------------------
# Firewall rules by Tsukubane
fwcmd="/sbin/ipfw -q"
# すべてのルールを初期化
${fwcmd} -f flush
# 断片化したパケットを拒否
${fwcmd} add 100 deny ip from any to any via tun0 frag
# pingを拒否
${fwcmd} add 200 deny icmp from any to any recv tun0
# ループバックを許可
${fwcmd} add 300 allow ip from any to any via lo0
# ローカルネットワークとの通信はすべて許可
${fwcmd} add 400 allow ip from 192.168.0.0/24 to any via rl0
${fwcmd} add 500 allow ip from any to 192.168.0.0/24 via rl0
# 外のネットワークからローカルアドレスを詐称して来るものを拒否
${fwcmd} add 600 deny all from 192.168.0.0/24 to any recv tun0
${fwcmd} add 700 deny all from 172.16.0.0/12 to any recv tun0
${fwcmd} add 800 deny all from 10.0.0.0/8 to any recv tun0
${fwcmd} add 900 deny all from 127.0.0.0/8 to any recv tun0
# 外のネットワークからローカルアドレス宛に来るものを拒否
${fwcmd} add 1000 deny all from any to 192.168.0.0/24 via tun0
${fwcmd} add 1100 deny all from any to 172.16.0.0/12 via tun0
${fwcmd} add 1200 deny all from any to 10.0.0.0/8 via tun0
${fwcmd} add 1300 deny all from any to 127.0.0.0/8 via tun0
# NetBiosを拒否
${fwcmd} add 3000 deny udp from any 137-139,445 to any
${fwcmd} add 3100 deny tcp from any 137-139,445 to any
${fwcmd} add 3200 deny udp from any to any 137-139,445
${fwcmd} add 3300 deny tcp from any to any 137-139,445
# natの設定
${fwcmd} add 4000 divert natd all from any to any via tun0
# 通信が確立したパケットを許可
${fwcmd} add 5000 allow tcp from any to any established
# 外へ出ていくものは許可
${fwcmd} add 5100 allow ip from any to any out via tun0
# 外への名前問い合わせを許可(ルーターマシンでDNSを運用している場合)
${fwcmd} add 6000 allow udp from any to any 53 out
${fwcmd} add 6100 allow udp from any 53 to any in
# 外への時刻問い合わせを許可(ルーターマシンでntpを運用している場合)
${fwcmd} add 6200 allow udp from any to any 123 out
${fwcmd} add 6300 allow udp from any 123 to any in
# 外からのWWW接続を許可(ルーターマシンでHTTPを運用している場合)
${fwcmd} add 6400 allow tcp from any to any 80 setup
# 外からのSSH接続を許可(ルーターマシンでSSHを受け付ける場合)
${fwcmd} add 6600 allow tcp from any to any 22 setup
# 上記に該当しないものはログを取って拒否
${fwcmd} add 9000 deny log tcp from any to any
${fwcmd} add 9100 deny log udp from any to any
${fwcmd} add 9200 deny log icmp from any to any
ここまで----------------------------------------------
/etc/rc.conf に以下を追加.
(ここの部分は当初は何か書いてあったと思いますが、いま保存してあるファイルに記述がありません)
再起動して完了.
# reboot
コメント 0