一.系統安裝
安裝FB的時候選擇最小化安裝還需要選上源代碼.或者在安裝完成之後執行sysinstall命令.選擇configure->Distributions->src->sys安裝內核代碼
二.cvsup升級
在安裝完系統以後的第一件事情是升級ports對.安裝cvsup不再贅述,cd /usr/ports/net/cvsup && make install clean進行安裝.並更新ports樹
三.內核配置
# cd sys/i386/conf
# cp GENERIC KERNEL_IPFW
#取消控制台按Ctrl+Alt+Del重啟
options SC_DISABLE_REBOOT
#啟用內核防火牆
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
#options IPFIREWALL_DEFAULT_TO_ACCETP
IPV6的options
options IPV6FIREWALL
options IPV6FIREWALL_VERBOSE
options IPV6FIREWALL_VERBOSE_LIMIT
options IPV6FIREWALL_DEFAULT_TO_ACCEPT
這些選項與 IPv4 的對應選項功能一樣, 它們是針對 IPv6 的。 如果不使用 IPv6,則不帶任何規則的 IPV6FIREWALL 將阻止所有的 IPv6 包。
options IPDIVERT //這一選項啟用 NAT 功能
另外,防火牆編譯進去後,默認是拒絕所有連接得,即它當中最後有一條默認的規則編號65535這一條:deny ip from any to any是啟用的。
但是我們可以在編譯內核時加上:
options IPFIREWALL_DEFAULT_TO_ACCETP,IPV6則是
options IPV6FIREWALL_DEFAULT_TO_ACCEPT,這樣默認情況下,防火牆時對外開放的,不過我們這裡沒有把這個編譯進去,需要時自己修改防火牆的設置吧,這樣比較放心,^_^ 因為我們這裡不做網關,其他的的詳細設置也就不加進去
編輯完成之後執行:
# /usr/sbin/config/kernel_ipfw
# cd ../compile/kernel_ipfw
# make celandepend && make depend
# make && make install clean
內核編譯需要一段時間.完成後執行reboot.使用uname -a可以看到內核編譯是否成功.以下是我完成後的顯示
# uname -a
FreeBSD openvpn.tenda 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sat Mar 31 20:11:41 CST 2007
[email protected]:/usr/src/sys/i386/compile/KERNEL_IPFW i386
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5
加入下面內容:
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enbale="NO"
sendmail_msp_queue_enable="NO"
#因為我們不配置mail服務器,也用不著sendmail就全部禁用吧。
update_motd="NO"
# 啟動登錄時老出現這個信息界面,比較煩人,去掉,順便把etc目錄下面的motd文件裡面的東西清光
firewall_enable="YES"
firewall_quiet="NO"
firewall_logging="YES"
tcp_drop_synifn="NO" 做web服務器時這項要改成NO,而不能是YES.
tcp_restric_rst="YES"
tcpdrop_redirect="YES"
firewall_type="open" 這條命令是在6.x上面新增的,配置了這條參數後防火牆就是對外開放了
五、ipfw基本規則設置
上面我們設置了firewall_type="open"
這個是讓防火牆完全開放,現在我們來具體設置防火牆的規則:
增加下面內容:
#!/bin/sh
# DNS服務器與客戶端的通訊端口都是udp的53號端口,因此我們只有開放自己與DNS服務器之間的53號端口進行通信即可,如果你知道自己的DNS服務器的ip地址可以把下面的any改成你的DNS地址。
# DNS
ipfw add allow udp from me to any 53 out
ipfw add allow udp from any 53 to me in
# DHCP的服務器與客戶端的通訊端口是udp 67、68端口,其工作原理這裡不多做介紹,如果你知道自己的DHCP服務器地址可以把其中的any改成你的DHCP服務器地址,前面兩條是正常情況下的規則,如果你的DHCP服務器不是很可靠,你可以加上下面注釋掉的兩條,當然一般情況下這兩條可以不加。
# DHCP
ipfw add allow udp from me 68 to any 67 out
ipfw add allow udp from any 67 to me 68 in
# ipfw add allow udp from any 68 to 255.255.255.255 67 out
# ipfw add allow udp from any 67 to 255.255.255.255 68 in
# 在創建與ICMP有關的規則時,只能指定ICMP數據包的type而不能指定它的code。
# 允許接受一些ICMP types (不支持codes)
###########允許雙向的path-mtu
ipfw add allow icmp from any to any icmptypes 3
ipfw add allow icmp from any to any icmptypes 4
我需要考慮是否需要ping我的網絡之外的主機或運行traceroute命令,由於二者都需要,並希望收到相應的應答,但我並不希望互聯網上的所有用戶都可以對我運行ping 或traceroute命令,因此,我需要添加下面的規則:
###########允許我對外部的主機運行ping命令,並得到相應的應答
ipfw add allow icmp from me to any icmptypes 8 out
ipfw add allow icmp from any to me icmptypes 0 in
###########允許我運行traceroute命令
ipfw add allow icmp from any to any icmptypes 11 in
# ICMP type 8是一個查詢請求,ICMP type 0是對查詢請求的應答。由於我只允許反復地發出請求並接受應答,從而我可以ping別人而別人不能ping我。
如果想別人也能ping到自己的話,只需要把上面的規則相對設置一下:
ipfw add allow icmp from any to me icmptype 8 inipfw add allow icmp from me to any icmptype 0 out
# 在運行traceroute命令時,就會向外發出UDP數據包。如果希望能夠獲得所有應答信息,我還必須允許系統接受所有的CMP type 11數據包。
####### TCP類型服務 ##########
# 只允許向外發送信息包
ipfw add check-state
ipfw add deny tcp from any to any in established
ipfw add allow tcp from any to any out setup keep-state
# 允許ssh等tcp端口的服務
ipfw add allow tcp from any to me 21,22,80,3306 in
ipfw add allow tcp from me 22 to any out
# 由於web服務通過80端口進來,但是出去的數據是隨機的,所以還得再加一條:
ipfw add allow tcp from me to any out