|
摘要: IP-Filter是目前比較流行的防火牆軟件,它目前擁有多種平台的版本(包括:FreeBSD、NetBSD、Solaris、IRIX、HP-UX、Linux、OpenBSD等版本),並且功能強大,安裝配置相對比較簡單。可以用它來構建功能強大的軟件防火牆,下面就其的安裝以及一些典型的配置作一下說明。
IP-Filter 的安裝
IP-Filter 的下載地址:
ftp://coombs.anu.edu.au/pub/net/ip-filter/ip-fil3.4.17.tar.gz
最新版本號:
3.4.17
安裝步驟:
將下載的IP-Filter的源碼文件ip-fil3.4.17.tar.gz放到/tmp目錄下,執行
gzip -d ip-fil3.4.17.tar.gz
tar xvf ip-fil3.4.17.tar
cd ip_fil3.4.17
make sunos5
對下載的源碼包進行編譯。當 IP Filter編譯成功之,安裝過程使用的是solaris常用的打包的方式進行的,它會在/var/spool/pkg目錄下創建相應的package文件。
在安裝目錄下輸入make solaris來編譯所有需要的二進制文件,注意不能使用GNU make來編譯。
進入到安裝目錄的SunOS5目錄下,執行make package命令,此命令會在SunOS5/<arch>/root目錄下創建一個名為“ipf.pkg”的打包文件,同時自動啟動pkgadd進程,如果通過手動啟動打包進程則需鍵入:pkgadd -d ipf.pkg來進行。
安裝結束會將IP Filter安裝到/opt/ipf目錄下,同時在/etc/opt/ipf創建一個名為“ipf.conf”的過濾配置文件,初始時該文件為空的。
IP Filter的啟動方式是通過運行/etc/init.d/ipfboot來啟動的,執行ipfboot start啟動IP Filter。
建立IP Filter的配置文件,/opt/ipf/bin/mkfilters可以產生基本的配置文件。產生方法是通過執行下面的命令:
# /opt/ipf/bin/mkfilters > /etc/opt/ipf/ipf.conf。
每次添加或修改ipf.conf文件都需要重新啟動一遍ipfboot,來重新讀入配置文件,具體方法如下:/etc/init.d/ipfboot reload。
IP-Filter 的典型配置:
分為兩個部分進行介紹,第一部分是 IP-Filter防火牆的基本規則策略配置;第二部分為IP-Filter防火牆的高級規則策略配置。注意:以下所有的配置語句都可以添加到/etc/opt/ipf/ipf.conf文件中,但是需要重新啟動一遍ipfboot來使配置生效。
IP-Filter 對規則的處理是採用自頂向下的方式,在IP-Filter中如果關鍵字quick被添加到任何一條規則中,可以加快該規則的匹配速度。
IP-Filter 防火牆的基本規則策略配置:
基 IP地址的基本過濾方式:
block in quick from 192.168.0.0/24 to any
pass in all
應用此規則將阻止來自 192.168.0.0網段的所有包的進入,但是允許其他網段的包進入到防火牆,同時對出去的包不作任何限制。
基 IP地址和防火牆接口的基本過濾方式:
block in quick on hme0 from 192.168.0.0/24 to any
block in quick on hme0 from 172.16.0.0/16 to any
pass in all
應用此規則將阻止通過 hme0口來自192.168.0.0和172.16.0.0網段的所有包的進入,但是允許其他網段的包進入到防火牆,同時對出去的包不作任何限制。
使用“ out”關鍵字對出包進行過濾:
pass out quick on hme0 from 192.168.0.0/24 to any
block out quick on hme0 from any to any
應用此規則將使所有從 192.168.0.0網段來的包通過防火牆出去,但是所有從其他網段來的包將被阻斷在防火牆內,不允許出去。
使用“ log”關鍵字對包的過濾情況進行記錄:
block in quick on hme0 from 192.168.0.0/24 to any
block in log quick on hme0 from 172.16.0.0/16 to any
pass in all
應用此規則將阻止通過 hme0口來自192.168.0.0和172.16.0.0網段的所有包的進入,同時對172.16.0.0網段的所有包的過濾情況進行記錄,但是允許其他網段的包進入到防火牆,同時對出去的包不作任何限制。
基 IP地址和防火牆接口的完全雙向過濾方式:
block out quick on hme0 from any to 192.168.0.0/24
block out quick on hme0 from any to 172.16.0.0/16
block in quick on hme0 from 192.168.0.0/24 to any
block in quick on hme0 from 172.16.0.0/16 to any
pass in all
應用此規則將阻止通過 hme0口來自192.168.0.0和172.16.0.0網段的所有包的進入和外出,但是允許其他網段的包進入到防火牆,同時對出去的包不作任何限制。
使用“ proto”關鍵字來控制一些需特別指定的協議:
block in log quick on hme0 proto icmp from any to 192.168.0.40/32
應用此規則阻止任何 ping到192.168.0.40的icmp包。
過濾 ICMP包使用“icmp-type”關鍵字,合並規則集。
pass in quick on hme0 proto icmp from any to 192.168.0.0/24 icmp-type 0
pass in quick on hme0 proto icmp from any to 192.168.0.0/24 icmp-type 11
block in log quick on hme0 proto icmp from any to any
應用此規則將只允許 ICMP協議的類型0和11(type0&type11)的包通過hme0口進入到防火牆內,同時阻止任何想通過hme0口進入的ICMP協議,並將匹配此規則的包記入日志中。
使用“ port”關鍵字對TCP和UDP的端口進行過濾:
block in log quick on hme0 proto tcp from any to 192.168.0.0/24 port = 513
block in log quick on hme0 proto tcp from any to 192.168.0.0/24 port = 8080
block in log quick on hme0 proto tcp from any to 192.168.0.0/24 port = 23
pass in all
應用此規則將阻止從 192.168.0.0網段通過8080和23端口對防火牆內的數據通信,但是允許其他網段的包進入到防火牆,同時對出去的包不作任何限制。
IP-Filter 防火牆的高級規則策略配置:
使用“ keep state”關鍵字建立默許規則
block in quick on hme0 all
pass out quick on hme0 proto tcp from 20.20.20.1/32 to any keep state
應用此規則將首先阻止從 hme0口進入的數據包,
通過使用規則組( Rule Groups)來增強防火牆的性能
可以通過增加更多更復雜的規則來擴展防火牆的性能,以下的示例將會修改接口名稱和網絡號,假設此防火牆有三個接口,分別為 xl0、xl1、xl2。
xl0 連接的外網20.20.20.0/26;
xl1 連接的為DMZ區20.20.20.0/26;
xl2 連接的為受保護網段20.20.20.128/25。
應用此防火牆的規則如下:
block in quick on xl0 all head 1
block in quick on xl0 from 192.168.0.0/16 to any group 1
block in quick on xl0 from 172.16.0.0/12 to any group 1
block in quick on xl0 from 10.0.0.0/8 to any group 1
block in quick on xl0 from 127.0.0.0/8 to any group 1
block in quick on xl0 from 0.0.0.0/8 to any group 1
block in quick on xl0 from 169.254.0.0/16 to any group 1
block in quick on xl0 from 192.0.2.0/24 to any group 1
block in quick on xl0 from 204.152.64.0/23 to any group 1
block in quick on xl0 from 224.0.0.0/3 to any group 1
block in log quick on xl0 from 20.20.20.0/24 to any group 1
block in log quick on xl0 from any to 20.20.20.0/32 group 1
block in log quick on xl0 from any to 20.20.20.63/32 group 1
block in log quick on xl0 from any to 20.20.20.64/32 group 1
block in log quick on xl0 from any to 20.20.20.127/32 group 1
block in log quick on xl0 from any to 20.20.20.128/32 group 1
block in log quick on xl0 from any to 20.20.20.255/32 group 1
pass in on xl0 all group 1
pass out on xl0 all
block out quick on xl1 all head 10
pass out quick on xl1 proto tcp from any to 20.20.20.64/26 port = 80 flags S keep state group 10
pass out quick on xl1 proto tcp from any to 20.20.20.64/26 port = 21 flags S keep state group 10
pass out quick on xl1 proto tcp from any to 20.20.20.64/26 port = 20 flags S keep state group 10
pass out quick on xl1 proto tcp from any to 20.20.20.65/32 port = 53 flags S keep state group 10
pass out quick on xl1 proto udp from any to 20.20.20.65/32 port = 53 keep state group 10
pass out quick on xl1 proto tcp from any to 20.20.20.66/32 port = 53 flags S keep state
pass out quick on xl1 proto udp from any to 20.20.20.66/32 port = 53 keep state group 10
pass in quick on xl1 proto tcp/udp from 20.20.20.64/26 to any keep state
block out on xl2 all
pass in quick on xl2 proto tcp/udp from 20.20.20.128/25 to any keep state
應用此規則之會使防火牆完成如下的功能:
- 在
xl0口上阻止從192.168.0.0/16、172.16.0.0/12、10.0.0.0/8、127.0.0.0/8、0.0.0.0/8、169.254.0.0/16 、192.0.2.0/24、204.152.64.0/231、224.0.0.0/3、20.20.20.0/24、20.20.20.0/32、20.20.20.63/32 、20.20.20.64/32 、20.20.20.127/32、20.20.20.128/32、20.20.20.255/32、等網段的數據包的進入,同時此規則的編寫是通過將這些規則綁定成為一個組的方式來進行的。同時對所有從Xl0口通過的外出包不作限制。
在DMZ區的20.20.20.64/26網段內的機器允許其使用www及ftp服務,對IP地址為20.20.20.65/32機器允許其對外提供DNS服務。
對內網安全區則應用了更為嚴格的安全規則,只允許20.20.20.128/25網段的機器對內網進行訪問,同時阻止所有其他網段的機器對內網的訪問。
關 NAT在IP-Filter上的應用
首先需要打開 Solaris的ip_forwarding開關,通過輸入命令:
# ndd -get /dev/tcp ip_forwarding 可以查詢ip_forwarding是否處打開的狀態。如果為0,則表示ip_forwarding處關閉狀態,可以輸入:
# ndd -set /dev/tcp ip_forwarding 1來打開它。
以下為 NAT的規則示例:
map hme0 192.168.100.0/24 ->0/32 proxy port ftp ftp/tcp
map hme0 192.168.100.0/24 ->0/32 portmap tcp/udp 10000:40000
map hme0 192.168.100.0/24 ->0/32
應用以上規則可以實現如下功能:
- 第一條規則允許內網的所有主機通過
hme0口的FTP訪問Internet。
第二條規則映射了高端端口10000到40000,允許一些網絡服務通過這一段端口范圍進行訪問。
最一條規則映射了一些通用的TCP流量可以進出網絡。
對在 IP-Filter上應用NAT規則,可以使用ipnat命令進行啟動,此時NAT規則可以被存儲任何文件中,但是典型情況下規則文件還是被存儲/etc/ipnat.rules;
/usr/local/etc/ipnat.rules ;
/etc/opt/ipf/ipnat.rules ,中,可以使用-r參數將已經添加到規則集中的NAT規則去除掉。對NAT規則集的檢測通過-l參數執行。最簡便的裝載NAT規則的方法是:
# ipnat -CF -f /etc/ipnat.rules。
對 IP-Filter的監視和調試:
ipfstat 工具的屬性及使用:
ipfstat 會顯示你防火牆所過濾的數據的列表,諸如:有多少包通過防火牆的過濾、有多少包被阻塞、是否啟用了日志功能等等。下面是ipfstat的運行所輸出的信息:
# ipfstat
input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0
input packets logged: blocked 99286 passed 0
output packets logged: blocked 0 passed 0
packets logged: input 0 output 0
log failures: input 3898 output 0
fragment state(in): kept 0 lost 0
fragment state(out): kept 0 lost 0
packet state(in): kept 169364 lost 0
packet state(out): kept 431395 lost 0
ICMP replies: 0 TCP RSTs sent: 0
Result cache hits(in): 1215208 (out): 1098963
IN Pullups succeeded: 2 failed: 0
OUT Pullups succeeded: 0 failed: 0
Fastroute successes: 0 failures: 0
TCP cksum fails(in): 0 (out): 0
Packet log flags set: (0)
none
可以使用 -I和-o參數來顯示目前所裝載的輸入和輸出規則。
Ipmon 工具的屬性及應用:
Ipmon 是一個收集系統快照的一個工具,ipmon可以直接觀看通過規則中的“log”關鍵字所生成的包的日志。此工具既可以運行前台又可以以日志deamon的方式運行可以使用下面的命令啟動ipmon:
# ipmon -o S
01/08/1999 15:58:57.836053 STATE:NEW 100.100.100.1,53 -> 20.20.20.15,53 PR udp
01/08/1999 15:58:58.030815 STATE:NEW 20.20.20.15,123 -> 128.167.1.69,123 PR udp
01/08/1999 15:59:18.032174 STATE:NEW 20.20.20.15,123 -> 128.173.14.71,123 PR udp
01/08/1999 15:59:24.570107 STATE:EXPIRE 100.100.100.1,53 -> 20.20.20.15,53 PR udp Pkts 4 Bytes 356
01/08/1999 16:03:51.754867 STATE:NEW 20.20.20.13,1019 -> 100.100.100.10,22 PR tcp
01/08/1999 16:04:03.070127 STATE:EXPIRE 20.20.20.13,1019 -> 100.100.100.10,22 PR tcp Pkts 63 Bytes 4604
對 Solaris內核參數的一些調整:
Ip轉發部分:
# ndd -set /dev/ip ip_forwarding 1
端口調整部分:
# ndd -set /dev/tcp tcp_smallest_anon_port 25000
#ndd -set /dev/tcp tcp_largest_anon_port 65535
其它一些有用的參數:
# ndd -set /dev/ip ip_forward_directed_broadcasts 0
#ndd -set /dev/ip ip_forward_src_routed 0
#ndd -set /dev/ip ip_respond_to_echo_broadcast 0
(http://www.fanqiang.com)
進入【UNIX論壇】
|