企业应用开源防火墙安全保障实战演练,第 1 部分: 原理及简单应用

防火墙一直是信息安全领域的标志性产品,它可以在网络层甚至是目前的应用层来对恶意流量进行封堵,从而保证企业网及其服务的安全。在开源系统领域,Netfiler/IPTables 防火墙框架比较成熟,越来越多的企业采用该框架来进行企业防护。当然,防火墙的部署和使用具有一定的技巧,比如:DMZ 的部署、IPTables 封堵规则的设定等,都需要审慎的对待,才能发挥其最大功效。作为本系列的第一篇文章,本文详细介绍 Netfilter/IPTables 防火墙框架的原理、安装、启动以及简单实战应用。

防火墙技术简介

防火墙(FireWall)指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使 Internet 与 Intranet 之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入。Linux 中就提供了一个安全高效的防火墙框架,用户可以使用其简单、迅速、高效地保护系统和网络安全。

网络防火墙是借鉴了古代真正用于防火的防火墙的喻义,指的是设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合。它可通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况,以此来实现网络的安全保护。在逻辑上,防火墙是一个分离器、一个限制器,也是一个分析器,有效地监控了内部网和 Internet 之间的任何活动,保证了内部网络的安全。目前防火墙已经开始被企业用户普遍接受,而且正在成为企业网络中一种主要的安全设备。

典型的防火墙体系网络结构是(如图 1 所示):防火墙的一端连接企事业单位内部的局域网,而另一端则连接着互联网。所有的内、外部网络之间的通信都要经过防火墙。只有符合安全策略的数据流才能通过防火墙。这是防火墙的工作原理特性。防火墙之所以能保护企业内部网络,就是依据这样的工作原理或者说是防护机制进行的。它可以由管理员自由设置企业内部网络的安全策略,使允许的通信不受影响,而不允许的通信全部被拒绝于内部网络之外。

防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。

  1. 防火墙是网络安全的屏障:一个防火墙(作为阻塞点、控制点)能极大地提高一个内部网络的安全性,并通过过滤不安全的服务而降低风险。由于只有经过精心选择的应用协议才能通过防火墙,所以网络环境变得更安全。如防火墙可以禁止诸如众所周知的不安全的 NFS 协议进出受保护网络,这样外部的攻击者就不可能利用这些脆弱的协议来攻击内部网络。防火墙同时可以保护网络免受基于路由的攻击,如 IP 选项中的源路由攻击和 ICMP 重定向中的重定向路径。防火墙应该可以拒绝所有以上类型攻击的报文并通知防火墙管理员。
  2. 防火墙可以强化网络安全策略:通过以防火墙为中心的安全方案配置,能将所有安全软件(如口令、加密、身份认证、审计等)配置在防火墙上。与将网络安全问题分散到各个主机上相比,防火墙的集中安全管理更经济。例如在网络访问时,一次一密口令系统和其它的身份认证系统完全可以不必分散在各个主机上,而集中在防火墙一身上。
  3. 对网络存取和访问进行监控审计:如果所有的访问都经过防火墙,那么,防火墙就能记录下这些访问并作出日志记录,同时也能提供网络使用情况的统计数据。当发生可疑动作时,防火墙能进行适当的报警,并提供网络是否受到监测和攻击的详细信息。另外,收集一个网络的使用和误用情况也是非常重要的。首先的理由是可以清楚防火墙是否能够抵挡攻击者的探测和攻击,并且清楚防火墙的控制是否充足。而网络使用统计对网络需求分析和威胁分析等而言也是非常重要的。
  4. 防止内部信息的外泄:通过利用防火墙对内部网络的划分,可实现内部网重点网段的隔离,从而限制了局部重点或敏感网络安全问题对全局网络造成的影响。再者,隐私是内部网络非常关心的问题,一个内部网络中不引人注意的细节可能包含了有关安全的线索而引起外部攻击者的兴趣,甚至因此而暴漏了内部网络的某些安全漏洞。使用防火墙就可以隐蔽那些透漏内部细节如 Finger,DNS 等服务。Finger 显示了主机的所有用户的注册名、真名、最后登录时间和使用 shell 类型等。但是 Finger 显示的信息非常容易被攻击者所获悉。攻击者可以知道一个系统使用的频繁程度,这个系统是否有用户正在连线上网,这个系统是否在被攻击时引起注意等等。防火墙可以同样阻塞有关内部网络中的 DNS 信息,这样一台主机的域名和 IP 地址就不会被外界所了解。

