APP下载

利用Iptables构建网络防火墙

2017-11-28张德杨

河南科技 2017年19期
关键词:IP地址数据包路由

张德杨

利用Iptables构建网络防火墙

张德杨

(河南省科学技术信息研究院,郑州 河南 450003)

随着互联网的迅速发展和普及,网络给人们提供便利的同时,也给黑客攻击提供了机会,网络安全已经越来越受到人们的关注。防火墙是防御网络攻击和保护网络安全的主要手段,经过多年的发展,已经成为网络管理中不可或缺的安全技术。本文先介绍Linux内核中Iptables的工作原理和基本语法规则,然后举例说明如何使用Iptables设计一个网络防火墙。

防火墙;Iptables;Netfilter

防火墙是指一个由硬件和软件组合而成,在不同网络或网络安全域之间构建保护措施的网络安全系统。被隔离的网络之间通信需要经过防火墙来传输数据,防火墙通过访问控制机制,决定哪些数据允许或禁止通过,从而达到保护网络安全的目的。

Linux2.4以上版本内核中提供了一个非常优秀的防火墙工具Iptables,其主要具有数据包过滤(Filter)、网络地址转换(NAT)和数据包处理(Mangle)等功能。使用Iptables来构建网络防火墙是一种性价比较高的网络安全解决方案,可以有效阻止网络攻击,保护网络安全。

1 Iptables的实现原理

Iptables是管理内核包过滤的工具,真正执行过滤规则的是netfilter及其相关模块。netfliter是Linux内核中的一个通用架构,由一系列表(tables)组成,每个表由若干链(chains)组成,而每条链中由一条或数条规则(rule)组成。

netfliter有filter、nat、mangle、raw 4种内建表,默认表为filter,有INPUT、FORWARD和OUTPUT三个链,用于实现数据包过滤;nat表有PRER0UTING、POSTROUTING和OUTPUT 3个链,用于实现网络地址转换;mangle有PREROUTING、OUTPUT、FORWARD、INPUT 和 POS⁃TROUTING 5个链,用于实现数据包处理;raw表有PRE⁃ROUTING和OUTPUT2个链,用于实现在连接跟踪前处理数据包。这4个表的优先级别是raw>mangle>nat>filter,其中raw表不常用,本文不做详细介绍。

当一个数据包到达某个链时,系统从第一条规则开始检查该数据包是否符合该规则定义的条件:如果符合,系统将按照该规则定义的方法处理该数据包;如果不符合,则继续检查下一条规则。最后,如果该数据包不符合该链中所有规则,系统将按照该链默认的策略来处理该数据包[1]。

Iptables对数据包的处理流程如图1所示,基本步骤如下。

图1 Iptables对数据包的处理流程图

①数据包到达网络接口,如eth0,接口把数据包发往netfilter,数据包进入netfilter。②进入raw表的PRE⁃ROUTING链,在此可以进行连接跟踪处理。③进入man⁃gle表的PREROUTING链,在此可以修改数据包TOS等以实现QOS。④进入nat表的PREROUTING链,在此可以做DNAT,如更改数据包的目标IP地址等,但不要做过滤。⑤数据包到达路由,路由根据路由表判断数据包的目的地址。如果目的地址是本机,数据包被转给intput链处理;如果目的地址不是本机,数据包被转给forward链处理。

按照数据包的目的地址是不是本机,可以分为以下两种情况。

(1)数据包的目的地址不是本机。①进入mangle表的FORWARD链。②进入filter表的FORWARD链,在此可以对所有转发的数据包进行过滤。注意:转发的数据包方向是双向的。③进入mangle表的POSTROUTING链。④进入nat表的POSTROUTING链,在此可以做SNA,比如更改数据包的源IP地址等,但不要做过滤。⑤数据包离开netfilter,通过网络接口出去,如eth1。

(2)数据包的目的地址是本机。①进入mangle表的INPUT链。②进入filter表的INPUT链,在此可以对流入的所有网络接口数据包进行过滤。③数据包进入本地主机进程进行处理,如果需要外发数据包,或本地主机进程自身需要外发数据包,则数据包经过路由后被送往OUT⁃PUT链。④进入raw表的OUTPUT链,在此对本地的数据包进行连接跟踪处理。⑤进入mangle表的OUTPUT链,在此可以修改数据包,但不要做过滤。⑥进入nat表的OUTPUT链,在此可以对本机发出的数据包做NAT,再次进行路由选择。⑦进入filter表的OUTPUT链,在此可以对数据包进行过滤。⑧进入mangle表的POSTROUTING链,同上一种情况的第③步。注意,此处不仅对经过的数据包进行处理,还对本机产生的数据包进行处理。⑨进入nat表的POSTROUTING链,同上一种情况的第④步。⑩处理后的数据包离开netfilter,通过网络接口出去,如eth1。

