分类:
2008-04-05 20:10:57
IPFilter是目前比较流行的包过滤防火墙,它拥有多种平台的版本,安装配置相对比较简单。当前的版本是
一、 学会编写IPFfilter 规则:
通过使用IPFfilter系统提供的特殊命令建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:
action [in|out] option keyword, keyword...
参数说明:
1. 每个规则都以操作开头。如果包与规则匹配,则 Solaris IP 过滤器将操作应用于该包。以下列表包括应用于包的常用操作。
block :阻止包通过过滤器。
pass :允许包通过过滤器。
log :记录包但不确定是阻止包还是传递包。使用 ipmon 命令可查看日志。
count :将包包括在过滤器统计信息中。使用 ipfstat 命令可查看统计信息。
skip number :使过滤器跳过 number 个过滤规则。
auth :请求由验证包信息的用户程序执行包验证。该程序会确定是传递包还是阻止包。
preauth :请求过滤器查看预先验证的列表以确定如何处理包。
2. 操作后面的下一个单词必须是 in 或 out。您的选择将确定是将包过滤规则应用于传入包还是应用于传出包。
3. 接下来,可以从选项列表中进行选择。如果使用多个选项,则这些选项必须采用此处显示的顺序。
log :如果规则是最后一个匹配规则,则记录包。使用 ipmon 命令可查看日志。
quick :如果存在匹配的包,则执行包含 quick 选项的规则。所有进一步的规则检查都将停止。
on interface-name :仅当包移入或移出指定接口时才应用规则。
dup-to interface-name:复制包并将 interface-name 上的副本向外发送到选择指定的 IP 地址。
to interface-name :将包移动到 interface-name 上的外发队列。
4. 指定选项后,可以从确定包是否与规则匹配的各关键字中进行选择。必须按此处显示的顺序使用以下关键字。
tos :基于表示为十六进制或十进制整数的服务类型值,对包进行过滤。
ttl :基于包的生存时间值与包匹配。在包中的生存时间值指明了包在被废弃之前可在中存在的时间长度。
proto :与特定协议匹配。可以使用在 /etc/protocols 文件中指定的任何协议名称,或者使用十进制数来表示协议。关键字 tcp/udp 可以用于与 TCP 包或 UDP 包匹配。
from/to/all/any :与以下任一项或所有项匹配:源 IP 地址、目标 IP 地址和端口号。all 关键字用于接受来自所有源和发往所有目标的包。
with :与和包关联的指定属性匹配。在关键字前面插入 not 或 no 一词,以便仅当选项不存在时才与包匹配。
flags :供 TCP 用来基于已设置的 TCP 标志进行过滤。
icmp-type :根据 ICMP 类型进行过滤。仅当 proto 选项设置为 icmp 时才使用此关键字;如果使用 flags 选项,则不使用此关键字。
keep keep-options :确定为包保留的信息。可用的 keep-options 包括 state 选项和 frags 选项。state 选项会保留有关会话的信息,并可以保留在 TCP、UDP 和 ICMP 包中。frags 选项可保留有关包片段的信息,并将该信息应用于后续片段。keep-options 允许匹配包通过,而不会查询访问控制列表。
head number :为过滤规则创建一个新组,该组由数字 number 表示。
group number :将规则添加到编号为 number 的组而不是缺省组。如果未指定其他组,则将所有过滤规则放置在组 0 中。
二、 动手编写第一个规则
1.查看IPFilter包过滤防火墙运行情况:
Solaris 10 上IPFilter 的启动和关闭是由 SMF 管理的,在Solaris 10 上工作的进程大多都交由SMF 管理,这和先前版本的Solaris 有很大的区别。Solaris IP 过滤防火墙随 Solaris 操作系统一起安装。但是,缺省情况下不启用包过滤。使用以下过程可以激活 Solaris IP 过滤器。使用命令“svcs -a |grep network |egrep "pfil|ipf"”查看。IP Filter 有两个服务ipfilter 和pfil,默认情况下ipfilter 是关闭的,而pfil 是打开的。
2.查看接口
lo0: flags=2001000849
inet 127.0.0.1 netmask ff000000
pcn0: flags=1000843
inet
3.修改/etc/ipf/pfil.ap 文件
此文件包含主机上接口卡 (network interface card, NIC) 的名称。缺省情况下,这些名称已被注释掉。对传输要过滤的网络流量的设备名称取消注释。
vi /etc/ipf/pfil.ap
"/etc/ipf/pfil.ap" 23 ÐУ¬371 ×Ö•û
# IP Filter pfil autopush setup
# See the autopush(
# Format of the entries in this file is:
#major minor lastminor modules
#iprb -1 0 pfil
#elxl -1 0 pfil
#e
#bge -1 0 pfil
#nf -1 0 pfil
#fa -1 0 pfil
#ci -1 0 pfil
#el -1 0 pfil
#ipdptp -1 0 pfil
#lane -1 0 pfil
pcn -1 0 pfil
#pcelx -1 0 pfil
#spwr -1 0 pfil
4. 编辑防火墙规则
使对ping没有反应 ,防止你的对ping请求做出反应,对于网络很有好处,因为没人能够ping你的服务器并得到任何反应。TCP/IP协议本身有很多的弱点,黑客可以利用一些技术,把传输正常数据包的通道用来偷偷地传送数据。使你的系统对ping请求没有反应可以把这个危险减到最小。修改文件添加一行:
block out quick proto icmp from any to
说明:IP 过滤协议的关键字有4种(icmp、tcp、udp、tcp/udp),启用对协议的控制就是在协议的关键字前加proto关键字。ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。我们平时最常用的ICMP应用就是通常被称为Ping的操作。在使用ICMP协议控制的时候,可以使用icmp-type关键字来指定ICMP协议的类型, 类型的值以下几种:
类型 名称 备注
0 回波应答(echo replay) 不允许ping命令回应
8 回波(echo) 允许ping命令回应
9 路由器公告(router dvertisement)
10 路由器选择(router selection)
所以把icmp-type设置为 0即可。
5. 启动服务
使用命令:svcadm enable svc:/network/ipfilter:default
6.使 pfil.ap配置文件生效
autopush -f /etc/ipf/pfil.ap
说明:此步骤只需要做一次,以后更改防火墙规则就不需要再做。
7. 重新引导计算机,使用命令:“reboot”。
8.使用命令再次查看IPFilter包过滤防火墙运行情况
# svcs –a|grep network|egrep -e “pfil|ipf ”
以上命令可以看到IP Filter 有两个服务ipfilter 和pfil都已经打开。
9.从客户端计算机测试
下面从一台和sorlaris连接的windows 计算机使用ping 命令检测,结果是无法ping通的。
三、 IPFilter包过滤防火墙规则编写技巧
在创建IPFilter包过滤防火墙规则的第一步是与用户咨询确定一个可接受的服务列表。许多公司会有—个可接受的使用策略,该策略会控制哪些端口应当可用和应当赋予用户启动的服务的权限。在你确定了开放的流入端口和外出的端口需求之后,最好是编写一条规则:首先拒绝全部数据包,然后编写另外的规则:允许使用的端口。你还必须设置两个方向启用允许的服务。例如.用户同时接收和发送电子邮件通常是必要的,于是你需要对sendmail(端口25)包括一条入站和出站规则。
1.技巧一
要阻止从 IP 地址 192.168.0.0/16 传入的流量,需要在规则列表中包括以下规则:
block in quick from 192.168.0.0/16 to any
下面的例子阻止来自b类178.222.0.0的任何数据包:
block in quick from 178.222.0.0/16 to any
2.技巧二
通俗来说就是:禁止是block ,通过是pass ,进入流量是in,出去流量是out 。然后配合起来使用就行了,再加上可以指定在哪个上使用,也就是再加个on pcn0,另外还有一个关键字就是all,这是匹配(禁止或者通过)所有的包。基于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网段的所有包的进入,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
3.技巧三
基于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网段的所有包的进入和外出,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
4.技巧四
使用“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端口对防火墙内的数据通信,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
四、 禁用 Solaris IP 过滤防火墙
有些情况可能希望取消激活或禁用包过滤,例如要进行测试另外在认为系统问题是由 Solaris IP 过滤器所导致时,对这些问题进行疑难解答。首先成为管理员权限。
禁用包过滤,并允许所有包传入的命令:
# ipf –D
取消激活 Solaris IP 过滤器规则方法:
从内核中删除活动规则集。
# ipf -Fa
此命令取消激活所有的包过滤规则。
删除传入包的过滤规则。
# ipf -Fi
此命令取消激活传入包的包过滤规则。
删除传出包的过滤规则。
# ipf -Fo
此命令取消激活传出包的包过滤规则。
五、 查看 Solaris IP 过滤器的日志文件
使用命令如下:
ipmon –o -a [S|N|I] filename
参数说明:
S :显示状态日志文件。
N:显示 NAT 日志文件。
I:显示常规 IP 日志文件。
-a:显示所有的状态日志文件、NAT 日志文件和常规日志文件。
清除包日志文件使用命令:
# ipmon –F
六、 Solaris IP 过滤防火墙的监控和管理
1.查看包过滤规则集
启用 Solaris IP 过滤器后,活动和非活动的包过滤规则集都可以驻留在内核中。活动规则集确定正在对传入包和传出包执行的过滤。非活动规则集也规则,但不会使用这些规则,除非使非活动规则集成为活动规则集。可以管理、查看和修改活动和非活动的包过滤规则集。
查看装入到内核中的活动包过滤规则集,使用命令:
# ipfstat –io
如果希望查看非活动的包过滤规则集。可以同使用命令:
# ipfstat -I –io
2. 激活不同的包过滤规则集
以下示例显示如何将一个包过滤规则集替换为另一个包过滤规则集。
# ipf -Fa -f filename
活动规则集将从内核中删除。filename 文件中的规则将成为活动规则集。
3. 将规则附加到活动的包过滤规则集
以下示例显示如何从命令行将规则添加到活动的包过滤规则集。
# ipfstat -io
empty list for ipfilter(out)
block in log quick from
# echo "block in on dmfe1 proto tcp from 10.1.1.1/32 to any" | ipf -f -
# ipfstat -io
empty list for ipfilter(out)
block in log quick from 10.0.0.0/8 to any
block in on dmfe1 proto tcp from 10.1.1.1/32 to any
4.监控整个IP管理器防火墙查看状态表,使用没有参数的ipfstat命令即可。
另外可以使用命令:“ipfstat -s” 查看 Solaris IP 过滤器的状态统计,使用命令:“ipnat -s” 查看 Solaris IP 过滤器的NAT状态统计。表 2是 显示 Solaris IP 过滤器的统计信息 的列表,也是对以下操作的一个总结。
任务 说明
查看状态表 使用ipfstat查看状态表,以获取有关包过滤的信息
查看状态统计 使用ipfstat –s命令查看有关包状态信息的统计
查看nat统计 使用ipnat -s查看nat统计
查看地址池统计 使用ippool –s命令查看地址池统计
七、IPFilter包过滤防火墙不足之处
尽管IPFilter技术十分容易了解,并且对于在传输上设置具体的限制特别有用, —般而言,配置IPFilter防火墙存在一些缺点,因为防火墙配置涉及编写规则,常用规则语言的话法通常对于初学者(特别是Windows 初学者)难于理解,这样数据包过滤可能难于正确配置。当然如果您以前使用Freebsd 那么掌握IPFilter包过滤防火墙就非常简单了。
规则表很快会变得很大而且复杂,规则很难测试。随着表的增大和复杂性的增加,规则结构出现漏洞的可能性也会增加。这种防火墙最大的缺陷是它依赖一个单一的部件来保护系统。如果这个部件出现了问题,会使得网络大门敞开,而用户其至可能还不知道。在一般情况下,如果外部用户被允许访问内部主机,则它就可以访问内部网上的任何主机。包过滤防火墙只能阻止一种类型的IP欺骗,即外部主机伪装内部主机的IP,对于外部主机伪装外部主机的IP欺骗却不可能阻止,而且它不能防止DNS欺骗。
虽然,包过滤防火墙有如上所述的缺点,但是在管理良好的小规模网络上,它能够正常的发挥其作用。一般情况下,人们不单独使用包过滤防火墙,而是将它和其他设备(如堡垒主机等)联合使用。
附录:Solaris IP 过滤器配置文件示例
以下示例说明了在过滤配置中使用的包过滤规则。示例显示具有 elxl 接口的主机上的配置。
# pass and log everything by default
pass in log on elxl0 all
pass out log on elxl0 all
# block, but don't log, incoming packets from other reserved addresses
block in quick on elxl0 from
block in quick on elxl0 from 172.16.0.0/12 to any
# block and log untrusted internal IPs. 0/32 is notation that replaces
# address of the machine running Solaris IP Filter.
block in log quick from 192.168.1.15 to 0/32
block in log quick from 192.168.1.43 to 0/32
# block and log X11 (port 5555) and remote procedure call and portmapper (port 121) attempts
block in log quick on elxl0 proto tcp from any to 0/32 port = 5555 keep state
block in log quick on elxl0 proto tcp/udp from any to 0/32 port = 121 keep state
说明:此规则集以两个无限制规则开始,分别允许将任何内容传入和传出 elxl 接口。第二个规则集阻止从专用地址空间