除了安全作用,防火墙还支持具有 Internet 服务特性的企业内部网络技术体系 VPN(虚拟专用网)。

图 1 . 防火墙体系网络结构

Netfilter/IPTables 防火墙框架技术原理及安装启动

Linux 系统提供了一个自带免费的防火墙 - Netfilter/IPTables 防火墙框架,该框架功能强大,下面详细介绍该框架的安装、配置和使用。

Linux 中的主要防火墙机制演进

Linux 的防火墙技术经历了若干代的沿革,一步步的发展而来。最开始的 Ipfwadm 是 Alan Cox 在 Linux kernel 发展的初期,从 FreeBSD 的内核代码中移植过来的。后来经历了 ipchains,再经由 Paul Russell 在 Linux kernel 2.3 系列的开发过程中发展了 Netfilter 这个架构。而用户空间的防火墙管理工具,也相应的发展为 IPTables。Netfilter/IPTables 这个组合目前相当的令人满意。在经历了 Linux kernel 2.4 和 2.5 的发展以后,的确可以说,Netfilter/IPTables 经受住了大量用户广泛使用的考验。准确地说,Netfilter/IPTables 可以说是 Linux 的第三代防火墙,而且它比 Ipfwadm 和 Ipchains 要出色很多,因此,Linux 就将 Netfilter 设定为其预定的防火墙,虽然 Netfilter 是自由软件,但其功能、稳定性和安全性、扩展性等方面都丝毫不逊于其他的商业防火墙。

Netfilter/IPTables 架构简介

Netfilter/IPTables 可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行,被认为是 Linux 中实现包过滤功能的第四代应用程序。Netfilter/IPTables 包含在 Linux 2.4 以后的内核中,可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。Netfilter 工作在内核内部,而 IPTables 则是让用户定义规则集的表结构。Netfilter/IPTables 从 Ipchains 和 Ipwadfm(IP 防火墙管理)演化而来,功能更加强大。

这里所说的 IPTables 是 Ipchains 的后继工具,但具有更强的可扩展性。内核模块可以注册一个新的规则表(table),并要求数据包流经指定的规则表。这种数据包选择用于实现数据报过滤(filter 表),网络地址转换(NAT 表)及数据报处理(mangle 表)。Linux 2.4 内核及其以上版本提供的这三种数据报处理功能都基于 netfilter 的钩子函数和 IP 表,都是相互间独立的模块,完美地集成到了由 netfilter 提供的框架中,如图 2 所示。Netfilter 主要提供了如下三项功能:

包过滤:filter 表格不会对数据报进行修改,而只对数据报进行过滤。IPTables 优于 Ipchains 的一个方面就是它更为小巧和快速。它是通过钩子函数 NF_IP_LOCAL_IN、NF_IP_FORWARD 及 NF_IP_LOCAL_OUT 接入 Netfilter 框架的。

NAT:NAT 表格监听三个 Netfilter 钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING 及 NF_IP_LOCAL_OUT。NF_IP_PRE_ROUTING 实现对需要转发数据报的源地址进行地址转换,而 NF_IP_POST_ROUTING 则对需要转发的数据报目的地址进行地址转换。对于本地数据报目的地址的转换,则由 NF_IP_LOCAL_OUT 来实现。

数据报处理:mangle 表格在 NF_IP_PRE_ROUTING 和 NF_IP_LOCAL_OUT 钩子中进行注册。使用 mangle 表,可以实现对数据报的修改或给数据报附上一些外带数据。当前 mangle 表支持修改 TOS 位及设置 skb 的 nfmard 字段。

图 2.Netfilter/IPTables 框架结构示意图

根据实际情况,灵活运用 Netfilter/IPTables 框架,生成相应的防火墙规则可以方便、高效地阻断部分网络攻击以及非法数据报,参见图 3 所示的工作原理。然而,由于配置了防火墙,可能引起诸如 FTP、QQ、MSN 等协议和软件无法使用或者某些功能无法正常使用,也有可能引起 RPC(远程过程调用)无法执行,这需要用户根据实际情况来配置相应的服务代理程序来开启这些服务。需要特别提醒注意的是,防火墙也可能被内部攻击,其并不是万能的,还需要综合使用其他防护手段。内部人员由于无法通过 Telnet 浏览邮件或使用 FTP 向外发送信息,个别人会对防火墙不满进而可能对其进行攻击和破坏。而且,攻击的目标常常是防火墙或防火墙运行的操作系统,这极大地危害了防火墙系统甚至是关键信息系统的安全。

需要特别说明的是:本文下述所有命令的操作使用都是在 Red Hat Enterprise Linux 中测试通过的,可适用于 Red Hat 和 Fedora 系列 Linux 操作系统,对于其他系列的操作系统,命令有可能需要调整。

图 3.Netfilter/IPTables 框架工作原理示意

Netfilter/IPTables 模块化工作架构

Netfilter 是工作在 Linux 中的一个功能,而这种功能是通过“模块”化的方式来扩充和实现的。用户可以通过 Linux 的模块管理工具随心所欲地将模块载入内存,或者将某个不需要使用的模块从内存中删除掉,而 Netfilter 也是以模块的方式存在于 Linux 之中的。可以认为,Linux 系统内存中多加载了一个 Netfilter 模块就意味着 Linux 防火墙的功能多了一项。

Netfilter 在 Linux 系统中有两种存在方式:与 IPv4 或者 IPv6 协议相关,与 IPv4 或者 IPv6 协议均无关。如下所示的目录结构反映了与 IPv4 协议相关的 Netfilter 模块的存在方式:

 /lib/modules/2.6.18-8.el5/kernel/net/ipv4/netfilter 
 arptable_filter.ko          ip_conntrack_proto_sctp.ko  ip_nat_tftp.ko     ipt_DSCP.ko
 ipt_REJECT.ko               arp_tables.ko               ip_conntrack_sip.ko ip_queue.ko
 ipt_ecn.ko                  ipt_SAME.ko                 arpt_mangle.ko     
 ip_conntrack_tftp.ko        iptable_filter.ko           ipt_ECN.ko                  
 ipt_TCPMSS.ko      ip_conntrack_amanda.ko 
 ...

如下所示的目录结构反映了与 IPv6 协议相关的 Netfilter 模块的存在方式:

 /lib/modules/2.6.18-8.el5/kernel/net/ipv6/netfilter 
 ip6_queue.ko   ip6table_raw.ko  ip6t_dst.ko    ip6t_hbh.ko  ip6t_ipv6header.ko 
 ip6t_REJECT.ko  ip6table_filter.ko  ip6_tables.ko  ip6t_eui64.ko  ip6t_hl.ko
 ip6t_LOG.ko   ip6t_rt.ko  ip6table_mangle.ko  ip6t_ah.ko  ip6t_frag.ko
 ip6t_HL.ko   ip6t_owner.ko

以上两个目录结构中的模块均只能在 IPv4 和 IPv6 协议下工作,他们是 Linux 内核版本 2.6.14 下的产物。而为了使得对 Netfilter 模块的管理更加简单和高效,从 Linux 2.6.14 内核版本之后,Netfilter 的模块就只有如下的目录结构方式,它们都是与协议无关的,因而能够工作在 IPv4 和 IPv6 网络协议环境下:

 /lib/modules/2.6.18-8.el5/kernel/net/netfilter 
 nfnetlink.ko        xt_connbytes.ko    xt_esp.ko     xt_MARK.ko       
 xt_policy.ko   xt_statistic.ko 
 nfnetlink_log.ko    xt_connmark.ko     xt_helper.ko  xt_multiport.ko  
 xt_quota.ko    xt_string.ko 
 nfnetlink_queue.ko  xt_CONNMARK.ko     xt_length.ko  xt_NFQUEUE.ko    
 xt_realm.ko    xt_tcpmss.ko 
 x_tables.ko         xt_CONNSECMARK.ko  xt_limit.ko   xt_NOTRACK.ko    
 xt_sctp.ko     xt_tcpudp.ko 
 xt_CLASSIFY.ko      xt_conntrack.ko    xt_mac.ko     xt_physdev.ko    
 xt_SECMARK.ko 
 xt_comment.ko       xt_dccp.ko         xt_mark.ko    xt_pkttype.ko    
 xt_state.ko

