为Solaris服务器配置款安全的防火墙天极yesky作者:曹江华(原创)连接网上的服务器系统,不管是什么情况都要明确一点:网络是不安全的。因此,虽然创建一个防火墙并不能保证系统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|grepnetwork|egreppfil|ipf”查看。IPFilter有两个服务ipfilter和pfil,默认情况下ipfilter是关闭的,而pfil是打开的。#svcs-a|grepnetwork|egreppfil|ipfdisabled7:17:43svc:/network/ipfilter:defaultonline7:17:46svc:/network/pfil:default2.查看网卡接口lo0:flags=2001000849UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUALmtu8232index1inet127.0.0.1netmaskff000000pcn0:flags=1000843UP,BROADCAST,RUNNING,MULTICAST,IPv4mtu1500index2inet10.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添加一行:blockoutquickprotoicmpfromanyto192.168.0.2/24icmp-type0如图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.启动服务使用命令:svcadmenablesvc:/network/ipfilter:default6.使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/16toany2、方法2通俗来说就是:禁止是block,通过是pass,进入流量是in,出去流量是out。然后配合起来使用就行了,再加上可以指定在哪个网卡上使用,也就是再加个onpcn0,另外还有一个关键字就是all,这