如果该数据包的回复包进入netfilter,则不需要检查任何规则,因此Iptables具有状态(Statefu1)机制,该状态机制可以减少访问规则的设置,提高访问效率,增加系统性能。

2 Iptables的语法规则

Iptables通过添加、修改或删除规则配置出各种包过滤策略,基本语法如下。

iptables[-t表]lt;命令gt;[链][规则号码][匹配条件][-j动作]

表指filter、nat、mangle、raw等,该选项不是必需的,缺省的表为filter。

命令包括:新建(-N)、添加(-A)、插入(-I)、删除(-D)、替换(-R)、设置链默认规则(-P)、清空(-F)、查看(-[vxn]L)等。

链指表中包含的链,如 INPUT、OUTPUT、FOR⁃WARD、PREROUTING、POSTROUTING等。

规则号码指链中规则顺序号。

匹配条件包括:流入接口(-i)、流出接口(-o)、来源地址(-s)、目的地址(-d)、协议类型(-p)、来源端口(--sport)、目的端口(--dport)等。

动作包括:通过(ACCEPT)、丢弃(DROP)、拒绝(RE⁃JECT,同DROP但回传错误消息)、返回(RETURN)、目的地址转换(DNAT)、源地址转换(SNAT)、动态源地址转换(MASQUERADE)、重定向(REDIRECT)等。

此外,还有如下附加模块:按包状态匹配(state)、按来源MAC匹配(mac)、按包速率匹配(limit)、多端口匹配(multiport)等。

举例说明:

iptables-t filter-A INPUT-p tcp–s192.168.1.0/24-d 218.28.28.28--dport 80–ieth1-o eth0-j AC⁃CEPT

-t filter:filter是默认表,可省略,-t用来调用表。

-A:在指定的链末添加一条规则。

图2 网络拓扑图

-p:协议类型,包括tcp、udp、icmp等中的一个或者全部,也可以是数值,代表某一个协议,还可以使用在/etc/protocols中定义的协议名。在协议名前加上“!”表示相反的规则。数字0相当于all,默认选项,匹配所有协议。

-s:指定源地址,可以是主机名、网络名和IP地址。

-d:指定目标地址。

--dport:指定目标端口或端口范围;--sport指定源端口或端口范围。

-i:接收该包的接口名称。

-o:发送该包的接口名称。

-j:指定规则的动作。

此规则的意义是:添加一条数据包过滤规则,允许源地址是192.168.1.0/24网段主机的数据包进入网卡eth1,通过网卡eth0使用TCP协议访问目的地址是218.28.28.28主机的8O端口。

3 防火墙实现

通过以上分析可以看出,使用Iptables可以设计出满足各类需求的防火墙系统。下面以一个Iptables具体应用为例,演示如何利用Iptables实现包过滤防火墙。

使用一台PC服务器当作防火墙,操作系统为Cen⁃tOS6,安装有3块网卡,其中eth0连接外部Internet,IP地址为222.22.22.22;eth1连接内部局域网,IP地址为192.168.1.1;eth2连接服务器区(DMZ),IP地址为192.168.10.1。网络拓扑如图2所示。

该防火墙系统实现的目标是:网络进行NAT地址转换,同时根据数据包的端口和状态特征进行包过滤。In⁃ternet和Intranet用户可以访问DMZ区服务器提供的服务;DMZ区服务器和Intranet计算机可以访问Internet上的服务;Internet用户不能访问Intranet计算机;防火墙对DMZ和Intranet数据包进行地址转换,起到IP伪装和地址复用的作用。脚本如下所示。

#打开ip转发功能

echoquot;1quot;gt;/proc/sys/net/ipv4/ip_forward

#解決Linux NAT ip_conntrack∶table full的方法

echo quot;86400quot; gt;/proc/sys/net/ipv4/netfilter/ip_conn⁃track_tcp_timeout_established

#加载对ftp协议支持的模块

modprobe ip_nat_ftp

#ftp自动追踪模块,提供对某些网络游戏在线升级的支持

#modprobe ip_conntrack

#modprobe ip_conntrack_ftp

#清除所有链的规则,设定防火墙禁止一切通信的默认策略。

iptables-F

iptables-t nat-F

iptables-t mangle-F

iptables-X

iptables-t nat-X

iptables-t mangle-X

iptables-Z

iptables-t nat-Z

iptables-t mangle-Z

#设定filter table的默认策略

iptables-P INPUT DROP

iptables-P FORWARD DROP

iptables-P OUTPUT ACCEPT

iptables-t nat-P PREROUTING ACCEPT

