防火墙(FireWall)指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使 Internet 与 Intranet 之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入。Linux 中就提供了一个安全高效的防火墙框架,用户可以使用其简单、迅速、高效地保护系统和网络安全。 网络防火墙是借鉴了古代真正用于防火的防火墙的喻义,指的是设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合。它可通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况,以此来实现网络的安全保护。在逻辑上,防火墙是一个分离器、一个限制器,也是一个分析器,有效地监控了内部网和 Internet 之间的任何活动,保证了内部网络的安全。目前防火墙已经开始被企业用户普遍接受,而且正在成为企业网络中一种主要的安全设备。 典型的防火墙体系网络结构是(如图 1 所示):防火墙的一端连接企事业单位内部的局域网,而另一端则连接着互联网。所有的内、外部网络之间的通信都要经过防火墙。只有符合安全策略的数据流才能通过防火墙。这是防火墙的工作原理特性。防火墙之所以能保护企业内部网络,就是依据这样的工作原理或者说是防护机制进行的。它可以由管理员自由设置企业内部网络的安全策略,使允许的通信不受影响,而不允许的通信全部被拒绝于内部网络之外。 防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。
除了安全作用,防火墙还支持具有 Internet 服务特性的企业内部网络技术体系 VPN(虚拟专用网)。
Netfilter/IPTables 防火墙框架技术原理及安装启动 Linux 系统提供了一个自带免费的防火墙 - Netfilter/IPTables 防火墙框架,该框架功能强大,下面详细介绍该框架的安装、配置和使用。 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 可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行,被认为是 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 字段。
根据实际情况,灵活运用 Netfilter/IPTables 框架,生成相应的防火墙规则可以方便、高效地阻断部分网络攻击以及非法数据报,参见图 3 所示的工作原理。然而,由于配置了防火墙,可能引起诸如 FTP、QQ、MSN 等协议和软件无法使用或者某些功能无法正常使用,也有可能引起 RPC(远程过程调用)无法执行,这需要用户根据实际情况来配置相应的服务代理程序来开启这些服务。需要特别提醒注意的是,防火墙也可能被内部攻击,其并不是万能的,还需要综合使用其他防护手段。内部人员由于无法通过 Telnet 浏览邮件或使用 FTP 向外发送信息,个别人会对防火墙不满进而可能对其进行攻击和破坏。而且,攻击的目标常常是防火墙或防火墙运行的操作系统,这极大地危害了防火墙系统甚至是关键信息系统的安全。 需要特别说明的是:本文下述所有命令的操作使用都是在 Red Hat Enterprise Linux 中测试通过的,可适用于 Red Hat 和 Fedora 系列 Linux 操作系统,对于其他系列的操作系统,命令有可能需要调整。
Netfilter 是工作在 Linux 中的一个功能,而这种功能是通过“模块”化的方式来扩充和实现的。用户可以通过 Linux 的模块管理工具随心所欲地将模块载入内存,或者将某个不需要使用的模块从内存中删除掉,而 Netfilter 也是以模块的方式存在于 Linux 之中的。可以认为,Linux 系统内存中多加载了一个 Netfilter 模块就意味着 Linux 防火墙的功能多了一项。 Netfilter 在 Linux 系统中有两种存在方式:与 IPv4 或者 IPv6 协议相关,与 IPv4 或者 IPv6 协议均无关。如下所示的目录结构反映了与 IPv4 协议相关的 Netfilter 模块的存在方式:
如下所示的目录结构反映了与 IPv6 协议相关的 Netfilter 模块的存在方式:
以上两个目录结构中的模块均只能在 IPv4 和 IPv6 协议下工作,他们是 Linux 内核版本 2.6.14 下的产物。而为了使得对 Netfilter 模块的管理更加简单和高效,从 Linux 2.6.14 内核版本之后,Netfilter 的模块就只有如下的目录结构方式,它们都是与协议无关的,因而能够工作在 IPv4 和 IPv6 网络协议环境下:
因为 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 用户空间工具之前,要对系统做某些修改,主要有如下选项须要配置修改:
上述配置项的修改,均需要在 Linux 内核中进行配置,进入系统源代码所在目录后,使用如下命令可以进入内核配置选项,对上述选项进行选择即可:
下面是安装源代码包的步骤:
安装完成后,就可以启动防火墙了,下面是启动 iptables 的命令:
如果想要在系统启动的时候也启动该防火墙服务,那么可以使用 setup 命令,然后进入 System service 选项,选择 iptables 守护进程即可。 通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用 Netfilter/IPTables 系统提供的特殊命令 iptables 建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加 / 除去 / 编辑规则的命令的一般语法如下:
不难看出,一条 IPTables 规则包含如下 5 个基本元素:
[-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat 和 mangle。该选项不是必需的,如果未指定,则 filter 用作默认表。filter 表用于一般的信息包过滤,包含 INPUT、OUTPUT 和 FORWAR 链。nat 表用于要转发的信息包,它包含 PREROUTING、OUTPUT 和 POSTROUTING 链。如果信息包及其头内进行了任何更改,则使用 mangle 表。该表包含一些规则来标记用于高级路由的信息包以及 PREROUTING 和 OUTPUT 链。 command 部分是 IPTables 命令的最重要部分,它告诉 IPTables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。主要有如表 1 所示的命令。
IPTables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用匹配和特定于协议的匹配。这里,将研究可用于采用任何协议的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其说明,如表 2 所示。
前面已经讲过,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明,如表 3 所示。
编写规则示例一:基本规则 下面将给出运用上述框架理论形成规则的一些简单示例,以供读者在实际的应用过程中进行模仿和使用: (1)接受来自指定 IP 地址的所有流入的数据包:
(2)只接受来自指定端口(服务)的数据包:
(3)允许转发所有到本地(198.168.10.13)smtp 服务器的数据包:
(4)允许转发所有到本地的 udp 数据包(诸如即时通信等软件产生的数据包):
(5)拒绝发往 WWW 服务器的客户端的请求数据包:
(6)允许目的为指定端口的 tcp 数据包进入:
(7)允许来源为指定端口的 tcp 数据包进入:
(8)丢掉 SYN 和 ACK 标志位置位的数据包:
编写规则示例二:进行碎片检测及流量控制 (1)检查 IP 碎片:在 TCP/IP 网络中,链路层具有最大传输单元 MTU 这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的 MTU 是 1500。如果 IP 层有数据包要传,而且数据包的长度超过了 MTU,那么 IP 层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于 MTU,这些被分段的片段就成为 IP 碎片。那么,如果在防火墙处不对 IP 碎片进行特别处理的话,那么有可能部分 IP 碎片会被防火墙拦截,从而影响到接受端对这些碎片的还原,并最终影响到信息的完整性和可用性问题,所以,下面的例子给出防火墙允许 IP 碎片通过的规则:
需要特别留意上述规则中的 -f 选项,它指定了第二个以及以后的 IP 碎片将由防火墙来处理通过,否则的话,考虑下面的规则,防火墙有可能对其第二个及其以后的 IP 碎片进行拦截,从而影响正常的信息流通:
(2)速率限制:iptables 提供了非常健全的速率控制机制,主要用来限制由外向内的单位时间内通过的数据包个数,这样做的一个直接的好处就是尽可能地抑制前面多次提到的拒绝服务攻击或者是分布式拒绝服务攻击,因为这两种攻击的一个非常典型的表现就是单位时间内有很多数据包涌向目的地。所以,我们可以使用下面的规则来限制单位时间内允许通过防火墙,从而进入被保护网络的数据包个数:
上述两条规则分别限制 1 秒内和 1 分钟内通过的数据包个数不能超过 200 和 10000 个。当然,在实际应用中,也可以通过 /second、/minute、、/hour、/day 这样的时间间隔来进行设定,并且,其中诸如 200 和 10000 这些具体数值的设定需要用户根据具体情况和经验来进行设定,没有规定的数值可循。 另外,在设定速率限制后,还可以设定超过该限制所触发的一些处理事件,比如说直接丢弃。下面的规则表示当速率超过 200 限制后,将直接对后续数据包进行丢弃:
编写规则示例三:保障网络服务安全 在上一小节我们根据 IPTables 的规则编写原则介绍了一些简单的使用其进行数据包过滤的例子,由于 IPTables 在实际生活中得到了非常广泛的使用,本节将介绍一个使用其保障网络服务安全的例子,以使用户能够在实际使用中举一反三。 在这个应用中,我们将需要使用 IPTables 防火墙保护企业网络提供的对外的公共 Internet 服务,这些服务包括 WWW 服务、FTP 服务、SMTP 服务以及 DNS 服务(具体的网络拓扑请参见图 4)。因此,这些服务起都具有有效的 Internet 地址。 为了将内部网段 210.10.18.0/24 与 Internet 隔离,在内部网络和 Internet 之间使用了包过滤防火墙。具体的 IP 地址设置如下:
本应用的主要目的是对企业网提供各种服务的服务器提供保护,以使他们免受来自于外网 Internet 恶意用户和流量的攻击和危害。在配置过程中,需要根据本文前面部分介绍的知识进行规则编写等工作,具体的步骤如下: (1)建立有关的脚本文件:在 /etc/rc.d/ 目录下用 touch 命令建立空的脚本文件,执行 chmod 命令添加可执行权限。
(2)编辑 /etc/rc.d/rc.local 文件,在末尾加上 /etc/rc.d/firewall-for-networkservice 以确保开机时能自动执行该脚本,运行如下命令:
(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)定义规则重要使用的相关变量
3)刷新基本的链规则,并禁止转发任意包
4)设置有关保护服务器的包过滤规则,并且注意由于服务器 / 客户机交互是双向的,所以不仅仅要设置数据包出去的规则,还要设置数据包返回的规则,如下所示:
(4)执行脚本,使配置规则立刻生效
到现在为止,有关使用防火墙来保障网络服务的配置就完成了,通过执行上面的脚本,我们建立了一个相对完整的防火墙。由于该防火墙只对外开放了有限的几个端口,因此能够有效地限制除这几个服务之外的流量进入,从而达到保证安全的目的。当然,这个例子还非常简单,用户还可以在实际中通过针对具体服务的细化防火墙配置,比如限制外部网络并发连接 WWW 服务的 TCP 请求个数、限制外网访问 FTP 服务器的 IP 地址列表等来进行。这里只是给出一个简要的示例,以达到抛砖引玉的目的。 作为本系列的第一篇文章,本文详细介绍 Netfilter/IPTables 防火墙框架的原理、安装、启动以及简单实战应用。在下一篇,我们将对应用 Netfilter/IPTables 防火墙框架进行 NAT、DMZ 应用进行介绍,并给出防火墙的实际安全部署建议。
学习
讨论
转自:http://www.ibm.com/developerworks/cn/linux/1307_liyang_firewall1/index.html?ca=drs- |