Solaris 10 IP Filter技術詳解
Solaris 10集成了許許多多的開源軟件,IP Filter就是其中之一,該軟件包直接替換了原來SUN screen 防火牆軟件包。IP Filter軟件包其功能也完全替代sun screen,功能包括狀態性包過濾和網絡地址轉換(NAT),同樣提供非狀態包過濾以及創建和管理地址池的能力。
包過濾是防止基於網絡攻擊最直接有效的保護方法,Solaris IP Filter可以根據不同需求,可通過IP地址、端口、協議、網卡對網絡包加載過濾功能。Solaris IP Filter也可以通過私有的源IP地址和目標IP地址 ,或者一個IP地址范圍,再或者一個IP池來進行網絡包的過濾。就是說其定制的策略是非常靈活的。
Solaris IP Filter配置文件介紹
Solaris IP Filter軟件包提供防火牆和網絡地址轉換(NAT)兩種功能,而起配置信息都可以使用相應的配置文件來提供。Solaris IP Filter配置文件都放在/etc/ipf目錄下,包括ipf.conf,ipf.nat以及ippool.conf等文件。這些文件在系統boot過程中被自動讀取,只要這些文件存放在/etc/ipf目錄下。
Solaris IP Filter包過濾特征介紹
通過使用包過濾規則集可以十分輕松設置防火牆功能,命令ipf是用來配合這些規則集進行功能設置。這些規則集既可以使用命令行進行設置,也可以使用編寫配置文件的方法來進行設置。/etc/ipf/ipf.conf配置文件裡面放置了所有包過濾規則集,在系統boot過程中被ipfilter服務所讀取。如果ipf.conf文件不放在/etc/ipf/目錄下,這些規則集就不會被讀取,但是可以在啟動完成後,使用命令來動態讀取。
Solaris IP Filter同時維護著兩份規則集,一個為激活使用的(在kernel中),一個為非激活的規則集。IP Filter在進行包過濾的時候是從規則集的開始一直到最後一行進行處理,並設置著一個標志,根據這個標志,IP Filter決定是否轉發或者攔截網絡包。
以上從頭到尾的遍歷處理方式有兩個例外情況,一個是規則中含有quick關鍵字,另外一個就是含有group關鍵字。如果規則中含有quick關鍵字,規則合規處理就為處理完所在規則行後,將不再往下讀取其他規則了。如果規則中含有group關鍵字,那麼只有帶有group標志的網絡包才被處理。
Solaris IP Filter語法通解
在/etc/ipf/ipf.conf文件中每一行的語法都如以下所示來描述一個規則:
action [in|out] option keyword, keyword...
1. action 每個規則必須使用的開始部分
這些action為其後規則被匹配時所采用的動作,具體如下:
block 阻止網絡包
pass 允許網絡報文通過
log 記錄所有被通過和阻止的網絡包,使用ipmon命令查看
count 統計計算網絡報文數,使用ipfstat查看統計信息
skip number 過濾處理時跳過規則的個數
auth 通過用戶程序驗證網絡報信息,需要進行包授權請求
preauth 過濾器查看預授權表請求,決定網絡包如何處理
2. action後面必須為in或者out
in為進來的網絡包,out是出去的網絡包
3. 第三部分為規則的一些選項
如果以下選項都被使用的話,必須按順序寫入規則集
log 最後一個規則被匹配時,網絡包將被記錄
quick 如果網絡包被匹配時的規則行包含quick選項,將按該規則處理,後面的規則不在被讀取
on interface-name 只有進出指定網卡的網絡包才能適用該規則
dup-to interface-name 在指定網卡上,拷貝包然後發送拷貝的包到指定的IP上
to interface-name 將網絡包在改網卡上順序移動
4. 第四部分為網絡包的匹配原則
tos 根據服務類型進行包過濾,為一個十六進制或者十進制的整型數來表達
ttl 根據包的存活值time-to-live進行匹配,該值存放在數據包頭上
proto 根據指定的協議來匹配,可以使用任何在/etc/protocols文件中命名的協
議,比如tcp/udp用來匹配TCP或者UDP數據包
from/to/all/any 匹配以下任何一個或者全部數據包:源IP地址、目標IP地址
以及端口號
with 匹配與指定屬性相關聯的數據包,如果插入not或者no,是為了只
有選項沒有表達情況才匹配
flags 用於TCP數據包,基於TCP 標志位被設置的情況
icmp-type 根據ICMP類型進行過濾
keep keep-options 檢測被保留的數據包的相關信息,keep-optons 包含在state選項
中才有效
head number 為過濾規則創建一個新的組,用number數字來標注
group number 增加一規則用組數number來替代缺省的組
配置文件的編寫,以及規則示例後面章節將加以詳細介紹。
Solaris IP Filter網絡地址轉換NAT特征介紹
網絡地址轉換NAT是一組映射規則的設置,它擔負著將源IP地址和目標IP地址映射成其他的IP地址或者INTERNET網絡地址。這些規則修改數據包裡的源IP地址和目標IP地址,使得這些數據包能夠發送到正確的地址上去。NAT也可以將數據包從一個端口發送到另一個端口上。
可以使用ipnat命令來維護制定NAT的列表,也可以使用配置文件來維護和制定此列表,這些列表都可以寫在ipnat.conf文件裡面。跟IP Filter包過濾配置文件一樣,如果需要在boot的時候讀取調用的話,就將ipnat.conf文件放置在/etc/ipf目錄下,如果不需要這樣,就可以放在任意指定的目錄中,使用命令讀取。
配置NAT列表
按以下的語法進行編制:
command interface-name parameters
1. 每個規則必須以以下關鍵字開始
map 一個IP地址或者網絡映射到另一個IP地址或者網絡
rdr 從一個IP地址和端口的配對重定向到另一個IP地址和端口配對
bimap 在外部IP地址和內部IP地址之間建立一個雙向的NAT
map-block 建立靜態IP地址翻譯
2. 第二部就是網卡的名字
3. 第三部是以下一些參數
ipmask 指明網絡掩碼
dstipmask 指明ipmask翻譯到網絡的地址
mapport 指定TCP,udp,或者TCP/UDP端口,或者一個端口號范圍
Solaris IP Filter IP地址池特征介紹
IP地址池創建了一個參考標准,用來命名一個地址/端口配對組,這樣帶來的好處就是大大減小了用規則來匹配IP的時間,提高了處理效率。
IP地址池配置規則放置在ippool.conf文件中,和前面的FILTER和NAT一樣,如果需要在引導系統就load進kernel的話,就將該文件放在/etc/ipf/目錄下。
配置IP地址池
配置IP地址池可以使用以下語法:
table role = role-name type = storage-format number = reference-number
table 為多個地址定義了一個參考表
role 指定這個池在Solaris IP Filter中的角色
type 指定池的存儲格式
number 指定一個參考數被過濾過濾規則使用
使用pfil STREAMS模塊激活IP Filter
激活Solaris IP Filter必須使用到pfil STREAMS模塊,Solaris IP Filter不提供自動機制來為每個接口(比如網卡)調用模塊,其替代方法就是pfil STRAMS模塊使用SMF svc:/network/pfil機制來管理。為網卡激活網絡包過濾功能,需要為網卡配置pfil.ap配置文件並激活svc:/network/pfil,這樣pfil STRAMS模塊就能為每個網卡服務了。enable 該模塊,必須用以下兩種方法來實現,一個是reboot系統,另外一個就是將所涉及的網卡 unplumb,在plumb起來,手動配置網口。
Solaris IP Filter配置指南
1. Enable IP Filter
Solaris IP Filter軟件在solaris 10版本及以後版本已經集成,缺省情況下是不啟用這個服務的,以下為打開該服務的步驟:
a. 使用IP Filter角色用戶登陸系統或者直接使用root用戶
b. 創建Filter規則配置文件/etc/ipf/ipf.conf
c. Enable系統的Filter功能svcadm enable network/ipfilter
以下步驟是完成指定網卡設置的Filter功能
a. 創建關於網卡的文件pfil.ap
這個文件包含了需要包過濾的網卡,只要寫入該網卡的名字即可
例如:bge -1 0 pfil
b. 重啟進程以讀取該文件內容
scvadm restart network/pfil
c. 激活對網卡包過濾的規則策略的另種方法
l # sync;sync;sync; init 6系統
l # ifconfig bge0 unplumb;
# ifconfig bge0 plumb 192.168.0.199/24 up
手工停啟用網卡,配置網絡IP等
2. Re-Enable IP filter
修改了配置文件後必須是的進程重新讀取文件內容,才能使得新修訂的包過濾規則生效:
#ipf –D停止Filter
#ipf –E 啟用Filter
#ipf –f /etc/ipf/ipf.conf重新讀取ipf.conf文件內容
Solaris IP Filter配置文件內容示例
以下內容為配置內容詳解,主要為制定一些包過濾規則策略提供參考:
1. 缺省情況下記錄所有的進出網卡nxge0的數據包
pass in log on nxge0 all
pass out log on nxge0 all
2. 阻止,但是不記錄進入其他保留地址的數據包
block in quick on nxgel0 from 10.0.0.0/8 to any
block in quick on nxgel0 from 172.16.0.0/12 to any
其中quick選項,在讀取配置文件時,只要數據包匹配了該行規則,就不再讀取後續的規則行
3. 阻止並記錄不可信任內部IP的所有數據包,192.168.100.100/32為運行IP filter的機器
block in log quick from 192.168.0.15 to 192.168.100.100/32
4. 阻止並記錄X11(port 600)協議所有數據包,以及RPC和portmapper(port 111),192.168.100.100/32為運行IP filter的機器
block in log quick on nxge0 proto tcp from any to 192.168.100.100/32 port = 6000 keep state
block in log quick on nxge0 proto tcp/udp from any to192.168.100.100/32 port = 111 keep state
5. 靈活運用quick示例
pass in quick on nxgel0 from 192.168.0.101/32 to any
pass out quick on nxgel0 from 192.168.0.101/32 to any
pass in quick on nxgel0 from 192.168.0.200/32 to any
pass out quick on nxgel0 from 192.168.0.200/32 to any
block in quick on nxgel0 from 192.168.0.0/24 to any
block out quick on nxgel0 from 192.168.0.0/24 to any
該例子阻止了192.168.0.0網段所有進出的數據包,但是該網段192.168.0.101和192.168.0.200兩台主機所有的數據包還是能夠正常發送和接受的。這是quick靈活運用的例子,quick表示在規則被匹配後,後續的規則不再讀取,這樣就能屏蔽掉後面的包含該規則的其他行。