目的
内部LANのどのマシンからも、不自由なく外部にアクセスが可能で 外部から、内部のLANにはアクセスできない。
また、外側から見ると、全てのアクセスはファイアウォールのマシンから来たように見える
・・・というような、ファイアーウォールを作るんだぁ資料
内側用NIC ed0 211.5.xxx.77 外側用NIC rl0 192.168.yyy.77 OS FreeBSD 4.4-RELEASE
カーネルの設定ファイルをコピーする # cd /usr/src/sys/i386/conf
# cp GENERIC SERABI 何でもいいのですが、今回は自分のホスト名にしました。
ipfwを有効にするオプションを追加 # vi SERABI
options IPFIREWALL ipfw を有効にする
options IPFIREWALL_VERBOSE syslogdを通じてパケットログを取れるようになります
options IPDIVERT NATを有効にする
カーネルの再構築 # /usr/sbin/config SERABI
# cd /usr/src/sys/compile/SERABI
# make depend
# make
# make install
# reboot
NATが働くようにする gateway_enable="YES"
natd_enable="YES"
natd_interface="ed0"
natd_flags="-f /etc/natd.conf" 何でもいいのですが、/etc/natd.conf を定義ファイルにします。
ipfwが働くようにする firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="simple"
ネットワークの定義 network_interfaces="ed0 rl0 lo0"
ifconfig_rl0="inet 192.168.yyy.2 netmask 255.255.255.0"
ifconfig_ed0="inet 211.5.xxx.67 netmask 255.255.255.224"
defaultrouter="211.5.xxx.65"
hostname=" serabi.XXX.ne.jp"
ポリシーを決める
・内側からのアクセスは全て許す
・外側からのアクセスは全て許さない
・pingは、どこからどこへでも許可
・外部からもSSHでは、ログインできるようにしたい(これはnatdの設定)
/etc/rc.firewall の定義 /etc/rc.firewallから、/etc/rc.conf の firewall_type に指定した、エントリを探します。
独自エントリを作成することも可能ですが、今回は、既存のsimpleエントリを書き換えて しまいました。
独自エントリを作成する場合には、etc/rc.firewallから、/etc/rc.conf の firewall_typeの 修正も忘れずに。 [Ss][Ii][Mm][Pp][Ll][Ee]) ############ # This is a prototype setup for a simple firewall. Configure this # machine as a named server and ntp server, and point all the machines # on the inside at this machine for those services. ############ # set these to your outside interface network and netmask and ip oif="ed0" onet="211.5.xxx.65" omask="255.255.255.224" oip="211.5.xxx.77" # set these to your inside interface network and netmask and ip iif="rl0" inet="192.168.yyy.0" imask="255.255.255.0" iip="192.168.yyy.77" # Network Address Translation. This rule is placed here deliberately # so that it does not interfere with the surrounding address-checking # rules. If for example one of your internal LAN machines had its IP # address set to 192.0.2.1 then an incoming packet for it after being # translated by natd(8) would match the `deny' rule above. Similarly # an outgoing packet originated from it before being translated would # match the `deny' rule below. case ${natd_enable} in [Yy][Ee][Ss]) if [ -n "${natd_interface}" ]; then ${fwcmd} add divert natd all from any to any via ${natd_interface} fi ;; esac # Allow IP fragments to pass through ${fwcmd} add pass all from any to any frag #もうすでに、確定しているTCPセッションは許可 ${fwcmd} add pass tcp from any to any established #ping は どこからどこへでも許可 ${fwcmd} add pass icmp from any to any #sshでの接続は、どこからでも許可 ${fwcmd} add pass tcp from any to any 22 #外側NICからやってきた接続要求は全部断る ${fwcmd} add deny tcp from any to any in via ed0 setup #上記以外のIPパケは、なんでもオッケー ${fwcmd} add pass ip from any to any ;;
/etc/natd.confの設定 log no
deny_incoming yes
redirect_port tcp 192.168.yyy.zzz:22 22 F/W内側でサービスするホストのIP(22はssh)
interface ed0
ルールリストとカウンタの表示 # ipfw -a list 00100 8570 450856 allow ip from any to any via lo0 00200 0 0 deny ip from any to 127.0.0.0/8 00300 0 0 deny ip from 127.0.0.0/8 to any 00400 2659991 1734996503 divert 8668 ip from any to any via ed0 00500 5123779 3443355159 allow tcp from any to any established 00600 648 811296 allow ip from any to any frag 00700 2547 970898 allow icmp from any to any 00800 308 16488 allow tcp from any to any 22 00900 127 6604 deny tcp from any to any in recv ed0 setup 01200 78233 6125351 allow ip from any to any 65535 3 144 deny ip from any to any
例えば、上記の例では 01200 番のルールで、IPパケットを全て通していますが、
この行を抜くだけで、不必要なものは通らない、ガチガチの firewall になります
但し、DNSなども通らなくなるので不便です(;;)
そのようなものは、ちゃんと記述して通してあげます。
不必要なものを通さない例 # ipfw -a list 00100 8570 450856 allow ip from any to any via lo0 00200 0 0 deny ip from any to 127.0.0.0/8 00300 0 0 deny ip from 127.0.0.0/8 to any 00400 2659991 1734996503 divert 8668 ip from any to any via ed0 00500 5123779 3443355159 allow tcp from any to any established 00600 648 811296 allow ip from any to any frag 00700 2547 970898 allow icmp from any to any 00800 308 16488 allow tcp from any to any 22 00900 6493 34233 allow tcp from any to any 53 # dns 01000 127 6604 allow udp from any to any 53 # dns 01100 10342 382932 allow tcp from any to any 80 via ed1 # http 01200 130 7022 deny tcp from any to any in recv ed0 setup 65535 8322134 6836458323 deny ip from any to any