Ipfirewall(即IPFW)是一個FreeBSD操作系統(tǒng)下的IP數(shù)據(jù)包過濾和通信記錄工具。IPFW作為一個獨立的運行時刻可裝載模塊,就包含在基本的FreeBSD安裝包中。在rc.conf中含有語句“firewall_enable=YES”時,系統(tǒng)會動態(tài)地裝載內(nèi)核模塊。
第一步:為IPFW而編譯FreeBSD內(nèi)核
這一步是可選的。如果你不想啟用NAT功能,你就沒有必要將IPFW編譯到FreeBSD內(nèi)核中。然而一些老的版本可能沒有編譯IPFW。下面我們介紹將IPFW編譯進入內(nèi)核中去的方法。
如果你得到如下的一個錯誤消息:“ipfw: getsockopt(IP_FW_GET): Protocol not available ”,即協(xié)議不可使用,那你就必須編譯內(nèi)核的源代碼。
另一個可選項是打開默認的內(nèi)核配置文件/usr/src/sys/i386/conf,并找到IPFIREWALL選項:
# grep IPFIREWALL /usr/src/sys/i386/conf |
第二步:編譯并安裝帶有IPFW的定制內(nèi)核
首先是復制默認的內(nèi)核文件:
# cd /usr/src/sys/i386/conf# cp GENERIC IPFWKERNEL |
然后增加IPFW支持:
添加下面的指令:
options IPFIREWALL # required for IPFWoptions IPFIREWALL_VERBOSE # optional; loggingoptions IPFIREWALL_VERBOSE_LIMIT=10 # optional; don't get too many log entriesoptions IPDIVERT # needed for natd |
保存并關閉文件。編譯內(nèi)核,鍵入如下的命令:
# cd /usr/src# make buildkernel KERNCONF=IPFWKERNEL |
安裝新的內(nèi)核:
# make installkernel KERNCONF=IPFWKERNEL |
現(xiàn)在重新啟動系統(tǒng):
第三步:啟用IPFW
首先打開/etc/rc.conf文件:
然后,添加如下的設置:
firewall_enable="YES"firewall_script="YES"firewall_script="/usr/local/etc/ipfw.rules" |
保存并關閉文件。
第四步:編寫防火墻規(guī)則腳本
你需要將防火墻規(guī)則放到一個被稱為/usr/local/etc/ipfw.rule的腳本中:
# vi /usr/local/etc/ipfw.rule |
添加如下的代碼:
IPF="ipfw -q add"ipfw -q -f flush#loopback$IPF 10 allow all from any to any via lo0$IPF 20 deny all from any to 127.0.0.0/8$IPF 30 deny all from 127.0.0.0/8 to any$IPF 40 deny tcp from any to any frag# statefull$IPF 50 check-state$IPF 60 allow tcp from any to any established$IPF 70 allow all from any to any out keep-state$IPF 80 allow icmp from any to any# open port ftp (21,22), ssh (22), mail (25)# http (80), dns (53) etc$IPF 110 allow tcp from any to any 21 in$IPF 120 allow tcp from any to any 21 out$IPF 130 allow tcp from any to any 22 in$IPF 140 allow tcp from any to any 22 out$IPF 150 allow tcp from any to any 25 in$IPF 160 allow tcp from any to any 25 out$IPF 170 allow udp from any to any 53 in$IPF 175 allow tcp from any to any 53 in$IPF 180 allow udp from any to any 53 out$IPF 185 allow tcp from any to any 53 out$IPF 200 allow tcp from any to any 80 in$IPF 210 allow tcp from any to any 80 out# deny and log everything$IPF 500 deny log all from any to any |
保存并關閉文件。
第五步:啟動防火墻
你可以重新啟動服務器,或者通過在命令行輸入如下的命令,可以重新加載這些規(guī)則:
# sh /usr/local/etc/ipfw.rules |
如果要依次列示所有的規(guī)則,需要鍵入下面的命令: