gtxyzz

IP Filter:小巧的UNIX数据包过滤器

gtxyzz 安全防护 2023-01-10 343浏览 0

IP Filter是一款软件包,可以实现网络地址转换(network address translation)(NAT)或者防火墙服务的功能。它可以作为UNIX的一个核心模块,也可以不嵌入核心,强烈推荐将其作为UNIX的核心模块。安装和为系统文件打补丁要使用脚本。IP Filter内置于FreeBSD、NetBSD和Solaris中。OpenBSD可以使用Openbsd PF,Linux用户可以使用Netfilter。

下载链接:http://down.51cto.com/data/160078

>>去网络安全工具百宝箱看看其它安全工具

安装步骤:本文安装版本:3.4.17

将下载的IP-Filter的源码文件ip-fil3.4.17.tar.gz放到/tmp目录下,执行

gzip-dip-fil3.4.17.tar.gz 
tar–xvfip-fil3.4.17.tar 
cdip_fil3.4.17 
makesunos5

对下载的源码包进行编译。当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被添加到任何一条规则中,可以加快该规则的匹配速度。#p#

IP-Filter防火墙的基本规则策略配置:

基于IP地址的基本过滤方式:

blockinquickfrom192.168.0.0/24toany 
passinall

应用此规则将阻止来自于192.168.0.0网段的所有包的进入,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。

基于IP地址和防火墙接口的基本过滤方式:

blockinquickonhme0from192.168.0.0/24toany 
blockinquickonhme0from172.16.0.0/16toany 
passinall

应用此规则将阻止通过hme0口来自于192.168.0.0和172.16.0.0网段的所有包的进入,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。

使用“out”关键字对出包进行过滤:

passoutquickonhme0from192.168.0.0/24toany 
blockoutquickonhme0fromanytoany

应用此规则将使所有从192.168.0.0网段来的包通过防火墙出去,但是所有从其他网段来的包将被阻断在防火墙内,不允许出去。

使用“log”关键字对包的过滤情况进行记录:

blockinquickonhme0from192.168.0.0/24toany 
blockinlogquickonhme0from172.16.0.0/16toany 
passinall

应用此规则后将阻止通过hme0口来自于192.168.0.0和172.16.0.0网段的所有包的进入,同时对172.16.0.0网段的所有包的过滤情况进行记录,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。

基于IP地址和防火墙接口的完全双向过滤方式:

blockoutquickonhme0fromanyto192.168.0.0/24 
blockoutquickonhme0fromanyto172.16.0.0/16 
blockinquickonhme0from192.168.0.0/24toany 
blockinquickonhme0from172.16.0.0/16toany 
passinall

应用此规则后将阻止通过hme0口来自于192.168.0.0和172.16.0.0网段的所有包的进入和外出,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。#p#

使用“proto”关键字来控制一些需特别指定的协议:

blockinlogquickonhme0protoicmpfromanyto192.168.0.40/32

应用此规则后阻止任何ping到192.168.0.40的icmp包。

过滤ICMP包使用“icmp-type”关键字,合并规则集。

passinquickonhme0protoicmpfromanyto192.168.0.0/24icmp-type0 
passinquickonhme0protoicmpfromanyto192.168.0.0/24icmp-type11 
blockinlogquickonhme0protoicmpfromanytoany

应用此规则后将只允许ICMP协议的类型0和11(type0&type11)的包通过hme0口进入到防火墙内,同时阻止任何想通过hme0口进入的ICMP协议,并将匹配此规则的包记入日志中。

使用“port”关键字对TCP和UDP的端口进行过滤:

blockinlogquickonhme0prototcpfromanyto192.168.0.0/24port=513
blockinlogquickonhme0prototcpfromanyto192.168.0.0/24port=8080
blockinlogquickonhme0prototcpfromanyto192.168.0.0/24port=23
passinall

应用此规则后将阻止从192.168.0.0网段通过8080和23端口对防火墙内的数据通信,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。

IP-Filter防火墙的高级规则策略配置:

使用“keep state”关键字建立默许规则

blockinquickonhme0all 
passoutquickonhme0prototcpfrom20.20.20.1/32toanykeepstate

应用此规则将首先阻止从hme0口进入的数据包,通过使用规则组(Rule Groups)来增强防火墙的性能

可以通过增加更多更复杂的规则来扩展防火墙的性能,以下的示例将会修改接口名称和网络号,假设此防火墙有三个接口,分别为xl0、xl1、xl2。#p#

xl0连接的外网20.20.20.0/26;

xl1连接的为DMZ区20.20.20.0/26;

xl2连接的为受保护网段20.20.20.128/25。

应用于此防火墙的规则如下:

