ADJ網路實驗室
打印

[文章] 在FreeBSD上使用Firewall (IPFW)

在FreeBSD上使用Firewall (IPFW)

轉貼自: 小紅帽論壇

使用Firewall
有三個防護的要素:port, host, protocol
兩種基本Firewall種類:
1.filter packets
2.accounting,統計
IPFW這兩種都可作,可直接用在FreeBSD機器或當gateway router,保護LAN中的多部機器。
※最好在本機操作,以免出問題時而無法連線

【啟用Firewall】
在核心設定檔中加入以下options,並重編核心
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10

或是不要重新編譯核心,而是利用/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

可在/etc/rc.conf指定數個不同的firewall_types
每個keyword有不同意思,可自/etc/rc.firewall中找到其意思
open:允許全部
closed:除了loopback,關閉所有的IP
client:設定rules,只保護這部機器
simple:設定rules,保護整個網路
unknown:除了65535這條rule,不載入其它rule
<filename>:從<filename>載入rules

平常用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

變更firewall_type="/etc/firewall.conf"
下回重新開機或執行/etc/netstart會以100, 200, 300的編號順序載入/etc/firewall.conf中的規則。

參考
man ipfw
FreeBSD Handbook





TOP

ARTERY.cn