1、 Linux 下基于 Netfilter/iptables 防火墙的构建随着 Internet 的普及,络的安全显得尤为重要。 Linux 提供的基于 Netfilter/iptables 的防火墙,具有通用性和可扩展的特点,实现了一种性价比较高的安全方案,可以有效地阻止恶意攻击,成为很多络管理员的选择。该文首先阐述了 Netfilter/iptables 防火墙的工作原理,然后详细介绍了 iptables 的用法和各规则链的作用,最后用实例说明如何利用 iptables 建立功能强大的防火墙,有效防范外部攻击,保护内部络安全。 关键词:防火墙;Netfilter;iptables;Linux
2、 中图分类号:TP393 文献标识码:A 编号:1009-3044(2011)19-4550-03 Fireall Establishent Based n Netfilter/Iptables in Linux Kernel JI Gang1,YA Yan2,TANG Huai-u1 (1.Tehnial Supprt enter Fr Atsphere bservatin, Anhui eterlgial Assiatin, Hefei 230031, hina; 2.uhu Tba pany, uhu 241000, hina) Abstrat: ith the ppularizatin
3、 f the internet,netrk seurity is nerned re and reNetfilter/iptables fraerk fireall in Linux Kernel that have the harateristi f general availability and extensible,ipleentatin a liable safety shee effetivelyIt an effetively prevent hstility attak, and bees hie f any adinistratrs f netrk. This paper f
4、irstly intrdues the peratin priniple f Netfilter/iptables fraerk fireall, and then detailedly intrdues the usage f iptables and the funtin f every rule hain. Finally, an exaple is presented fr denstrating h t use iptables t establish fireall, effetively prevent exterir attak and prtet inside netrk s
5、eurity. Key rds: fireall; netfilter; iptables; Linux 随着计算机的普及和互联的发展,人们的工作、学习和生活已经和络技术密不可分,因而,络的安全也就自然成为人们最为关注的问题。为了获得一个安全的络,防火墙的概念被提出,并投入使用。防火墙是一种装置,过滤本地络或者络的某个部分与 Internet 之间的数据传送。 Linux 提供了一个非常优秀的防火墙工具Netfilter/iptables。它完全、功能强大、使用灵活、可以对流入和流出的信息进行细化控制。Linux 提供的防火墙软件包内置于 Linux 内核中,是一种包过虑型防火墙。其中心思想是
6、根据路层 IP 包头中的源地址、目的地址及包类型等信息来控制包的流向。更彻底的过滤则是检查包中的源端口、目的端口,以及连接状态等信息。 1 NetfilterIptables 防火墙工作原理 防火墙是一种创建从 Internet 安全访问 Internet 的方法,它授权用户访问 Internet 的权利,同时保护内部络免受直接来自 Internet 访问的侵害。 Linux 环境下防火墙系统的实现包括两个方面,Netfilter 提供可扩展的结构化底层框架,在此框架之上实现的数据包选择工具 iptables 负责对输入、输出的数据包进行过滤和管理等工作。Netfilter 和 iptable
7、s 二者共同实现了 Linux 下的防火墙系统。 1.1 Netfilter 框架原理 Netfilter 是 Linux 核心中一个抽象、通用架构,用于扩展各种服务的结构化底层服务1。Netfilter 组件也称为内核空间(kernel spae),是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。Netfilter 是 Linux 实现的防火墙框架, Netfilter 框架提供了一系列的“表”(tables),每个表由若干“链”(hains)组成,其实质是处理数据包时,提供的一系列的检查点,又称为钩子函数。而每条链可以由一条或数条“规则”(rules)
8、组成,对每一个流经的数据包,Netfilter 根据其流动方向,会利用相应的钩子函数按照规则进行检查。Netfilter 在 IPV4 中定义了 5 个检查点2,其位置如图 1 所示。方框为检查点,箭头表示数据包的流向。 数据包进入系统,在第一个检查点 NF_IP_PRE_RUTING 进行处理,然后进入路由选择,判断数据包是需要转发还是发给本机的。若该数据包是发往本机的,则该数据包经过检查点 NF_IP_LAL_IN 处理后传递给上层协议;若该数据包应该被转发则它被NF_IP_FRARD 处理,经过转发的数据包经过最后一个检查点 NF_IP_PST_RUTING 处理后,再传输到络上。本地产
9、生的数据包经过检查点 NF_IP_LAL_UT 处理后再进行路由选择处理,然后经过 NF_IP_PST_RUTING 处理后发送到络上。上述的五个检查点具体含义如下: 表 1 5 个检查点的含义 数据包处理过程中,会检查相应的钩子函数在链表中是否有钩子函数注册,如果注册了该钩子函数则监听数据包,调用该钩子函数,并根据钩子函数返回的结果决定下一步的动作。钩子函数的返回结果值有 5 个值,分别如下: NF_DRP:通知内核丢弃该数据包; NF_AEPT:通知内核接受该数据包,继续其旅途; NF_STLEN:通知内核忘掉该数据包,有本模块接管; NF_QUEUE:通知内核将该数据包传递到用户空间;
10、NF_REPEAT:通知内核再次调用该 hk 函数(需要防止死循环)。 1.2 iptables 概述 1.2.1 iptables 介绍 iptables 是 Linux 内核提供的一个强大的包过滤管理工具3,可以根据需要随时把新特性加入到内核中而不需要重新编译内核。它通过表、链和规则来实现内核功能,表中包含链,不同的表对应包含不同的链。iptables 中包括三个规则表,它们分别是:过滤表( filter),络地址转换表(nat),数据包处理表(angle),它们的处理功能如下: filter 表:包含 INPUT 链、 FRARD 链和 UTPUT 链,该表不会对数据包进行修改,只对数据
11、包进行过滤。nat 表:包含 PRERUTING 链、UTPUT 链和 PSTRUTING 链。其中,PRERUTING 实现对所需转发数据包的源地址进行地址转换,PSTRUTING 实现对所需转发数据包的目的地址进行地址转换,UTPUT 实现对本地数据包的目的地址进行地址转换。 angle 表:包含PRERUTING 链和 UTPUT 链,实现对数据包的修改或给数据包附上一些外带数据。 1.2.2 iptables 语法格式 配置 iptables 防火墙可以在 shell 中使用 iptables 命令完成,也可以编写Iptables.sh 脚本集合多条语句一次执行。无论哪种方式,ipta
12、bles 命令格式基本上是一样的。iptables 添加、删除、编辑规则的一般语法格式如下(特别注意的是,编写规则时严格区分大小写): iptablest tableandath target table 一般指 Netfilter/iptables 内置的三个表:filter 、nat 或 angle。若在t table处不指定表名,默认使用 filter 表来执行所有的命令。 and 告诉程序该做什么,操作命令有A(APPEND) 、I(INSERT) 、D (DELETE ) 、R(REPLAE)分别表示添加、插入、删除、替换一条规则,-P(PLIE)表示设置某个链的默认规则,F(FLUSH)表示清空规则,L(LIST)表示列出规则。 ath 细致地描述了包的某个特点,以使这个包区别于其它所有的包。在这里,我们可以指定包的或目的 IP 地址、络接口、或目的端口、协议类型等。 最后是数据包的目标所在 target。若数据包符合所有的 ath,内