blockinquickonxl0allhead1 
blockinquickonxl0from192.168.0.0/16toanygroup1 
blockinquickonxl0from172.16.0.0/12toanygroup1 
blockinquickonxl0from10.0.0.0/8toanygroup1 
blockinquickonxl0from127.0.0.0/8toanygroup1 
blockinquickonxl0from0.0.0.0/8toanygroup1 
blockinquickonxl0from169.254.0.0/16toanygroup1 
blockinquickonxl0from192.0.2.0/24toanygroup1 
blockinquickonxl0from204.152.64.0/23toanygroup1 
blockinquickonxl0from224.0.0.0/3toanygroup1 
blockinlogquickonxl0from20.20.20.0/24toanygroup1 
blockinlogquickonxl0fromanyto20.20.20.0/32group1 
blockinlogquickonxl0fromanyto20.20.20.63/32group1 
blockinlogquickonxl0fromanyto20.20.20.64/32group1 
blockinlogquickonxl0fromanyto20.20.20.127/32group1 
blockinlogquickonxl0fromanyto20.20.20.128/32group1 
blockinlogquickonxl0fromanyto20.20.20.255/32group1 
passinonxl0allgroup1 
passoutonxl0all 
blockoutquickonxl1allhead10 
passoutquickonxl1prototcpfromanyto20.20.20.64/26port=80flagsSkeepstategroup10 
passoutquickonxl1prototcpfromanyto20.20.20.64/26port=21flagsSkeepstategroup10 
passoutquickonxl1prototcpfromanyto20.20.20.64/26port=20flagsSkeepstategroup10 
passoutquickonxl1prototcpfromanyto20.20.20.65/32port=53flagsSkeepstategroup10 
passoutquickonxl1protoudpfromanyto20.20.20.65/32port=53keepstategroup10 
passoutquickonxl1prototcpfromanyto20.20.20.66/32port=53flagsSkeepstate 
passoutquickonxl1protoudpfromanyto20.20.20.66/32port=53keepstategroup10 
passinquickonxl1prototcp/udpfrom20.20.20.64/26toanykeepstate 
blockoutonxl2all 
passinquickonxl2prototcp/udpfrom20.20.20.128/25toanykeepstate

应用此规则之后会使防火墙完成如下的功能:

在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网段的机器对内网进行访问,同时阻止所有其他网段的机器对内网的访问。#p#

关于NAT在IP-Filter上的应用

首先需要打开Solaris的ip_forwarding开关,通过输入命令:

#ndd-get/dev/tcpip_forwarding

可以查询ip_forwarding是否处于打开的状态。如果为0,则表示ip_forwarding处于关闭状态,可以输入:

#ndd-set/dev/tcpip_forwarding1

来打开它。

以下为NAT的规则示例:

maphme0192.168.100.0/24->0/32proxyportftpftp/tcp 
maphme0192.168.100.0/24->0/32portmaptcp/udp10000:40000 
maphme0192.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

#p#

对IP-Filter的监视和调试:

ipfstat工具的属性及使用:

ipfstat会显示你防火墙所过滤的数据的列表,诸如:有多少包通过防火墙的过滤、有多少包被阻塞、是否启用了日志功能等等。下面是ipfstat的运行后所输出的信息:

#ipfstat 
inputpackets:blocked99286passed1255609nomatch14686counted0 
outputpackets:blocked4200passed1284345nomatch14687counted0 
inputpacketslogged:blocked99286passed0 
outputpacketslogged:blocked0passed0 
packetslogged:input0output0 
logfailures:input3898output0 
fragmentstate(in):kept0lost0 
fragmentstate(out):kept0lost0 
packetstate(in):kept169364lost0 
packetstate(out):kept431395lost0 
ICMPreplies:0TCPRSTssent:0 
Resultcachehits(in):1215208(out):1098963 
INPullupssucceeded:2failed:0 
OUTPullupssucceeded:0failed:0 
Fastroutesuccesses:0failures:0 
TCPcksumfails(in):0(out):0 
Packetlogflagsset:(0) 
none

可以使用-I和-o参数来显示目前所装载的输入和输出规则。

Ipmon工具的属性及应用:

Ipmon是一个收集系统快照的一个工具,ipmon可以直接观看通过规则中的“log”关键字所生成的包的日志。此工具既可以运行于前台又可以以日志deamon的方式运行可以使用下面的命令启动ipmon:

#ipmon-oS 
01/08/199915:58:57.836053STATE:NEW100.100.100.1,53->20.20.20.15,53PRudp 
01/08/199915:58:58.030815STATE:NEW20.20.20.15,123->128.167.1.69,123PRudp 
01/08/199915:59:18.032174STATE:NEW20.20.20.15,123->128.173.14.71,123PRudp 
01/08/199915:59:24.570107STATE:EXPIRE100.100.100.1,53->20.20.20.15,53PRudpPkts4Bytes356 
01/08/199916:03:51.754867STATE:NEW20.20.20.13,1019->100.100.100.10,22PRtcp 
01/08/199916:04:03.070127STATE:EXPIRE20.20.20.13,1019->100.100.100.10,22PRtcpPkts63Bytes4604

对Solaris内核参数的一些调整:

Ip转发部分:

#ndd-set/dev/ipip_forwarding1

端口调整部分:

#ndd-set/dev/tcptcp_smallest_anon_port25000 
#ndd-set/dev/tcptcp_largest_anon_port65535 

其它一些有用的参数:

#ndd-set/dev/ipip_forward_directed_broadcasts0 
#ndd-set/dev/ipip_forward_src_routed0 
#ndd-set/dev/ipip_respond_to_echo_broadcast0

继续浏览有关 安全 的文章
发表评论