在solaris10 Solaris 10 3/05 s10_74L2a X86 版本下
详见:
http://docs.oracle.com/cd/E19253-01/816-4554/gdwvu/index.html
######################################################################
1:填写策略
vi /etc/ipf/ipf.conf
#验证有效的conf:
#pass in log quick from any to any port = 22
block in log from any to any
pass out log on lo0 all
pass in log on lo0 all
pass in proto icmp from any to any icmp-type 8
pass in log proto tcp from 192.168.235.0/24 to any port = 22
2:允许ipfilter
svcadm enable svc:/network/ipfilter:default
3:修改配置后让策略生效:
svcadm restart svc:/network/ipfilter:default
ipf -Fa -f /etc/ipf/ipf.conf
######################################################################
##### 在Solaris 10 7/07 OS版本下可能不需要以下几步,待验证
##### http://docs.oracle.com/cd/E19253-01/816-4554/etmhi/index.html
######################################################################
#放开要使用的网卡
vi /etc/ipf/pfil.ap
svcadm restart network/pfil
reboot
######################################################################
查看IP Filter服务是否启动:
# svcs -a |grep network |egrep "pfil|ipf"
disable 4:36:25 svc:/network/pfil:default
online 23:41:33 svc:/network/ipfilter:default
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目录下。
通过使用包过滤规则集可以十分轻松设置防火墙功能,命令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表示在规则被匹配后,后续的规则不再读取,这样就能屏蔽掉后面的包含该规则的其他行。
================================================
# 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也是不明智的,
因为它毕竟不会产生日志。