或是不要重新編譯核心,而是利用/etc/rc.network script自動載入kernel module,在/etc/rc.conf加入幾個項目
※如果要用NATD,還是要重新編譯核心,因natd需要IPDIVERT這個option
firewall_enable="YES"
firewall_type="open"
若沒有指定firewall_type,會使用預設編號65535的rule:deny ip from any to any
也就是重開機後,所有的網路連線完全被封住無法使用。而設定open就是讓封包通過,而不是block。
當設好/etc/rc.conf後,重開機或在本機執行
# /etc/netstart
會看見有哪些rule被啟用,像這樣
Flushed all rules.
00050 divert 8668 ip from any to any via de0
00100 allow ip from any to any via lo0
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
Firewall rules loaded, starting divert daemons:
也可用kldstat檢查IPFW的module是否自動載入
# kldstat
Id Refs Address Size Name
1 2 0xc0100000 22290c kernel
2 1 0xc1d36000 2000 star_saver.ko
我的大概因為不是用載入module的方式,所以沒看到ipfw.ko這個模組出現
現在可使用ipfw來設定rule,允許哪種traffic或檢視accounting information
【設定IPFW】
ipfw用來自packet filter或account system中add或delete規則(rule)
規則是由幾個部份組成
action: deny, allow
protocol: tcp, udp, all
address: from, to
幾個例子:
# ipfw add deny tcp from badguy.com to any
# ipfw add deny all from bad.ip.com/16 to www.anyplace.com 80
# ipfw add allow all from goodone.bad.ip.com to www.anyplace.com 80
每條rule都有一個號碼,通常以100為一個編號間隔。依號碼順序套用。
檢視目前rule
# ipfw -a list
00050 62 4840 divert 8668 ip from any to any via de0
00100 0 0 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
65000 60 4484 allow ip from any to any
65535 2 356 allow ip from any to any
稍微解釋一下
第一欄:index號碼
第二、三欄:使用統計量,單位是packets/bytes
平常用client或simple就夠用了
如果要較特殊的設定,可將rule寫在檔案中,如/etc/firewall.conf,將rule列於其中,省略ipfw:
add deny tcp from badguy.com to any
add deny all from bad.ip.com/16 to www.anyplace.com 80
add allow all from goodone.bad.ip.com to www.anyplace.com 80
add 65000 allow all from any to any