1. 程式人生 > >Solaris 的防火牆ipfilter配置

Solaris 的防火牆ipfilter配置

[email protected] 20080509
# svcs -a |grep network |egrep "pfil|ipf"
disable         4:36:25 svc:/network/pfil:default
online         23:41:33 svc:/network/ipfilter:default
(檢視IP Filter服務是否啟動)

# ifconfig -a inet
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
pcn0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
        inet 10.4.128.226 netmask ffffff00 broadcast 10.4.128.25
(檢視網絡卡裝置名)

#vi /etc/ipf/pfil.ap
.......
#dnet   -1      0       pfil
#pcelx  -1      0       pfil
#spwr   -1      0       pfil
pcn     -1      0       pfil
.......
(將網絡卡裝置名前註釋去掉)

#vi /etc/ipf/ipf.conf
block in log quick proto tcp from 10.4.128.0/24 to any port = ftp
(編輯防火牆規則)

#svcadm enable svc:/network/ipfilter:default
(啟動服務)

#svcs -a |grep -i ipf
(再次檢視服務是否啟動)

#autopush -f /etc/ipf/pfil.ap
(生效pfil.ap配置,此步驟只需要做一次,以後更改防火牆規則就不需要再做)

#ifconfig pcn0 down unplumb
(禁用網絡卡)

#ifconfig pcn0 plumb 10.4.128.226 netmask 255.255.255.0 broadcast 10.4.128.255 up
#ifconfig pcn0 plumb 192.168.0.6 netmask 255.255.255.0 broadcast 192.168.0.255 up
(啟用網絡卡)

這時候防火牆已經生效,大家可以試著FTP配置好的伺服器,若以後需要更改規則請參照以下步驟:
#vi /etc/ipf/ipf.conf
block in log proto tcp from 10.4.128.0/24 to any port = ftp
block in log proto tcp from 10.4.128.0/24 to any port = telnet

#ipf -Fa -f /etc/ipf/ipf.conf
#ipfstat -io
#ipfstat
#ipmon

更改完以後可以再次試著FTP。

大家可能比較迷茫的就是規則方面了,其實它的規則很好懂,配置起來也很簡單:
禁止就是block
通過就是pass
進來就是in
出去就是out

那麼配合起來使用就行了,再加上可以指定在哪個網絡卡上使用,也就是再加個on pcn0,另外還有一個關鍵字就是all,
這是匹配(禁止或者通過)所有的包,組合起來的例子就是:
block in on pcn0 all
(禁止所有的包進入)

還可以針對網段、IP以及埠的配置,就是在包的後面加如from .... to .... port = ..就可以,等號的地方可以改
成其他運算子,如<、>
網段:block in log proto tcp from 10.4.128.0/24 to any port = ftp
地址:block in log proto tcp from 10.4.128.163/32 to any port = ftp

對於協議的控制,它一樣可以做的很好。協議的關鍵字有4種(icmp、tcp、udp、tcp/udp),啟用對協議的控制就是在
協議的關鍵字前加proto關鍵字如:
block in on pcn0 proto icmp from any to any

在使用ICMP協議控制的時候,可以使用icmp-type關鍵字來指定ICMP協議的型別,型別的值有4種:
ICMP                     Type               Value Keyword
Echo reply                 0                  echorep
Echo request               8                  echo
Router advertisement       9                 routerad
Router solicitation       10                 routersol

例如:
block out quick proto icmp from any to 10.4.128.163/32 icmp-type 0
(禁止對PING的響應)

在這裡要解釋一下quick的用法,這是個很好用的關鍵字,假如你的防火牆有100條規則,最有用的可能只有前10條,那麼quick是非常有必要的。
pass in log quick proto tcp from 10.4.128.163/32 to any port = telnet
block in log all from any to any
假如你希望禁止伺服器的所有包而只希望一個IP只能夠telnet的話,那麼就可以加上quick關鍵字,quick的作用是當包符合這條規則以後,
就不再向下進行遍歷了。如果沒有quick的情況下,每一個包都要遍歷整個規則表,這樣的開銷是十分大的,但是如果濫用quick也是不明智的,
因為它畢竟不會產生日誌。