安装和启动 Netfilter/IPTables 系统

因为 Netfilter/IPTables 的 Netfilter 组件是与内核 2.4.x 集成在一起的,对于 Red Hat Linux 9 或更高版本的 Linux 都配备了 Netfilter 这个内核工具,所以一般不须要下载,而只要下载并安装 IPTables 用户空间工具的源代码包,下载的网址为:http://www.netfilter.org/projects/iptables/downloads.html。目前,最新源代码安装包是:iptables-1.4.2-rc1.tar.bz2。在 Red Hat Enterprise Linux 5 中,已经自带了 IPTables 用户空间工具,不须要自己下载源代码安装,这里只是对源代码安装作一个介绍。

在开始安装 IPTables 用户空间工具之前,要对系统做某些修改,主要有如下选项须要配置修改:

  • CONFIG_PACKET:如果要使应用程序和程序直接使用某些网络设备,那么这个选项是有用的。
  • CONFIG_IP_NF_MATCH_STATE:如果要配置有状态的防火墙,那么这个选项非常重要而且很有用。这类防火墙会记得先前关于信息包过滤所做的决定,并根据它们做出新的决定。
  • CONFIG_IP_NF_FILTER:这个选项提供一个基本的信息包过滤框架。如果打开这个选项,则会将一个基本过滤表(带有内置的 INPUT、FORWARD 和 OUTPUT 链)添加到内核空间。
  • CONFIG_IP_NF_TARGET_REJECT:这个选项允许指定:应该发送 ICMP 错误消息来响应已被 DROP 掉的入站信息包,而不是简单地杀死这些信息包。

上述配置项的修改,均需要在 Linux 内核中进行配置,进入系统源代码所在目录后,使用如下命令可以进入内核配置选项,对上述选项进行选择即可:

 #make menuconfig

下面是安装源代码包的步骤:

 // 将源代码文件解压缩
 #bzip2 -d iptables-1.4.2-rc1.tar.bz2 
 #tar -xvf iptables 1.4.2.tar 
 // 切换目录
 #cd iptables 1.4.2 
 // 编译该工具,指定编译的内核目录为 /usr/src/linux-2.6.18-8 
 #make KERNEL_DIR=/usr/src/linux-2.6.18-8 
 // 执行 make install 命令,同样设定内核目录为 /usr/src/linux-2.6.18-8 
 #make install KERNEL_DIR=/usr/src/linux-2.6.18-8

安装完成后,就可以启动防火墙了,下面是启动 iptables 的命令:

 // 使用 service 命令手工启动
 # service iptables start

如果想要在系统启动的时候也启动该防火墙服务,那么可以使用 setup 命令,然后进入 System service 选项,选择 iptables 守护进程即可。

使用 IPTables 编写防火墙规则

通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用 Netfilter/IPTables 系统提供的特殊命令 iptables 建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加 / 除去 / 编辑规则的命令的一般语法如下:

 iptables [-t table] command [match] [target]

不难看出,一条 IPTables 规则包含如下 5 个基本元素:

  • 命令
  • 匹配
  • 动作

表(table)