iptables-t nat-P POSTROUTING ACCEPT

iptables-t nat-P OUTPUT ACCEPT

iptables-t mangle-P PREROUTING ACCEPT

iptables-t mangle-P INPUT ACCEPT

iptables-t mangle-P FORWARD ACCEPT

iptables-t mangle-P OUTPUT ACCEPT

iptables-t mangle-P POSTROUTING ACCEPT

#INPUT

iptables-A INPUT-s 127.0.0.1-d 127.0.0.1-j ACCEPT

#允许192.168.1.2进入防火墙管理

iptables-A INPUT-i eth1-s 192.168.1.2-j AC⁃CEPT

iptables-A INPUT-m state--state ESTAB⁃LISHED,RELATED-j ACCEPT

#DMZ Section

iptables-A FORWARD-ieth2-o eth0-s 192.168.10.0/24-j ACCEPT

iptables-A FORWARD-p tcp-o eth2-d 192.168.10.2--dport 80-j ACCEPT

iptables-A FORWARD-p tcp-o eth2-d 192.168.10.3--dport 21-j ACCEPT

#限速,暂时不用

#iptables- A FORWARD- p tcp- d 192.168.10.2--syn-m connlimit--connlimit-above 10-j DROP

#iptables- A FORWARD- p tcp- d 192.168.10.2--syn-m limit--limit 1/s-j ACCEPT

#LAN Section

iptables-A FORWARD-ieth1-o eth0-s 192.168.1.0/24-j ACCEPT

iptables-A FORWARD-m state--state ESTAB⁃LISHED,RELATED-j ACCEPT

#DNAT

iptables-tnat-A PREROUTING-p tcp-d 222.22.22.22--dport80-jDNAT--to-destination 192.168.10.2∶80

iptables-tnat-A PREROUTING-p tcp-d 222.22.22.22--dport21-jDNAT--to-destination 192.168.10.3∶21

#SNAT

iptables-tnat-A POSTROUTING-oeth0-j SNAT--to 222.22.22.22

#解决DMZ服务器访问自身提供的服务问题

iptables-tnat-A POSTROUTING-ptcp-o eth2- s 192.168.10.0/24- d 192.168.10.0/24- j SNAT--to 192.168.10.1

#如果Intranet区有多个网段,需设定路由,同时在eth1连接的路由器上设置反向路由

#route add- net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth1

上述脚本比较通用,功能强大,便于扩展。在该实例中,“先拒绝所有的数据包,然后再允许需要的”,这是一般防火墙策略的基本原则,这种配置扩展性好,如果需要增加功能服务,只需要增加相应的配置设置就可以实现。Iptables除了数据包过滤等基本功能外,还可以加载很多实用模块来实现复杂的功能,可以构建出支持连接状态的防火墙。

CentOS6默认安装了Iptables,系统启动时自动启动Ipt⁃ables服务,如未启动,可手工启动(service iptables start)。

4 结语

Iptables是Linux内置的防火墙模块,其功能强大,可以用于数据包过滤、NAT和数据包转发。本文介绍了Ipt⁃ables实现原理和基本语法,并结合实例说明如何使用Iptables构建Linux系统防火墙。对于中小规模网络,结合实际构建基于Iptables的防火墙,是一个性价比较高的方案,可以简单、高效和经济地保护网络安全。

[1]O Andreasson.Oskar Andreasson,Iptables Tutorial 1.2.2[EB/OL].[2017-09-05].https∶//www.frozentux.net/iptables-tutori⁃al/iptables-tutorial.html.

Building a Network Firewall Based on Iptables

Zhang Deyang
(Henan Institute of Scienceamp;Technology Information,Zhengzhou Henan 450003)

With the rapid development and popularization of the Internet,the network provides people with convenience,but also provides opportunities for hacker attacks,network security has attracted more and more attention.Firewall is the main means to defend network attacks and protect network security.After years of development,it has become an indispensable security technology in network management.This pa⁃per presented the work theory of Iptables embedded in Linux kernel and its basic grammatical rule,and then an instance ofnetwork firewall based on Iptables was designed.

firewall;iptables;netfilter

TP393.08

A

1003-5168(2017)10-0058-04

2017-09-03

张德杨(1979-),男,工程师,研究方向:计算机技术。

猜你喜欢

IP地址数据包路由
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
铁路远动系统几种组网方式IP地址的申请和设置
铁路数据网路由汇聚引发的路由迭代问题研究
多点双向路由重发布潜在问题研究
一种基于虚拟分扇的簇间多跳路由算法
SmartSniff
探究路由与环路的问题
IP地址切换器(IPCFG)
基于SNMP的IP地址管理系统开发与应用