歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> FreeBSD下ipfw簡單配置

FreeBSD下ipfw簡單配置

日期:2017/2/28 11:14:26   编辑:關於Unix


一、安裝
選擇最小化安裝,並且選上src下面得sys(編譯內核用),以及man、ports,在後面選擇安裝包時,選上bash、cvsup-whitout-gui、perl,免得到時安裝其他軟件要用到時又得上網下載安裝,而這些包比較大,如果你的網絡不是非常好的話,那將非常的慢。啟動時選上inetd、啟用ssh。
二、升級ports樹
進入root用戶不用我說了吧,直接root登錄或者用其他用戶su到root也行,當然還得確定你已經連上網絡了。
# cd /usr/ports/net/cvsup-without-gui //因為還沒裝x只能用這種方式了
# make install clean // 意思不用我多說了吧
完成之後進入cvsup目錄
# cd /usr/share/examples/cvsup //進入cvsup目錄
# cp ports-supfile /root //保險起見還是備份一下得好^_^
# cd //進入自己的目錄
# vi ports-supfile
其他的就不改了,網上又文章說把ports-all 注釋了,再到下面去修改自己要升級的ports,但是考慮到又些軟件的依賴性,免得升級了之後出問題,就不改了,保存退出。
執行升級
# cvsup -g -L 2 ports-supfile
到出現下面的信息就可以啦。
Shutting down connection to server .
Finished successfully
三、編譯內核
# 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
另外,防火牆編譯進去後,默認是拒絕所有連接得,即它當中最後有一條默認的規則編號65535這一條:deny ip from any to any是啟用的。但是我們可以在編譯內核時加上:
optins IPFIREWALL_DEFAULT_TO_ACCETP,這樣默認情況下,防火牆時對外開放的,不過我們這裡沒有把這個編譯進去,需要時自己修改防火牆的設置吧,這樣比較放心,^_^ 因為我們這裡不做網關,其他的的詳細設置也就不加進去。
其他的內核設置看機器的具體情況而定,這裡不做多講。
編輯完成之後執行:
# /usr/sbin/config/kernel_ipfw
# cd ../compile/kernel_ipfw
# make celandepend && make depend
# make && make install clean
如果出現錯誤,看提示做相關更改,完成之後reboot,進入系統執行uname -a看看是否成功。
四、系統參數設置
在啟動項中加入配額以及防火牆選項:
加入下面內容:
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"
到最後一行增加:
!ipfirewall*.* /var/log/ipfw.log
這裡需要說明的是,就是防火牆啟用之後默認的規則是
deny ip from any to any
這個上面說過了,但是我在以前做的FreeBSD 4.10版本的系統中加了
ipfw add allow ip from any to any
之後防火牆就是完全開放了,但是在這個6.1的版本中我加了這條依然是無效,可能版本不一樣的緣故造成的吧,既然無效,那就只能是換其他的方法了,
幸好我這裡還有一個其他的方法^_^
firewall_type="open"
重啟機器,這樣防火牆就是對外開放了,不知道這條在4.10的系統中是不是有用,有機會去試試。防火牆啟用之後執行ifconfig看看原來的網絡地址是不是還生效,如果不生效了,執行sysinstall重新設置一下ip地址等網絡設置。
五、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 in
ipfw add allow icmp from me to nay 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
但是是由於對ipfw了解不深,根據一般的防火牆的檢驗規則都是數據通訊先從客戶端發個請求從某個端口進來,防火牆檢驗過後再讓數據從哪個特定的或者是隨機的選一個端口讓數據出去,再出去時再檢查狀態,但是我不知道加了這條之後會不會允許不需要外面先請求進來而系統內部可以主動的向外發送數據,而不加阻攔和檢查,如果是這樣的話那是相當的危險,做為服務器,客戶隨便上傳一個木馬什麼的不是允許出去了麼?而之前上面的那兩條check state是不是還起檢查作用,我不知道,這個有待學習研究。
遺補:
今天突然想起,如果服務器是在機房,遠程編譯內核加防火牆的話,啟用防火牆後默認是拒絕所有連接的,所以上面提到的
options IPFIREWALL_DEFAULT_TO_ACCEPT
但是一點得說明,我在FreeBSD4.10版本中編譯內核的時候在內核中加了:
options IPFIREWALL_DEFAULT_TO_ACCEPT
編譯時居然是提示:unknow option IPFIREWALL_DEFAULT_TO_ACCEPT
看來只能是用firewall_type="OPEN"了,不知道是不是也是版本的原因。
Copyright © Linux教程網 All Rights Reserved