分类: BSD
2008-03-20 16:46:59
/etc/rc.conf 加入重新開機時系統會動態的載入kernel模組.
firewall_enable="YES" #啟動ipfw
firewall_type="open" #ipfw啟動的型態, open表示不過濾.
firewall_logging="YES"
#是否要啟動記錄功能(請依照需求決定) ,等同net.inet.ip.fw.verbose=1
#會記錄在/var/log/security
/etc/sysctl.conf新增
net.inet.ip.fw.verbose=1
#啟動verbose模式 ,等同 /etc/rc.conf 設定 firewall_logging="YES"
net.inet.ip.fw.verbose_limit=5
#限定log模式, 注意無 /etc/rc.conf 可以取代此變數設定
簡單設定:假設我只要啟動防火牆功能,不做紀錄.
Kernel參數
則只要單純加上 上述的兩行即可.
options IPFIREWALL #啟用ipfw功能常用指令
options IPFIREWALL_VERBOSE #啟用複雜模式(log輸出)
options IPFIREWALL_VERBOSE_LIMIT=5
#定義連續送往syslog紀錄的數量為5次
#其餘的則會顯示 last message repeated N times , 表示前一紀錄重複N次.
IPFIREWALL_DEFAULT_TO_ACCEPT #預設不過濾任何封包.
options IPDIVERT #若要使用NAT請加入導向功能.
ipfw -a list清空目前規則:
ipfw flush將計數歸零:
Are you sure? [yn] # 系統會讓您再次確認
#預設為 deny ip form any to any,也就是下此指令只能到本機前操作.
ipfw zeroIPFW語法:
from any to me # 從任何地方連結到這台機器.(C) port number --埠號
注意: 測試時建議將log功能開啟, 以便於除錯.# 檔案置放於 /etc/ipfw.rules
# IPFW規則開始
# 清除先前的所有規則 , -q 表示不輸出訊息 -f 表示強制
ipfw -q -f flush
# 設定規則的縮寫 , 懶人用的.
cmd="ipfw -q add"
if="em0" #連結internet的網路介面,可透過ifconfig指令查看.
#不限制 loopback
$cmd 00010 allow all from any to any via lo0
#允許封包通過,如果先前已經match keep-state 動態規則.
$cmd 00015 check-state
# 允許存取DNS名稱伺服器 , 可以透過 /etc/resolv.conf 取得IP位址.
# 此例為 163.19.163.1
$cmd 00110 allow tcp from any to 163.19.163.1 53 out via $if setup keep-state
$cmd 00111 allow udp from any to 163.19.163.1 53 out via $if keep-state
# 允許 使用 FreeBSD相關功能(make install & CVSUP)
$cmd 00240 allow tcp from me to any out via $if setup keep-state uid root
# 允許對外 icmp 協定.
$cmd 00250 allow icmp from any to any out via $if keep-state
# 允許使用SSH(secure )相關功能
$cmd 00280 allow tcp from any to any 22 out via $if setup keep-state
# 拒絕不該出現在internet的IP位址連入機器
$cmd 00300 deny all from 192.168.0.0/16 to any in via $if
$cmd 00301 deny all from 172.16.0.0/12 to any in via $if
$cmd 00302 deny all from 10.0.0.0/8 to any in via $if
$cmd 00303 deny all from 127.0.0.0/8 to any in via $if #loopback
$cmd 00304 deny all from 0.0.0.0/8 to any in via $if #loopback
$cmd 00305 deny all from 169.254.0.0/16 to any in via $if #DHCP自動設定
$cmd 00306 deny all from 192.0.2.0/24 to any in via $if #保留給docs
$cmd 00307 deny all from 204.152.64.0/23 to any in via $if #Sun叢集連結使用
$cmd 00308 deny all from 224.0.0.0/3 to any in via $if #ClassD及E multicast
# 除某區段之外 拒絕外部使用icmp ping (此例為163.19.163.0/24)
$cmd 00309 allow icmp from 163.19.163.0/24 to any in via $if
$cmd 00310 deny icmp from any to any in via $if
# 拒絕任何延遲抵達的封包(late arriving packets)
$cmd 00330 deny all from any to any frag in via $if
# 允許 ftp 服務 , 20為 seesion數, 請自行決定
$cmd 00400 allow tcp from any to me 21 in via $if setup limit src-addr 20
# 允許SSH相關 服務(若無 請移除) ,
$cmd 00410 allow tcp from any to me 22 in via $if setup limit src-addr 20
# 允許 telnet 連結 , 由於telnet是採用明碼傳送,建議不使用.
$cmd 00420 allow tcp from any to me 23 in via $if setup limit src-addr 20
# 若不希望啟動時候被踢出來,重新連結的話,可以加入類似行列.
# 允許相關ip連結某port, 此例為 23 port
$cmd 00430 allow tcp from 163.19.163.0/24 to me 23 via $if
# 允許標準的www功能 (若有架設伺服器)
$cmd 00440 allow tcp from any to me 80 in via $if setup limit src-addr 2
# 其餘要開放的port 類推.
# 允許本機送出tcp封包.
$cmd 00500 allow tcp from any to any out via $if
# 預設拒絕且紀錄所有封包
$cmd 00999 deny log all from any to any
# IPFW規則結束
firewall_script="/etc/ipfw.rules" #絕對路徑
此時/etc/rc.conf firewall相關的設定應為 :
firewall_enable="YES"
firewall_script="/etc/ipfw.rules"
firewall_logging="YES"