[-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat 和 mangle。该选项不是必需的,如果未指定,则 filter 用作默认表。filter 表用于一般的信息包过滤,包含 INPUT、OUTPUT 和 FORWAR 链。nat 表用于要转发的信息包,它包含 PREROUTING、OUTPUT 和 POSTROUTING 链。如果信息包及其头内进行了任何更改,则使用 mangle 表。该表包含一些规则来标记用于高级路由的信息包以及 PREROUTING 和 OUTPUT 链。

命令(command)

command 部分是 IPTables 命令的最重要部分,它告诉 IPTables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。主要有如表 1 所示的命令。

表 1.iptables 常用命令
命 令 说 明
-A 或 --append 该命令将一条规则附加到链的末尾
-D 或 --delete 通过用 -D 指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则
-P 或 --policy 该命令设置链的默认目标,即策略。所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略
-N 或 --new-chain 用命令中所指定的名称创建一个新链
-F 或 --flush 如果指定链名,该命令删除链中的所有规则,如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除
-L 或 --list 列出指定链中的所有规则
-R 或 --replace 替换指定链中一条匹配的规则
-X 或 --delete-chain 删除指定用户的的定义链,若没有指定链,则删除所有的用户链
-C 或 --check 检查数据包是否与指定链的规则相匹配
-Z 或 --zero 将指定链中所有规则的 byte 计数器清零

匹配(match)

IPTables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用匹配和特定于协议的匹配。这里,将研究可用于采用任何协议的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其说明,如表 2 所示。

表 2. 通用匹配说明
通用匹配 说明
-p 或 --protocol 该通用协议匹配用于检查某些特定协议。协议示例有 TCP、UDP、ICMP、用逗号分隔的任何这三种协议的组合列表以及 ALL(用于所有协议)。ALL 是默认匹配。可以使用 ! 符号表示不与该项匹配
-s 或 --source 该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。默认源匹配与所有 IP 地址匹配
-d 或 --destination 该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。该匹配还允许对某一范围内 IP 地址进行匹配,可以使用 ! 符号表示不与该项匹配
--sport 指定匹配规则的源端口或端口范围
--dport 指定匹配规则的目的端口或端口范围
-i 匹配单独的网络接口或某种类型的接口设置过滤规则

目标(target)

前面已经讲过,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明,如表 3 所示。

表 3. 目标项说明
目标项 说 明
ACCEPT 当信息包与具有 ACCEPT 目标的规则完全匹配时,会被接受(允许它前往目的地)
DROP 当信息包与具有 DROP 目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为 -j DROP
REJECT 该目标的工作方式与 DROP 目标相同,但它比 DROP 好。和 DROP 不同,REJECT 不会在服务器和客户机上留下死套接字。另外,REJECT 将错误消息发回给信息包的发送方。该目标被指定为 -j REJECT
RETURN 在规则中设置的 RETURN 目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如 INPUT 之类的主链,则使用该链的默认策略处理信息包。它被指定为 -jump RETURN
LOG 表示将包的有关信息记录入日志
TOS 表示改写数据包的 TOS 值

使用 IPTables 编写规则的简单实战应用

编写规则示例一:基本规则

下面将给出运用上述框架理论形成规则的一些简单示例,以供读者在实际的应用过程中进行模仿和使用:

(1)接受来自指定 IP 地址的所有流入的数据包:

 #iptables -A INPUT -s 203.159.0.10 -j ACCEPT

(2)只接受来自指定端口(服务)的数据包:

 #iptables -D INPUT --dport 80 -j DROP

(3)允许转发所有到本地(198.168.10.13)smtp 服务器的数据包:

 #iptables -A FORWARD -p tcp -d 198.168.10.13 --dport smtp -i eth0 -j ACCEPT

(4)允许转发所有到本地的 udp 数据包(诸如即时通信等软件产生的数据包):

 #iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT

(5)拒绝发往 WWW 服务器的客户端的请求数据包:

 #iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j REJECT

(6)允许目的为指定端口的 tcp 数据包进入:

 #iptables – A INPUT – p tcp – m multiport - – destination-port 21,53,80,25,110 ACCEPT

(7)允许来源为指定端口的 tcp 数据包进入:

 #iptables – A INPUT – p tcp – m multiport - – source-port 21,53,80,25,110 ACCEPT

(8)丢掉 SYN 和 ACK 标志位置位的数据包:

 #iptables -A INPUT-p tcp – -tcp-flags ALL SYN,ACK DROP

编写规则示例二:进行碎片检测及流量控制

(1)检查 IP 碎片:在 TCP/IP 网络中,链路层具有最大传输单元 MTU 这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的 MTU 是 1500。如果 IP 层有数据包要传,而且数据包的长度超过了 MTU,那么 IP 层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于 MTU,这些被分段的片段就成为 IP 碎片。那么,如果在防火墙处不对 IP 碎片进行特别处理的话,那么有可能部分 IP 碎片会被防火墙拦截,从而影响到接受端对这些碎片的还原,并最终影响到信息的完整性和可用性问题,所以,下面的例子给出防火墙允许 IP 碎片通过的规则:

 #iptables – A FORWARD – p tcp – f – s 172.168.96.0/24 – d 172.168.97.18 – j ACCEPT

需要特别留意上述规则中的 -f 选项,它指定了第二个以及以后的 IP 碎片将由防火墙来处理通过,否则的话,考虑下面的规则,防火墙有可能对其第二个及其以后的 IP 碎片进行拦截,从而影响正常的信息流通:

 #iptables – A FORWARD – p tcp – s 172.168.96.0/24 – d 172.168.97.18 – j ACCEPT

(2)速率限制:iptables 提供了非常健全的速率控制机制,主要用来限制由外向内的单位时间内通过的数据包个数,这样做的一个直接的好处就是尽可能地抑制前面多次提到的拒绝服务攻击或者是分布式拒绝服务攻击,因为这两种攻击的一个非常典型的表现就是单位时间内有很多数据包涌向目的地。所以,我们可以使用下面的规则来限制单位时间内允许通过防火墙,从而进入被保护网络的数据包个数:

 #iptables – A INPUT – m limit - – limit 200/second 
 #iptables – A INPUT – m limit - – limit 10000/minute

上述两条规则分别限制 1 秒内和 1 分钟内通过的数据包个数不能超过 200 和 10000 个。当然,在实际应用中,也可以通过 /second、/minute、、/hour、/day 这样的时间间隔来进行设定,并且,其中诸如 200 和 10000 这些具体数值的设定需要用户根据具体情况和经验来进行设定,没有规定的数值可循。

另外,在设定速率限制后,还可以设定超过该限制所触发的一些处理事件,比如说直接丢弃。下面的规则表示当速率超过 200 限制后,将直接对后续数据包进行丢弃:

 #iptables – A INPUT – m limit - – limit-burst 200

编写规则示例三:保障网络服务安全

在上一小节我们根据 IPTables 的规则编写原则介绍了一些简单的使用其进行数据包过滤的例子,由于 IPTables 在实际生活中得到了非常广泛的使用,本节将介绍一个使用其保障网络服务安全的例子,以使用户能够在实际使用中举一反三。

在这个应用中,我们将需要使用 IPTables 防火墙保护企业网络提供的对外的公共 Internet 服务,这些服务包括 WWW 服务、FTP 服务、SMTP 服务以及 DNS 服务(具体的网络拓扑请参见图 4)。因此,这些服务起都具有有效的 Internet 地址。

为了将内部网段 210.10.18.0/24 与 Internet 隔离,在内部网络和 Internet 之间使用了包过滤防火墙。具体的 IP 地址设置如下:

  • 防火墙的内网接口是 eth0(IP 地址为:210.10.18.88),防火墙对外的 Internet 接口是 eth1(IP 地址为:210.10.19.188);
  • WWW 服务器:IP 地址为 210.10.18.89;
  • FTP 服务器:IP 地址为 210.10.18.90;
  • DNS 服务器:IP 地址为 210.10.18.91;
  • SMTP 服务器:IP 地址为 210.10.18.92。
图 4.防火墙部署实例示意图

本应用的主要目的是对企业网提供各种服务的服务器提供保护,以使他们免受来自于外网 Internet 恶意用户和流量的攻击和危害。在配置过程中,需要根据本文前面部分介绍的知识进行规则编写等工作,具体的步骤如下:

(1)建立有关的脚本文件:在 /etc/rc.d/ 目录下用 touch 命令建立空的脚本文件,执行 chmod 命令添加可执行权限。

 # touch /etc/rc.d/firewall-for-networkservice 
 # chmod u+x /etc/rc.d/firewall-for-networkservice

(2)编辑 /etc/rc.d/rc.local 文件,在末尾加上 /etc/rc.d/firewall-for-networkservice 以确保开机时能自动执行该脚本,运行如下命令:

 # echo “/etc/rc.d/firewall-for-networkservice” >>/etc/rc.d/rc.local

(3)使用 Vi 或者 Gedit 等编辑器编辑 /etc/rc.d/firewall-for-networkservice 文件,插入如下内容:

1)添加相关脚本信息,注意:脚本中的注释是采用“#”表示,而不是通常用的“//”

 # 添加脚本编写头部
 # !/bin/bash 
 # 在屏幕上显示信息
 echo “Starting iptables rules …”
 # 开启内核转发功能
 echo “1” >/proc/sys/net/ipv4/ip_forward

