追記 [2007-09-09] †追記だから普通は下の方にかくんだろうけど! しばらくはまっていたのでそこだけメモ /etc/rc.conf : ifconfig_out_interface = "dhcp" : としていてこれをコメントアウトしたけど、 ifconfig_OUT-IF = "up" こうしなくっちゃいけなかったらしい。 /etc/rc.conf : natd_interface="OUT-IF" : は : natd_interface="tun0" : だそうだ。 ipfw -a listでルールをチェックして行くうちに見つかった。 &hr; FreeBSD 5.3のときにFirewallを作ったときの記録です。 Firewallの構築 †まずは、ファイアウォール! Firewallの構築 †といっても、とっても難しかったです。まず、BSD MagazineのVol.18を参考に作ってみる。 実際のインストール †といり合えず、STANDARD + USERでインストールをしました。WEBで検索するとFreeBSD 5.2でNIC2枚差しルータというページを発見。それとFreeBSDによるインターネットサーバーの構築を発見。どちらもPPPoEだけど、IPFW + NATというところで参考になるかと。 本当のインストール †カーネルを再構築するためには、STANDARD + KERN-DEVELOPERでインストールします。 # cd /sys/i386/conf # cp GENERIC RT
rc.confの設定 †rc.confにIPFW + NATの設定を追加します。 # # add wikiki # ifconfig_xl0="192.168.0.1 netmask 255.255.255.0" # inter interface ifconfig_ed0="DHCP" # outer interface firewall_enable="YES" firewall_quied="YES" firewall_type="open" firewall_script="/etc/ipfw.nat" gateway_enable="YES" natd_enable="YES" natd_ingerface="xl0" #natd_flags="-dynamic" 次に/etc/ipfw.confを作成します。これがファイアウォールのルールとなる(らしい) # Firewall rules
fwcmd="/sbin/ipfw -q"
# Initialize all rules
${fwcmd} -f flush
# Denial of fragmentation packet
${fwcmd} add 100 deny ip from any to any via xl0 frag
# Denial of ping
${fwcmd} add 200 deny icmp from any to any recv xl0
# Allow loopback
${fwcmd} add 300 allow ip from any to any via lo0
# Allow local communication
${fwcmd} add 400 allow ip from 192.168.0.0/24 to any via ed1
${fwcmd} add 500 allow ip from any to 192.168.0.0/24 via ed1
# Denial local address from outside
${fwcmd} add 600 deny all from 192.168.0.0/24 to any recv xl0
${fwcmd} add 700 deny all from 172.16.0.0/12 to any recv xl0
${fwcmd} add 800 deny all from 10.0.0.0/8 to any recv xl0
${fwcmd} add 900 deny all from 127.0.0.0/8 to any recv xl0
# Denial to local addres from outside
${fwcmd} add 1000 deny all from any to 192.168.0.0/24 via xl0
${fwcmd} add 1100 deny all from any to 172.16.0.0/12 via xl0
${fwcmd} add 1200 deny all from any to 10.0.0.0/8 via xl0
${fwcmd} add 1300 deny all from any to 127.0.0.0/8 via xl0
# Denial of 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
# Set Nat
${fwcmd} add 4000 divert natd all from any to any via xl0
# Allow connect established
${fwcmd} add 5000 allow tcp from any to any established
# Allow goto outside
${fwcmd} add 5100 allow ip from any to any out via xl0
# Allow DNS
${fwcmd} add 6000 allow udp from any to any 53 out
${fwcmd} add 6100 allow udp from any 53 to any in
# Allow NTP
${fwcmd} add 6200 allow udp from any to any 123 out
${fwcmd} add 6300 allow udp from any 123 to any in
# Allow WWW
${fwcmd} add 6400 allow tcp from any to any 80 setup
# Allow SSH
${fwcmd} add 6600 allow tcp from any to any 22 setup
# Denial another communication with log
${fwcmd} add 9000 log tcp from any to any
${fwcmd} add 9100 log udp from any to any
${fwcmd} add 9200 log icmp from any to any
という設定にします。
うごきませーん。内部から外側にアクセスできません。
ifconfigで確認してみると外側のインタフェースxl0と内側のインタフェースed1にちゃんとアドレスは割りあたってる。どうなってんだ。 # ipfw list で現在のルールを確認できることがわかった。 00050 divert 8668 ip from any to any via xl0 00100 allow ip form any to any via xl0 00200 deny ip from any to 127.0.0.0/8 00300 deny ip from 127.0.0.0/8 to any 65000 allow ip from any to any 65535 deny ip from any to any となってます。だれが設定しているんだ? # /sbin/natd -n xl0 -v & でnatが変換している様子をモニタすることが可能であることを知りました。 で、ちくちくルールを作っていきました。できたルールは...そのまんまじゃん。 # Script for IPFW + NAT rules ( static nat rules)
# Suck in the configuration variables.
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
source_rc_confs
elif [ -r /etc/rc.conf ]; then
. /etc/rc.conf
fi
fwcmd="/sbin/ipfw -q"
# Initialize all rules
${fwcmd} -f flush
############################
# Internet (outside) interface
oif="xl0"
#onet="1.2.3.0/24"
#oip="1.2.3.4"
# private (inside) interface
iif="ed1"
inet="192.168.0.0/24"
iip="192.168.0.1"
############################
# rule for loopback
${fwcmd} add pass all from any to any via lo0
${fwcmd} add deny all from any to 127.0.0.0/8
# Drop fragmentation packet
${fwcmd} add deny ip from any to any via ${oif} frag
# Drop NetBIOS
${fwcmd} add deny udp from any 137-139 to any
${fwcmd} add deny tcp from any 137-139 to any
${fwcmd} add deny udp from any to any 137-139
${fwcmd} add deny tcp from any to any 137-139
# Denail impersonation packet
#${fwcmd} add deny all from ${inet} to any in via ${oif}
#${fwcmd} add deny all from ${onet} to any in via ${iif}
# Denial private address or multicast
${fwcmd} add deny all from any to 10.0.0.0/8 via ${oif}
${fwcmd} add deny all from any to 172.16.0.0/12 via ${oif}
${fwcmd} add deny all from any to 192.168.0.0/16 via ${oif}
${fwcmd} add deny all from any to 0.0.0.0/8 via ${oif}
${fwcmd} add deny all from any to 169.254.0.0/16 via ${oif}
${fwcmd} add deny all from any to 192.0.2.0/24 via ${oif}
${fwcmd} add deny all from any to 224.0.0.0/4 via ${oif}
${fwcmd} add deny all from any to 240.0.0.0/4 via ${oif}
############################
# NAT
${fwcmd} add divert natd all from any to any via ${natd_interface}
# Denial private address and multicast
${fwcmd} add deny all from 10.0.0.0/8 to any via ${oif}
${fwcmd} add deny all from 172.16.0.0/12 to any via ${oif}
${fwcmd} add deny all from 192.168.0.0/16 to any via ${oif}
${fwcmd} add deny all from 0.0.0.0/8 to any via ${oif}
${fwcmd} add deny all from 169.254.0.0/16 to any via ${oif}
${fwcmd} add deny all from 192.0.2.0/24 to any via ${oif}
${fwcmd} add deny all from 224.0.0.0/4 to any via ${oif}
${fwcmd} add deny all from 240.0.0.0/4 to any via ${oif}
# Allow TCP connection established
${fwcmd} add pass tcp from any to any established
# Allow SSH
${fwcmd} add pass tcp from any to ${oip} 22 setup
# Allow SMTP
${fwcmd} add pass tcp from any to ${oip} 25 setup
# reset IIDENT
${fwcmd} add reset tcp from any to any 113
# Allow DNS
${fwcmd} add pass tcp from any to ${oip} 53 setup
${fwcmd} add pass udp from any to ${oip} 53
${fwcmd} add pass udp from ${oip} 53 to any
# Allow WWW connection
${fwcmd} add pass tcp from any to ${oip} 80 setup
# Denial another TCP connect and logging
${fwcmd} add deny log tcp from any to any in via ${oif} setup
# Allow TCP connection from inside
${fwcmd} add pass tcp from any to any setup
# Allow DNS toiawase
${fwcmd} add pass udp from any to any 53
${fwcmd} add pass udp from any 53 to any
# Allow NTP query
${fwcmd} add pass udp from any 123 to ${oip}
${fwcmd} add pass udp from ${oip} to any 123
# Allow ping from inside to outside
${fwcmd} add pass icmp from any to any via ${iif}
${fwcmd} add pass icmp from any to any out via ${oif} icmptypes 8
${fwcmd} add pass icmp from any to any in via ${oif} icmptypes 0
# RFC2979
${fwcmd} add pass icmp from any to any in via ${oif} icmptypes 3
# Denial another icmp and logging
${fwcmd} add deny log icmp from any to any
# Denial another
コメントは日本語でしたが、日本語環境がないところでエディットするためアルファベット^^;に直してます。
# sh ipfw.nat おっできた。 スピードテストをしてみた。 †スピードテスト | USENの回線速度 freebsd router box : Max. 6.038Mbps Ave. 4.890Mbps Min. 1.867Mbps Direct : Max. 6.199Mbps Ave. 6.129Mbps Min. 5.985Mbps ちなみに契約は12Mbps。距離はNTTの開示情報で1050m 損失は19dbです。 |