為 FreeBSD 加入 ipfw 防火牆
跳至導覽
跳至搜尋
作者:Joe Horn( joehorn AT leobbs DOT net )
授權:[CC授權:姓名標示-非商業性-相同方式分享 2.5]
附註:本文件適用於 FreeBSD 平台,其它 UNIX-Like OS 可能有所不同。
前言
有鑑於近年來網路安全漸漸被大家重視,Windows 系統上面的防火牆軟體越來越多,而 Linux 也幾乎都內建了防火牆功能,故撰此文件。
修改與編譯核心設定檔
修改您的 kernel 設定檔,在裡面加進以下這段:
options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=100 options IPFIREWALL_DEFAULT_TO_ACCEPT
- 另外要注意的是,如果您使用的是 2005 年 3 月 2 日以後的 FreeBSD ,而且有打算用 ipfw 來 forward 封包的話,必須再加進這行:
options IPFIREWALL_FORWARD_EXTENDED
如果有打算用 ipfw 來作頻寬控管的話,請再加入這行:
options DUMMYNET
其他的選項與各項說明可以參考 /sys/i386/conf/LINT(FreeBSD 5.0 以後之版本請參考 /sys/i386/conf/NOTES)。
重新 make kernel。
設定 ipfw
修改 /etc/rc.conf,在裡面加進以下這段內容:
firewall_enable="YES" firewall_type="simple" firewall_script="[用來決定 firewall rule 的 shell script 絕對位置]" firewall_quiet="YES"
- 其中用來決定 firewall rule 的 shell script 絕對位置請自行決定,我的習慣是使用 /etc/rc.firewall_[主機 hostname]。
- 例如:mail.aaa.com.tw 的 firewall rule 的 shell script 就是 /etc/rc.firewall_mail
編輯 firewall rule shell script,請在前面加上這幾行:
#!/bin/sh # ================ # 清除所有防火牆過濾的規則(歸零) /sbin/ipfw -f flush%%
然後底下請加上自己想要用的 firewall rule.
- 注意:前面的規則會先被採用,就算後面有衝突也不會再理會。
規則範例與說明
我舉幾個例子:
- 讓 111.222.333.444 無法與我的主機連線(任一 port),用這行:
- /sbin/ipfw add deny all from 111.222.333.444 to any
- 讓 555.666.777.888 無法連線到我的 HTTP port(port 80):
/sbin/ipfw add deny tcp from 555.666.777.888 to any 80
- 讓 111.222.333.* 無法連線到我的 SMTP port(port 25):
/sbin/ipfw add deny tcp from 111.222.333.0/24 to any 25
其他相關設定方式請 man ipfw,或是以下這個網頁: [http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html]
重新開機並啟動 ipfw
重新開機,ipfw 在重新開機之後就會啟動。
其他指令
- 將所有的 rule 列出來:
# /sbin/ipfw show
- 洗掉所有規則:
# /sbin/ipfw flush
其他關於 ipfw 的參數請 man ipfw。
後記
值得注意的是,因為我們有在 kernel 中使用 IPFIREWALL_DEFAULT_TO_ACCEPT 這個 options,所以無論我們有沒有加規則,ipfw 都會跑這個 rule:
/sbin/ipfw add allow ip from any to any
而這個 rule 是優先順序最低的 rule,將會容許所有你沒設定擋掉的 IP/port 做連線。