2)定义规则重要使用的相关变量

 # 定义变量
 IPT_LIST=/sbin/iptables 
 WEB_SERVER=210.10.18.89 
 FTP_SERVER=210.10.18.90 
 DNS_SERVER=210.10.18.91 
 SMTP_SERVER=210.10.18.92 
 PROTECT_DOMAIN=“210.10.18.0/24”

3)刷新基本的链规则,并禁止转发任意包

 $IPT_LIST –F 
 $IPT_LIST –P FORWARD DROP

4)设置有关保护服务器的包过滤规则,并且注意由于服务器 / 客户机交互是双向的,所以不仅仅要设置数据包出去的规则,还要设置数据包返回的规则,如下所示:

 # 保护 WWW 服务:服务端口为 80,采用 TCP 或 UDP 协议
 # 规则为:eth1=> 允许目的为内部网 WWW 服务器的包
 $IPT_LIST –A FORWORD –p tcp udp –d $WEB_SERVER –dport www –i eth1 –  ACCEPT 

 # 保护 FTP 服务:服务端口为:命令端口 21,数据端口 20。FTP 服务采用 TCP 协议。
 # 规则为:eth1=> 允许目的为内部网 FTP 服务器的包
 $IPT_LIST –A FORWORD –p tcp –d $FTP_SERVER –dport ftp –i eth1 –j ACCEPT 

 # 保护 DNS 服务:DNS 端口 53,采用 TCP 协议或者 UDP 协议
 # 规则为:eth1=> 允许目的为内部网 DNS 服务器的查询请求
 $IPT_LIST –A FORWORD –p tcp udp –d $ DNS_SERVER –dport dns –i eth1 –j ACCEPT 

 # 保护 SMTP 服务:smtp 端口 25,采用 tcp 协议
 # 规则为:eth1=> 允许目的为内部网 SMTP 服务器的 smtp 请求
 $IPT_LIST –A FORWORD –p tcp –d $ SMTP_SERVER –dport smtp –i eth1 –j ACCEPT

