运用Linux系统打造NAT防火墙的技术研究与实现
2013-09-25吉承平
祝 虹,吉承平
(扬州职业大学 江苏 扬州 225009)
随着因特网的快速发展,IP地址的匮乏及网络安全等问题日益突出。NAT技术提供了一种解决网络内多台计算机共享一个公共IP地址,就能与 Internet互联的问题,缓解了IP地址资源匮乏,节省了公网 IP地址;同时,NAT还具有防火墙的功能,通过NAT设置,可以对外部网络隐藏内部的网络结构,限制从外网到内网的非授权访问,维持了局域网的私密性,增加网络的安全性,减少非法用户通过Internet入侵内部网络的机会[1-5]。
文中在Linux系统下,详细阐述了如何设置基于NAT的防火墙,从准备工作开始,逐步定义规则,到提供有状态服务,编辑及运行Shell脚本,最后进行检验NAT防火墙的作用和效果。
1 NAT技术的原理
所谓NAT技术就是网络地址转换[6],这种转换通常发生在内部网络的自定义IP地址(不需要经过申请)即假的IP地址的电脑和外部通讯时,通过网络中的NAT网关,把内部IP地址翻译成外部合法地址后传送到外部网络。同样,由外部网络进入内部网络时,也经过相同的过程。
NAT技术的基本原理就是通过一个外部地址或几个外部地址转换成局域网的内部地址来实现内部的所有主机访问Internet[7-8]。NAT技术是把TCP和UDP以及ICMP等的一部分信息通过透明中继,而TCP/IP在NAT网关上运行的软件与其他的普通网关软件不一样,一般来讲,普通的路由器是根据IP包中的目的地址和路由表将IP数据包从一个网络发送到另一个网络,而NAT技术的IP数据包传送并非凭借目的IP地址,它的NAT网关是内网与外网Internet之间一种帧中继IP数据包转换,并且它的中继是面向连接的,如图1所示。
从NAT改变封包的地址类型来看,NAT可以分为两种:Source NAT (SNAT)与 Destination NAT (DNAT)。 NAT 规则的表格含有3个列表叫做 ‘chains’:每一条规则都按顺序检查﹐直到找到一个相符的比对。具体流程如图2所示。
2 Linux系统下打造NAT防火墙的方案分析
NAT作为防火墙具有以下优势:
1)NAT可以作为过滤器,限制内网与外网的连接。当端口地址在NAT内动态分配时,NAT域中特定主机被外网攻击比较困难。
图1 NAT在内部网络LAN和外部网络WAN之间中继IP数据报的连接Fig.1 NAT between the internal network LAN and external networks WAN connection of the relay IP datagrams
图2 NAT通信过程Fig.2 NAT communciationn process
2)将NAT设备和应用网关结合起来,NAT可以具有透明路由的功能。这样可以对应用层中含有IP地址的信息进行翻译,确保数据报中不出现私有地址的信息。
3)NAT设备是作为因特网主机存在的,容易受到外来攻击,如Ping Flood、SYN Flood。在Linux系统下打造NAT防火墙,可以对NAT设备进行保护。
4)当NAT设备处于不安全域中时,应用级的负载可以实现端对端的加密,这样负载中就不会包含运输层的端口信息、IP地址信息,提高网络安全性。
3 基于Linux的NAT防火墙的实现与应用实例
3.1 设置准备
1)基本思路 首先需要在Linux系统中创建基于NAT防火墙,它必须能够在服务器或路由器上运行,其功能就是只允许某些类型的通讯数据流通过,在配置防火墙时,为增强其安全性,必须设置能删除或者拒绝对安全性有威胁的通讯数据流。
2)Linux系统内核配置 安装之后,“iptables”命令便可使用进入 /usr/src/linux,输入 “make menuconfig”或“make xconfig”;并启用一些内核的网络功能。
3)配置链策略 “iptables-P”命令用于设置链的缺省目标和包过滤规则策略,INPUT是一个内置链,iptables-P I NPUT DROP命令将INPUT链的缺省目标指定为DROP,告诉内核应删除或丢弃所有与INPUT规则链中都不匹配的信息包。规则是先拒绝所有信息包,然后再允许所需要的信息包。
由于该项目为滁河两侧堤顶路周边的景观设计,因此其防浪墙成为该项目出现频率最多的一个元素,作为左岸项目的一大亮点,为了对与六合老城区以及河对岸的景观带形成对比,此次防浪墙采用异型混凝土塑形,每一段的造型都经过二次深化设计,各不相同。
3.2 定义规则
同时,要为有两个网络接口 eth0和eth1的机器设计防火墙。eth0连接到内部网络,使用私有地址192.168.1.0/16。而eth1连接到通过局域网与因特网进行连接。添加以下命令:
iptables-P INPUT DROP
iptables-A INPUT-i!eth1-j ACCEPT
这行附加的 "iptables-A"将一个新的包过滤规则添加到 INPUT链的末端。添加此规则之后,INPUT链就包含了一个规则和缺省删除策略。现在,让我们看一下当前防火墙有什么功能。
3.3 设置有状态防火墙
与其在基于静态协议特征的防火墙上开一个洞,还不如使用Linux新的连接跟踪功能来使防火墙根据包的动态连接状态做出判定。conntrack通过将每个包与一个独立的双向通信信道或连接相关联来进行判定。
第一种连接状态叫作NEW。
第二种连接状态是:ESTABLISHED状态 就是指建立连接,表示正在通讯。
最后的状态是:INVALID状态。INVALID包是指不属于ESTABLISHED、NEW、RELATED 3种类别,通常将其视为恶意的数据包而丢弃。但它不会被自动丢弃;需要插入适当的规则,并设置链策略,以便正确处理这些数据包。
3.4 改进有状态防火墙
明确关闭ECN:前面提到过应当关闭 ECN(明确拥塞通知),以便因特网通信可以正确工作。但由于种种原因,有可能会启用了 ECN。由于这些原因,最好使用 /proc接口来明确禁用 ECN,处理拒绝。
目前,已经删除了所有来自因特网的未经请求的通信流。这样可以阻止讨厌的网络活动,但是它有一些缺点。这种方法最大的问题是闯入者很容易就可以检测到我们正在使用防火墙,因为我们的机器没有应答标准 TCP复位和 ICMP端口不可到达响应,因为向一般机器发送会响应,用于表示对不存在服务的连接失败。
3.5 提供有状态服务
虽然我们要接受一些进入连接,但我们可能并不想接受所有进入连接。最好从“缺省拒绝”策略开始(就象我们现在使用的策略),逐渐开放对那些希望人们可以连接的服务的访问,如 HTTP,SSH,FTP 等。
3.6 编辑及运行防火墙脚本
以上详细介绍了防火墙的整个配置过程,如果要停止防火墙,使用“iptables-FINPUT”将清除 INPUT 链,然后使用“iptables-P INPUT ACCEPT”命令使缺省 INPUT策略切换回 ACCEPT;用“iptables-t nat-F POSTROUTING”命令清除NAT规则。
如果使用这个脚本,先修改脚本的权限,输入”chmod 777 firewall”命令使之具有可执行权限,然后可以通过输入“/bin/firewall stop”来停止防火墙,通过输入 "/bin/firewall start"再启动它。
3.7 检验防火墙及NAT
编辑完防火墙脚本后,我们将分别检验防火墙及NAT是否生效。
启动防火墙前,通过IP地址为202.194.68.55的主机可以“ping”到我们的机器,同时,我们也可以“ping”到对方。当启动防火墙后,输入“iptables-L”命令,可以看到我们想要的防火墙规则均已显示出来了;输入“iptables-L-t nat”命令,可以显示出我们的 NAT配置。此时,对方已经无法“ping”到我们的主机,而我们可以“ping”到对方,这说明防火墙已经生效。
4 需要改进之处
在以上的设计中,我们是通过对Linux操作系统下iptables命令的操作来完成NAT防火墙设置的。但由于iptables有许多表和链,在大多数报文经过这些表和链的规则时,则会明显的降低防火墙的响应速度,使得防火墙的吞吐能力打大折扣,因此,在实践中需要通过与代理服务防火墙结合使用来提高其安全性能,当然如在本系统之前使用硬件防火墙与之配合,就能有效防止DDOS攻击和端口映射,加上Linux的NAT防火墙在对报文的处理时,尽可能减少报文平均经过规则的数量的方法来优化防火墙的性能,这样就能建立起一套相对完整的防火墙系统,以实现对系统的全方位的防护。
5 结束语
Linux操作系统下的iptables可以编写功能强大的防火墙,能按照系统设定的安全策略对防火墙进行过滤,具有配置方便、运行速度快、系统功能强大等优点,但也存在一些缺点,需进一步完善其功能和优化,最好采用混合防火墙来保证内部网络安全。