Solaris服务器配置款安全的防火墙
连接网上的服务器系统,不管是什么情况都要明确一点:网络是不安全的。所以,虽然创建一个防火墙并不能够保证系统100%安全,但却是非常需要的。很多意义上的防火墙技术分为三大类,“包过滤”(Packet Filtering)、“应用代理”(Application Proxy)和“状态检测”(Stateful Inspection),不管一个防火墙的做的更好过程多么复杂,归根结底都是在这三种技术的基础上进行功能扩展的。一、Solaris包过滤防火墙IPFilter简介
IPFilter是目前非常流行的包过滤防火墙软件,它目前拥有多种平台的版本,安装配置比较非常简单。能够用它来构架功能强大的软件防火墙,接下来就其的安装还有多数典型的配置作一下说明。IPFfilter 的作者是 Darren Reed 先生,他是一位致力于开源软件设计的高级程序员,目前工作于 SUN 集团。IP Filter 软件能够提供网络地址转换(NAT)或者防火墙服务。简单的说能够一个软件的防火墙,并且这种软件是开源免费的。当前的版本是4.1.15,目前支持 FreeBSD、NetBSD、Solaris、AIX 等操作系统平台。IPFilter是它是一个在引导时配置的可加载到内核的模块。这促使它十分安全,因为已不能够由网民应用程序篡改。我用Solaris10 来作为实验的平台介绍一下IP Filter。IP Filter过滤器会执行一系列步骤。图1说明处理包的步骤,还有过滤如何与 TCP/IP 协议栈集成在一起。
图1 服务器的处理数据包的步骤
数据包在Solaris内的处理顺序包括下列步骤:
1. 网络地址转换 (Network Address Translation, NAT) :用专用 IP 地址转换为不相同的公共地址,或者用多个专用地址的别名指定为单个公共地址。当组织拥有现有的网络并就得访问 Internet 时,通过 NAT,该组织可处理 IP 地址用尽的疑问。
2. IP 记帐 :能够分别设置敲入规则和输出规则,根据而记录所通过的字节数。每次与规则匹配时,都会用包的字节计数添加到该规则中,并允许收集层叠统计信息。
3. 片段高速缓存检查 :可能当前流量中的下一个包是片段,而且允许前一个包通过,则也用允许包片段通过,根据而绕过状态表和规则检查。
4. 包状态检查 :可能规则中包括 keep state,则会自动传递或阻止指定会话中的所有包,具体取决于规则指明了 pass 或者 block。
5. 防火墙检查 :能够分别设置敲入规则和输出规则,确定是不是允许包通过 Solaris IP 过滤器传入内核的 TCP/IP 例程或者传出到网络上。
6. 组:通过分组能够按树的形式编写规则集。
7. 功能 :功能是指要执行的操作。可能的功能包括 block、pass、literal 和 send ICMP response。
8. 快速路由 :快速路由指示 Solaris IP 过滤器不用包传入 UNIX IP 栈进行路由,根据而导致 TTL 递减。
9. IP 验证 :已验证的包仅通过防火墙循环一次来防止双重处理。
二、学会编写IPFfilter 规则
典型的防火墙设置有两个网卡:一个流入,一个流出。IPFfilter读取流入和流出数据包的报头,用它们与规则集(Ruleset)相非常,用可接受的数据包根据一个网卡转发至另一个网卡,对被拒绝的数据包,能够丢弃或按照所定义的方式来处理。 通过向防火墙提供有关对来自某个源地址、到某个目的地或拥有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用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 inte易做图ce-name :仅当包移入或移出指定接口时才应用规则。
dup-to inte易做图ce-name:复制包并用 inte易做图ce-name 上的副本向外发送到选择指定的 IP 地址。
to inte易做图ce-name :用包移动到 inte易做图ce-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 是打开的。
# svcs -a |grep network |egrep "pfil|ipf" disabled 7:17:43 svc:/network/ipfilter:default online 7:17:46 svc:/network/pfil:default |
2.查看网卡接口
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 2 inet 10.1.1.8 netmask ff000000 broadcast 10.255.255.255 |
能够观察网卡接口是pcn0。
3.修改/etc/ipf/pfil.ap 文件
此文件包含主机上网络接口卡 (network inte易做图ce card, 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全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。ICMP可以实现故障隔离和故障恢复。我们平时最常用的ICMP应用就是通常被称为Ping的操作。在使用ICMP协议控制的时候,可以使用icmp-type关键字来指定ICMP协议的类型,类型的值以下几种见表1。
表1 ICMP协议内容简介
类型 | 名称 | 备注 |
0 | 回波应答(Echo Reply) | 不允许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.重新引导计算机,使用命令:“init 6”。
8.使用命令再次查看IPFilter包过滤防火墙运行情况 。
图四使用命令再次查看IPFilter包过滤防火墙运行
四、IPFilter包过滤防火墙规则编写做法
在创建IPFilter包过滤防火墙规则的第1步是与网民咨询确定一个可接受的服务列表。很多集团会有—个可接受的使用策略,该策略会控制哪些端口应当可用和应当赋予网民启动的服务的权限。在您确定了开展的流入端口和外出的端口需要之后,最好是编写一条规则:第1步拒绝所有数据包,接下来编写还有的规则:允许使用的端口。您还必须设置两个方向采取允许的服务。比如.网民同时接收和发送电子邮件一般是需要的,于是您就得对sendmail(端口25)包括一条入站和出站规则。
1、做法1
要阻止根据 IP 地址 192.168.1.0/16 传入的流量,就得在规则列表中包括下面规则:
block in quick from 192.168.1.0/16 to any
接下来的例子阻止来自b类网络148.126.0.0的每一个数据包:
block in quick from 148.126.0.0/16 to any
2、做法2
通俗来说能够:禁止是block ,通过是pass ,进入流量是in,出去流量是out 。接下来配合起来使用就完成了,再加上能够指定在哪个网卡上使用,也能够再加个on pcn0,还有还有一个主要字能够all,这是匹配(禁止或者通过)所有的包。基于IP地址和防火墙接口的基本过滤方式:
block in quick on hme0 from 192.168.0.14 to any
block in quick on hme0 from 132.16.0.0/16 to any
pass in all
应用此规则用阻止通过hme0口来自于192.168.0.14和132.16.0.0网段的所有包的进入,但是允许别的网段的包进入到防火墙,同时对出去的包不作每一个限制。
3、做法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、做法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端口对防火墙内的数据通信,但是允许别的网段的包进入到防火墙,同时对出去的包不作每一个限制。
5、做法5
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也是不明智的,因为它毕竟不会产生日志。
6、管理 Solaris IP 过滤器的 NAT 规则
查看活动的 NAT 规则。
# ipnat -l
删除当前的 NAT 规则。
# ipnat -C
用规则附加到 NAT 规则
在命令行上使用 ipnat -f - 命令,用规则附加到 NAT 规则集。
# echo "map dmfe0 192.168.1.0/24 -> 20.20.20.1/32" | ipnat -f -
五、关闭 Solaris IP 过滤防火墙的做法
有些情况可能希望取消激活或禁用包过滤,比如要进行测试还有在认为系统疑问是由 Solaris IP 过滤器所导致时,对这些疑问进行疑难解答。第1步成为管理员权限,
禁用包过滤,并允许所有包传入网络的命令:
# ipf –D
取消激活 Solaris IP 过滤器规则做法:
根据内核中删除活动规则集。
# ipf -Fa
此命令取消激活所有的包过滤规则。
删除传入包的过滤规则。
# ipf -Fi
此命令取消激活传入包的包过滤规则。
删除传出包的过滤规则。
# ipf -Fo
此命令取消激活传出包的包过滤规则。
六、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 10.0.0.0/8 to any # 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命令即可,图5 是整个IP过滤器防火墙查看状态表的输出。
图5 整个IP过滤器防火墙查看状态表的输出
另外可以使用命令:“ipfstat -s” 查看 Solaris IP 过滤器的状态统计,使用命令:“ipnat -s” 查看 Solaris IP 过滤器的NAT状态统计。使用 ippool -s 命令查看地址池统计。
六、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 10.0.0.0/8 to any # 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命令即可,图5 是整个IP过滤器防火墙查看状态表的输出。
图5 整个IP过滤器防火墙查看状态表的输出
另外可以使用命令:“ipfstat -s” 查看 Solaris IP 过滤器的状态统计,使用命令:“ipnat -s” 查看 Solaris IP 过滤器的NAT状态统计。使用 ippool -s 命令查看地址池统计。
七、查看 Solaris IPFilter包过滤防火墙的日志文件
使用命令如下:
ipmon –o -a [S|N|I] filename
参数说明:
S :显示状态日志文件。
N:显示 NAT 日志文件。
I:显示常规 IP 日志文件。
-a:显示所有的状态日志文件、NAT 日志文件和常规日志文件。
清除包日志文件使用命令:
# ipmon -F
八、使用fwbuilder管理防火墙
实际上,可能技术们不可能很熟悉Solaris中IPFilter命令的使用方式,在这里介绍一个不错的图形管理程序,能够fwbuilder (http://www.fwbuilder.org/),能够根据http://www.fwbuilder.org/nightly_builds/取得技术们所就得的版本或是原始码。Fwbuilder 是一个相当有弹性的防火墙图形接口,它不仅能够产生IPFilter 的规则,也能够产生 Cisco 的 FWSM (FireWall Service Module ,用于 Cisco 高阶第三层交换机 6500 及 7600 系列 ) 及 PIX 的规则,更有趣的是,每次我们改变某台机器的设定后,它会使用 RCS 来做版本控管,相当实用。fwbuilder所支援的防火牆有:FWSM、ipfilter、ipfw、iptables、PF、PIX。
1、安装qt库
Qt 是一个跨平台的 C++ 图形网民界面库,由挪威 TrollTech 集团出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速设计软件 Qt Designer,国际化软件 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括 Solaris,还支持 WinNT/Win2k/2003 平台。
#wget http://ma.yer.at/fwbuilder/qt-3.3.4-sol10-intel-local.gz
# pkgadd -d qt-3.3.4-sol10-intel-local.pkg
2、安装openssl
#wget http://mirrors.easynews.com/sunfreeware/i386/10/openssl-0.9.7g-sol10-intel-local.gz
#pkgadd -d openssl-0.9.7g-sol10-intel-local.pkg
3、安装snmp
简单网络管理协议(SNMP)是目前TCP/IP网络中应用最为广泛的网络管理协议。1990年5月,RFC 1157定义了SNMP(易做图 network management protocol)的第一个版本SNMPv1。RFC 1157和另一个对于管理信息的文件RFC 1155一起,提供了一种监控和管理计算机网络的系统做法。所以,SNMP得到了广泛应用,并成为网络管理的实际上的标准。大多数网络管理系统和平台都是基于SNMP的。
#wget http://mirrors.easynews.com/sunfreeware/i386/10/netsnmp-5.1.4-sol10-x86-local.gz
#pkgadd -d netsnmp-5.1.4-sol10-x86-local.pkg
4、安装gtk+
GTK+ 是一种图形网民界面(GUI)软件包。也可以说,它是一个库(或者,实际上是如果干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。能够把 GTK+ 想像成一个软件包,根据这种软件包中能够找到用来创建 GUI 的很多能够准备好的构造块。最初,GTK+ 是作为另一个著名的开展源码项目 —— GNU Image Manipulation Program (GIMP) —— 的副产品而创建的。在设计早期的 GIMP 版本时,Peter Mattis 和 Spencer Kimball 创建了 GTK(它代表 GIMP Toolkit),作为 Motif 软件包的替代,后者在那个时候不可能免费的。(当这种软件包获得了面对对象特性和可扩展性之后,才在名称后面加上了一个加号。)这差不多能够 10 年以前了。今天,在 GTK+ 的最新版本 —— 2.8 版上,仍然在进行很多活动,同时,GIMP 没有疑仍然是使用 GTK+ 的最著名的程序之一,但是现在它能够不可能惟一的使用 GTK+ 的程序了。能够为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME)用 GTK+ 为网民提供完整的工作环境。
#wget http://mirrors.easynews.com/sunfreeware/i386/10/gtk+-1.2.10-sol10-intel-local.gz
#pkgadd -d gtk+-1.2.10-sol10-intel-local.pkg
5、安装fwbuilder
可能以上的库能够安装,就能够执行接下来的命令来安装:
#wget http://ma.yer.at/fwbuilder/pkg/fwbuilder-2.0.10_build-657-i386.pkg.tar.bz2
#wget http://mirrors.easynews.com/sunfreeware/i386/10/libfwbuilder-2.0.10-sol10-x86-local.gz
#pkgadd -d libfwbuilder-2.0.10-sol10-x86-local.pkg
#pkgadd -d fwbuilder-2.0.10_build-657-i386.pkg
还有也能够使用在线安装方式部署fwbuilder,命令如下:
#/opt/csw/bin/pkg-get -i fwbuilder。
6、使用fwbuilder
为了使用方便在桌面建立一个启动器,点击鼠标右键选择创建启动器。如图6 。在命令栏目敲入:/opt/csw/bin/fwbuilder就能够。
图6 创建fwbuilder启动器
桌面背景启动器能够启动应用程序,也能够链接到某个特定的文件、文件夹、FTP 站点或 URI 位置。要在桌面背景上添加启动器,请执行下面步骤:右键点击桌面背景,接下来选择“创建启动器”。在“创建启动器”对话框中键入需要的信息。为该启动器敲入的命令能够在使用桌面背景对象时执行的命令。 通过每一个菜单当您在每一个菜单中右键点击启动器时,就能够打开启动器的弹出菜单。您能够使用该弹出菜单向面板添加该启动器。也能够用菜单、启动器和面板应用程序根据菜单拖动到面板中。通过文件管理器每个启动器都对应一个 .desktop 文件。您能够用 .desktop 文件拖动到面板上,根据而用该启动器添加到面板上。点击启动器就能够启动fwbuilder,如图7。
图 7 fwbuilder的使用界面
总结:尽管IPFilter技术十分简单明白,并且对于在网络传输上设置具体的限制特别有用, —般而言,配置IPFilter防火墙存在多数缺点,因为防火墙配置涉及编写规则,经常使用规则语言的话法一般对于初学者(特别是Windows 初学者)难于理解,接下来数据包过滤可能难于正确配置。虽然,包过滤防火墙有如上所述的缺点,但是在管理良好的小规模网络上,它能够正常的发挥其作用。那么情况下,人们不单独使用包过滤防火墙,而是用它和别的设备(如堡垒主机等)联合使用。