(4)执行脚本,使配置规则立刻生效

 # /etc/rc.d/firewall-for-networkservice

到现在为止,有关使用防火墙来保障网络服务的配置就完成了,通过执行上面的脚本,我们建立了一个相对完整的防火墙。由于该防火墙只对外开放了有限的几个端口,因此能够有效地限制除这几个服务之外的流量进入,从而达到保证安全的目的。当然,这个例子还非常简单,用户还可以在实际中通过针对具体服务的细化防火墙配置,比如限制外部网络并发连接 WWW 服务的 TCP 请求个数、限制外网访问 FTP 服务器的 IP 地址列表等来进行。这里只是给出一个简要的示例,以达到抛砖引玉的目的。

总结

作为本系列的第一篇文章,本文详细介绍 Netfilter/IPTables 防火墙框架的原理、安装、启动以及简单实战应用。在下一篇,我们将对应用 Netfilter/IPTables 防火墙框架进行 NAT、DMZ 应用进行介绍,并给出防火墙的实际安全部署建议。

参考资料

学习

  • 本系列 第 2 部分:NAT、DMZ 构建及安全部署建议:本文对 Netfilter/IPTables 防火墙框架进行 NAT、DMZ 应用进行介绍,并给出防火墙的实际安全部署建议。
  • 浏览 Netfilter/IPTables门户网站,全面获取 Netfilter/IPTables 防火墙框架的相关知识和原理。
  • 阅读 Linux Firewall Configuration and Setup - iptables,了解 Netfilter/IPTables 的具体配置和使用方法。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

你可能感兴趣的:(linux系统基础知识)