为Solaris服务器配置款安全的防火墙.docx
《为Solaris服务器配置款安全的防火墙.docx》由会员分享,可在线阅读,更多相关《为Solaris服务器配置款安全的防火墙.docx(15页珍藏版)》请在冰豆网上搜索。
为Solaris服务器配置款安全的防火墙
为Solaris服务器配置款安全的防火墙
作者:
曹江华(原创)
连接网上的服务器系统,不管是什么情况都要明确一点:
网络是不安全的。
因此,虽然创建一个防火墙并不能保证系统100%安全,但却是绝对必要的。
传统意义上的防火墙技术分为三大类,“包过滤”(PacketFiltering)、“应用代理”(ApplicationProxy)和“状态检测”(StatefulInspection),无论一个防火墙的实现过程多么复杂,归根结底都是在这三种技术的基础上进行功能扩展的。
一、Solaris包过滤防火墙IPFilter简介
IPFilter是目前比较流行的包过滤防火墙软件,它目前拥有多种平台的版本,安装配置相对比较简单。
可以用它来构建功能强大的软件防火墙,下面就其的安装以及一些典型的配置作一下说明。
IPFfilter的作者是DarrenReed先生,他是一位致力于开源软件开发的高级程序员,目前工作于SUN公司。
IPFilter软件可以提供网络地址转换(NAT)或者防火墙服务。
简单的说就是一个软件的防火墙,并且这个软件是开源免费的。
当前的版本是4.1.15,目前支持FreeBSD、NetBSD、Solaris、AIX等
窗体顶端
窗体底端
平台。
IPFilter是它是一个在引导时配置的可加载到内核的模块。
这使得它十分安全,因为已不能由用户应用程序篡改。
我用Solaris10来作为实验的平台介绍一下IPFilter。
IPFilter过滤器会执行一系列步骤。
图1说明处理包的步骤,以及过滤如何与TCP/IP协议栈集成在一起。
图1服务器的处理数据包的步骤
数据包在Solaris内的处理顺序包括下列步骤:
1. 网络地址转换(NetworkAddressTranslation,NAT):
将专用IP地址转换为不同的公共地址,或者将多个专用地址的别名指定为单个公共地址。
当组织具有现有的网络并需要访问Internet时,通过NAT,该组织可解决IP地址用尽的问题。
2. IP记帐:
可以分别设置输入规则和输出规则,从而记录所通过的字节数。
每次与规则匹配时,都会将包的字节计数添加到该规则中,并允许收集层叠统计信息。
3. 片段高速缓存检查:
如果当前流量中的下一个包是片段,而且允许前一个包通过,则也将允许包片段通过,从而绕过状态表和规则检查。
4. 包状态检查:
如果规则中包括keepstate,则会自动传递或阻止指定会话中的所有包,具体取决于规则指明了pass还是block。
5.防火墙检查:
可以分别设置输入规则和输出规则,确定是否允许包通过SolarisIP过滤器传入内核的TCP/IP例程或者传出到网络上。
6. 组:
通过分组可以按树的形式编写规则集。
7. 功能:
功能是指要执行的操作。
可能的功能包括block、pass、literal和sendICMPresponse。
8. 快速路由:
快速路由指示SolarisIP过滤器不将包传入UNIXIP栈进行路由,从而导致TTL递减。
9.IP验证:
已验证的包仅通过防火墙循环一次来防止双重处理。
二、学会编写IPFfilter规则
典型的防火墙设置有两个网卡:
一个流入,一个流出。
IPFfilter读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。
通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。
通过使用IPFfilter系统提供的特殊命令建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。
关于添加、去除、编辑规则的命令,一般语法如下:
action[in|out]optionkeyword,keyword...
参数说明:
1. 每个规则都以操作开头。
如果包与规则匹配,则SolarisIP过滤器将操作应用于该包。
以下列表包括应用于包的常用操作。
block:
阻止包通过过滤器。
pass:
允许包通过过滤器。
log:
记录包但不确定是阻止包还是传递包。
使用ipmon命令可查看日志。
count:
将包包括在过滤器统计信息中。
使用ipfstat命令可查看统计信息。
skipnumber:
使过滤器跳过number个过滤规则。
auth:
请求由验证包信息的用户程序执行包验证。
该程序会确定是传递包还是阻止包。
preauth:
请求过滤器查看预先验证的列表以确定如何处理包。
2. 操作后面的下一个单词必须是in或out。
您的选择将确定是将包过滤规则应用于传入包还是应用于传出包。
3. 接下来,可以从选项列表中进行选择。
如果使用多个选项,则这些选项必须采用此处显示的顺序。
log:
如果规则是最后一个匹配规则,则记录包。
使用ipmon命令可查看日志。
quick:
如果存在匹配的包,则执行包含quick选项的规则。
所有进一步的规则检查都将停止。
oninterface-name:
仅当包移入或移出指定接口时才应用规则。
dup-tointerface-name:
复制包并将interface-name上的副本向外发送到选择指定的IP地址。
tointerface-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选项,则不使用此关键字。
keepkeep-options:
确定为包保留的信息。
可用的keep-options包括state选项和frags选项。
state选项会保留有关会话的信息,并可以保留在TCP、UDP和ICMP包中。
frags选项可保留有关包片段的信息,并将该信息应用于后续片段。
keep-options允许匹配包通过,而不会查询访问控制列表。
headnumber:
为过滤规则创建一个新组,该组由数字number表示。
groupnumber:
将规则添加到编号为number的组而不是缺省组。
如果未指定其他组,则将所有过滤规则放置在组0中。
四、开始编写规则
1.查看IPFilter包过滤
防火墙运行情况
Solaris10上IPFilter的启动和关闭是由SMF管理的,在Solaris10上工作的进程大多都交由SMF管理,这和先前版本的Solaris操作系统有很大的区别。
SolarisIP过滤防火墙随Solaris操作系统一起安装。
但是,缺省情况下不启用包过滤。
使用以下过程可以激活SolarisIP过滤器。
使用命令“svcs -a |grep network |egrep "pfil|ipf"”查看。
IPFilter有两个服务ipfilter和pfil,默认情况下ipfilter是关闭的,而pfil是打开的。
#svcs-a|grepnetwork|egrep"pfil|ipf"
disabled 7:
17:
43svc:
/network/ipfilter:
default
online 7:
17:
46svc:
/network/pfil:
default
2.查看网卡接口
lo0:
flags=2001000849mtu8232index1
inet127.0.0.1netmaskff000000
pcn0:
flags=1000843mtu1500index2
inet10.1.1.8netmaskff000000broadcast10.255.255.255
可以看到网卡接口是pcn0。
3.修改/etc/ipf/pfil.ap文件
此文件包含主机上网络接口卡(networkinterfacecard,NIC)的名称。
缺省情况下,这些名称已被注释掉。
对传输要过滤的网络通信流量的设备名称取消注释。
编辑配置文件修改为如下内容:
图2配置文件修改为如下内容
4.编辑防火墙规则
使服务器对ping没有反应,防止你的服务器对ping请求做出反应,对于网络安全很有好处,因为没人能够ping你的服务器并得到任何反应。
TCP/IP协议本身有很多的弱点,黑客可以利用一些技术,把传输正常数据包的通道用来偷偷地传送数据。
使你的系统对ping请求没有反应可以把这个危险减到最小。
修改配置文件/etc/ipf/ipf.conf添加一行:
block out quick proto icmp from any to 192.168.0.2/24 icmp-type 0
如图3
图3配置文件/etc/ipf/ipf.conf添加一行
说明:
IP过滤协议的关键字有4种(icmp、tcp、udp、tcp/udp),启用对协议的控制就是在协议的关键字前加proto关键字。
ICMP全称InternetControlMessageProtocol,中文名为因特网控制报文协议。
它工作在OSI的网络层,向数据通讯中的源主机报告错误。
ICMP可以实现故障隔离和故障恢复。
我们平时最常用的ICMP应用就是通常被称为Ping的操作。
在使用ICMP协议控制的时候,可以使用icmp-type关键字来指定ICMP协议的类型,类型的值以下几种见表1。
表1ICMP协议内容简介
类型
名称
备注
0
回波应答(EchoReply)
不允许ping命令回应
8
回波(Echo)
允许ping命令回应
9
路由器公告(Routerdvertisement)
10
路由器选择(RouterSelection)
所以把icmp-type设置为0即可。
5.启动服务
使用命令:
svcadm enable svc:
/network/ipfilter:
default
6.使pfil.ap配置文件生效
autopush -f /etc/ipf/pfil.ap
说明:
此步骤只需要做一次,以后更改防火墙规则就不需要再做。
7.重新引导计算机,使用命令:
“init6”。
8.使用命令再次查看IPFilter包过滤防火墙运行情况。
图四使用命令再次查看IPFilter包过滤防火墙运行
四、IPFilter包过滤防火墙规则编写方法
在创建IPFilter包过滤防火墙规则的第一步是与用户咨询确定一个可接受的服务列表。
许多公司会有—个可接受的使用策略,该策略会控制哪些端口应当可用和应当赋予用户启动的服务的权限。
在你确定了开放的流入端口和外出的端口需求之后,最好是编写一条规则:
首先拒绝全部数据包,然后编写另外的规则:
允许使用的端口。
你还必须设置两个方向启用允许的服务。
例如.用户同时接收和发送电子邮件通常是必要的,于是你需要对sendmail(端口25)包括一条入站和出站规则。
1、方法1
要阻止从IP地址192.168.1.0/16传入的流量,需要在规则列表中包括以下规则:
blockinquickfrom192.168.1.0/16toany
下面的例子阻止来自b类网络148.126.0.0的任何数据包:
blockinquickfrom148.126.0.0/16toany
2、方法2
通俗来说就是:
禁止是block,通过是pass,进入流量是in,出去流量是out。
然后配合起来使用就行了,再加上可以指定在哪个网卡上使用,也就是再加个on pcn0,另外还有一个关键字就是all,这是匹配(禁止或者通过)所有的包。
基于IP地址和防火墙接口的基本过滤方式:
blockinquickonhme0from192.168.0.14toany
blockinquickonhme0from132.16.0.0/16toany
passinall
应用此规则将阻止通过hme0口来自于192.168.0.14和132.16.0.0网段的所有包的进入,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
3、方法3:
基于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网段的所有包的进入和外出,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
4、方法4
使用“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端口对防火墙内的数据通信,但是允许其他网段的包进入到防火墙,同时对出去的包不作任何限制。
5、方法5
quick关键字使用提示:
假如你的防火墙有100条规则,最有用的可能只有前10条,那么quick是非常有必要的。
passinlogquickprototcpfrom10.4.128.163/32toanyport=telnet
blockinlogallfromanytoany
假如你希望禁止服务器的所有包而只希望一个IP只能够telnet的话,那么就可以加上quick关键字,quick的作用是当包符合这条规则以后,就不再向下进行遍历了。
如果没有quick的情况下,每一个包都要遍历整个规则表,这样的开销是十分大的,但是如果滥用quick也是不明智的,因为它毕竟不会产生日志。
6、管理SolarisIP过滤器的NAT规则
查看活动的NAT规则。
#ipnat-l
删除当前的NAT规则。
#ipnat-C
将规则附加到NAT规则
在命令行上使用ipnat-f-命令,将规则附加到NAT规则集。
#echo"mapdmfe0192.168.1.0/24->20.20.20.1/32"|ipnat-f-
五、关闭SolarisIP过滤防火墙的方法
有些情况可能希望取消激活或禁用包过滤,例如要进行测试另外在认为系统问题是由SolarisIP过滤器所导致时,对这些问题进行疑难解答。
首先成为管理员权限,
禁用包过滤,并允许所有包传入网络的命令:
#ipf–D
取消激活SolarisIP过滤器规则方法:
从内核中删除活动规则集。
#ipf-Fa
此命令取消激活所有的包过滤规则。
删除传入包的过滤规则。
#ipf-Fi
此命令取消激活传入包的包过滤规则。
删除传出包的过滤规则。
#ipf-Fo
此命令取消激活传出包的包过滤规则。
六、SolarisIP过滤防火墙的监控和管理
1.查看包过滤规则集
启用SolarisIP过滤器后,活动和非活动的包过滤规则集都可以驻留在内核中。
活动规则集确定正在对传入包和传出包执行的过滤。
非活动规则集也存储规则,但不会使用这些规则,除非使非活动规则集成为活动规则集。
可以管理、查看和修改活动和非活动的包过滤规则集。
查看装入到内核中的活动包过滤规则集,使用命令:
ipfstat–io。
如果希望查看非活动的包过滤规则集。
可以同使用命令:
#ipfstat-I–io
2.激活不同的包过滤规则集
以下示例显示如何将一个包过滤规则集替换为另一个包过滤规则集。
#ipf-Fa-f
活动规则集将从内核中删除。
文件中的规则将成为活动规则集。
3.将规则附加到活动的包过滤规则集
以下示例显示如何从命令行将规则添加到活动的包过滤规则集。
#ipfstat-io
emptylistforipfilter(out)
blockinlogquickfrom10.0.0.0/8toany
#echo"blockinondmfe1prototcpfrom10.1.1.1/32toany"|ipf-f-
#ipfstat-io
emptylistforipfilter(out)
blockinlogquickfrom10.0.0.0/8toany
blockinondmfe1prototcpfrom10.1.1.1/32toany
4、监控整个IP管理器防火墙查看状态表
使用没有参数的ipfstat命令即可,图5是整个IP过滤器防火墙查看状态表的输出。
图5整个IP过滤器防火墙查看状态表的输出
另外可以使用命令:
“ipfstat-s”查看SolarisIP过滤器的状态统计,使用命令:
“ipnat-s”查看SolarisIP过滤器的NAT状态统计。
使用ippool-s命令查看地址池统计。
七、查看SolarisIPFilter包过滤防火墙的日志文件
使用命令如下:
ipmon–o-a[S|N|I]
参数说明:
S:
显示状态日志文件。
N:
显示NAT日志文件。
I:
显示常规IP日志文件。
-a:
显示所有的状态日志文件、NAT日志文件和常规日志文件。
清除包日志文件使用命令:
#ipmon-F
八、使用fwbuilder管理防火墙
事实上,如果读者们不是很熟悉Solaris中IPFilter命令的使用方式,在这里介绍一个不错的图形管理程序,就是fwbuilder(),可以从lds/取得读者们所需要的版本或是原始码。
Fwbuilder是一个相当有弹性的防火墙图形接口,它不仅可以产生IPFilter的规则,也可以产生Cisco的FWSM(FireWallServiceModule,用于Cisco高阶第三层交换机6500及7600系列)及PIX的规则,更有趣的是,每次我们改变某台机器的设定后,它会使用RCS来做版本控管,相当实用。
fwbuilder所支援的防火牆有:
FWSM、ipfilter、ipfw、iptables、PF、PIX。
1、安装qt库
Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt,基于Framebuffer的QtEmbedded,快速开发工具QtDesigner,国际
窗体顶端
窗体底端
具QtLinguist等部分Qt支持所有Unix系统,当然也包括Solaris,还支持WinNT/Win2k/2003平台。
#wgetilder/qt-3.3.4-sol10-intel-local.gz
#pkgadd-dqt-3.3.4-sol10-intel-local.pkg
2、安装openssl
#wget
#pkgadd-dopenssl-0.9.7g-sol10-intel-local.pkg
3、安装snmp
简单网络管理协议(SNMP)是目前TCP/IP网络中应用最为广泛的网络管理协议。
1990年5月,RFC1157定义了SNMP(simplenetworkmanagementprotocol)的第一个版本SNMPv1。
RFC1157和另一个关于管理信息的文件RFC1155一起,提供了一种监控和管理计算机网络的系统方法。
因此,SNMP得到了广泛应用,并成为网络管理的事实上的标准。
大多数网络管理系统和平台都是基于SNMP的。
#wgeteware/i386/10/netsnmp-5.1.4-sol10-x86-local.gz
#pkgadd-dnetsnmp-5.1.4-sol10-x86-local.pkg
4、安装gtk+
GTK+是一种图形用户界面(GUI)工具包。
也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于GUI的应用程序。
可以把GTK+想像成一个工具包,从这个工具包中可以找到用来创建GUI的许多已经准备好的构造块。
最初,GTK+是作为另一个著名的开放源码项目——GNUImageManipulationProgram(GIMP)——的副产品而创建的。
在开发早期的GIMP版本时,PeterMattis和SpencerKimball创建了GTK(它代