Linux环境下NAT服务与安全研究

时间:2022-11-16 20:10:08 浏览量:

【 摘 要 】 最早NAT是用来解决互联网IP耗尽问题的,随着网络技术的发展、安全需求的提升,NAT逐渐应用到防火墙技术里,把个别IP地址隐藏起来不被外部发现,使外部无法直接访问内部网络设备,从而成为了隔离内外网络、保障网络安全的一种手段。本文基于Linux平台环境详细阐述了NAT服务的技术原理,通过应用实例描述了NAT配置、管理过程,分析了存在的安全问题。

【 关键词 】 NAT;网络地址转换;NAT安全;静态转换;动态转换

【 中图分类号 】 TP393.08【 文献标识码 】 A

Study on NAT Service and Security Policy under Linux

Yang Ming-hua 1Wang Yun-hui2 Zheng Jian-qun 1 Wang Zhen-hai 3

(1.The Second Artillery Equipment Academy Beijing100085;2.Beijing Technology and Business University Beijing100048;

3.Naval University of Engineering Tianjing300450)

【 Abstract 】 The earliest NAT technology is used to solve the problem of Internet IP exhaustion. With the development of network technology, security requirements are enhanced deeply. NAT technology is gradually applied to the firewall inside. Some IP addresses is hidden from the outside, so that the external network can not directly access the internal network resource. Thus NAT is becoming isolated means between inside and outside network and some networks are protected. In this paper ,Based on the Linux platform environment , the principle of NAT technology services is illustrated and application examples is described step by step .Some security problems is analyzed.

【 Keywords 】 nat; network address translation; nat security; static converters; dynamic conversion

1引言

目前IP地址正逐渐耗尽,要想在ISP处申请一个新的IP地址已不是一件很容易的事了。解决这一问题的方法之一就是使用NAT(Network Address Translator,网络地址转换)服务。

网络地址转换服务用于将一个地址段映射到另一个地址段,即在内部网络中使用内部地址(私有IP地址),通过NAT把内部地址转换成合法的IP地址在Internet使用。当一个私有网络要通过在Internet注册的公有IP连接到外部时,位于内部网络和外部网络中的NAT路由器就负责在发送数据包之前把内部IP转换成外部合法IP地址,使多重的Intranet子网可以使用相同的IP访问Intemet,从而减少注册IP地址的使用。此外,NAT还可以防止外部主机攻击内部主机或服务器。

2NAT的工作原理

NAT是将一个地址段映射到另一个地址段的标准方法。它是一个根据RFC 1631开发的IETF标准,允许一个IP地址段以一个公有IP地址出现在Internet上。NAT可以将内部网络中的所有节点的私有地址映射为合法的IP地址。所谓私有地址(Private Address)是专门为组织机构内部使用而划定的,属于非注册地址。使用私有IP地址是无法直接连接到Intemet的,但是能够用在局域网内部地址上,用于扩展网络。因此,一般公司内部网络都使用私有地址,而所有的内部网络连接到Internet时,都使用NAT。IP地址中有以下几段可以作为私有地址使用。如表1所示。

NAT按照所采用的地址转换技术可以分为三类,即静态NAT,动态NAT和端口NAT。因此动态NAT端口NAT则是把内部地址映射到外部网络的一个IP地址的不同端口上。

NAT服务器存在于内部和外部网络接口处,只有当内外部网络之间进行数据传送时,才进行地址转换。如果地址转换必须依赖手工建立的内外部地址映射表来运行,则称为静态网络地址转换,这样的NAT服务器称为静态NAT。静态NAT的设置最为简单,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。如果NAT映射表是由NAT服务器动态建立的,对网络管理员和用户是透明的,则称为动态网络地址转换,采用这种方式的NAT服务器被称为动态NAT。动态NAT是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。这一系列外部网络的合法地址放在地址池中,也常被称为NAT池。此外,还有一种服务与动态NAT类似,但它不仅改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口,这一服务被称为网络地址端口转换。采用这种方式的NAT服务器被称为端口NAT。根据不同的需要,各种NAT方案有利有弊。

在NAT服务器上都维护一张状态表,成为NAT表或NAT映射表。该表记录每个数据包在NAT服务器上被转换的情况。

2.1静态地址转换

静态地址转换过程如下:

在NAT服务器上建立静态NAT映射表。

静态NAT表的格式如下:

ipnatinsidesourcestatic内部本地地址内部全局地址

例如,NAT服务器上的静态NAT表如表2所示。

当内部主机(IP地址为192.168.10.122)需要建立条到Intemet的会话连接时,首先将请求发送到NAT服务器上。NAT服务器接收到请求后,会根据接收到的请求数据包检查NAT表。

如果已为该地址配置了静态地址转换,NAT服务器就使用相对应的内部公有IP地址,并转发数据包,否则NAT服务器不对地址进行转换,直接将数据包丢弃。NAT服务器使用202.98.133.45替换内部本地IP(192.168.10.122)的过程,如图1所示。

Intemet上的主机接收到数据包后进行应答(这时主机接收到的是202.98.133.45的请求)。

当NAT服务器接收到来自Intemet上的主机返回的数据包后,检查静态NAT表。如果NAT映射表存在匹配的映射项,则使用内部私有IP替换数据包的目的IP地址,并将数据包转发给内部主机。如果不存在匹配映射项则将数据包丢弃。

2.2动态地址转换

动态地址转换同样也是讲内部本地地址与内部全局地址进行一一转换,但是,动态的转换是从内部全局地址池中选择一个未使用的地址,与内部本地地址进行转。

动态地址转换过程如下:

建立一个内部全局地址池。格式如下:

ip nat pool 地址池名称 起始地址 结束地址 掩码

例如,建立地址池dynamic-pool如下:

ip nat pool dynamic-pool 202.98.133.45202.98.133.47 255.255.255.0

表明该地址池的内部全局地址范围是202.98.133.45~202.98.133.47。

当内部主机(IP地址为192.168.10.122)需要建立一条到Internet的会话连接时,首先将请求发送到NAT服务器上。NAT服务器接收到请求后,根据接收到的请求数据包检查动态NAT表。

如果还没有为该内部主机建立地址转换映射项,NAT服务器会决定对该地址进行转换(从地址池中选定一个尚未使用的内部全局地址,建立映射项,并记录会话状态)。例如,如图2所示的动态NAT表中,只有地址池中的202.98.133.46这个本地全局地址尚未使用,则建立该映射项。

如果已经存在该映射项,则NAT服务器使用该记录进行地址转换,并记录会话状态。然后NAT服务器利用转换后的地址发送数据包到Internet主机上。

Internet主机接收到信息后,进行应替,将应答信息刚传给NAT服务器。

当NAT服务器接收来自Internet返回的应答信息后,检查NAT映射表。如果NAT映射表存在匹配的映射项,则使用内部公有IP替换数据包的目的IP地址,并将数据包转发给内部主机。如果不存在匹配映射项则将数据包丢弃。

2.3端口地址转换

端口地址转换本质上也是一种动态地址转换技术,但它允许多个内部本地地址公用一个内部全局地址。对于仅有少量内部全局地址,却需要经常有多个用户连接外部网络的单位使用。

基本步骤如下:当内部主机(IP地址为192.168.10.122,使用端口4449)需要与Internet的某主机建立连接时,首先将请求发送到端口NAT服务器上。端口NAT服务器接收到请求后.会根据接收到的请求数据包检查端口NAT映射表。

如果还没有为该内部主机建立地址转换映射项,端口NAT服务器就会为这个传输创建一个Session,并且给这个Session分配一个端口3200,然后改变这个数据包的源端口为3200。所以原来的192.168.10.122:4449数据包经过转换后变为了202.98.133.45:3200。

类似的,当内部主机192.168.10.144,使用端口80与Internet的某主机建立连接时,端口NAT服务器就会为这个传输创建一个Session,并且给这个Session分配一个端口3300,然后改变这个数据包的源端口为3300。所以原来的192.168.10.144:80数据包经过转换后变为了202.98.133.45:3300。如图3所示。

Internet主机接收到信息后进行应答,并将应答信息回传给端口NAT服务器。

当端口NAT服务器接收到应答信息后,检查端口NAT映射表。如果端口NAT表存在匹配的映射项,则使用内部全局IP替换数据包的目的IP地址,并将数据包转发给内部主机。如果不存在匹配映射项,就将数据包丢弃。

从本质上说,网络地址端口转换不是简单的IP地址之间的映射,而是网络套接字映射。网络套接字由IP地址和端口号组成,当多个不同的内部本地地址映射到同一个内部全局地址时,可以使用不同的端口号来区分它们。

3NAT配置实例

在Linux和Windows环境下配置NAT的实例模型[3,4]如图4所示。

在该模型中,相关设备如下:

在Red Hat Enterprise Linux 5中实现NAT服务器功能。具有两个网卡,第一个网卡IP地址为192.168.57.129/24,第二个网卡IP地址为211.32.26.1/24。

一台Windows客户端,其IP地址为192.168.57.2,网关设置为与之相连的NAT服务器第一个网卡地址192.168.57.129。

一台Linux下的PC充当Web Server,IP地址为211.32.26.120/24,网关设置为与之相连的NAT服务器第二个网卡地址211.32.26.1。

3.1配置NAT服务器

3.1.1设置网络环境

网卡的配置文件保存在/etc/sysconfig/ network-scripts目录下。第一块网卡eth0对应的是ifcfg-eth0,第二块网卡对应的是ifcfg-eth1。

网卡1的配置如下:

DEVICE=eth0

BOOTPROTO=static

HWADDR=00:0C:29:FA:98:1E

ONBOOT=yes

TYPE=Ethernet

USERCTL=no

IPV6INIT=no

PEERDNS=yes

NETMASK=255.255.255.0

IPADDR=192.168.57.129

网卡2的配置如下:

DEVICE=eth0

BOOTPROTO=static

HWADDR=00:53:45:AC:55:18

ONBOOT=yes

TYPE=Ethernet

USERCTL=no

IPV6INIT=no

PEERDNS=yes

NETMASK=255.255.255.0

IPADDR=211.32.26.1

设置完毕后,需要重启Linux或者运行命令“/etc/init.c/network restart”使配置生效。可以使用“ifconfig|more”命令查看配置结果。

3.1.2 使用iptable实现NAT

(1)开启内核路由功能

首先需要打开内核的路由功能。将文件/proc/sys/net/ipv4/ip_forward设置为1。默认情况下,该值为0。使用以下命令:

# echo “1” > /proc/sys/net/ipv4/ip_forward

(2)实现IP伪装

在NAT表中的POSTROUTING链加入一条规则,这条规则表明所有从192.168.57.0/24送出的包都会被伪装(MASQUERADE),这样就能够使用iptables实现NAT命令了。执行以下命令:

# iptables ╞t nat ╞A POSTROUTING ╞s 192.168.57.0/24 ╞j MASQUERADE

输入以上命令后,Linux主机就充当了NAT服务器功能,通过“iptables -t nat -L POSTROUTING”下命令可以查看nat表中POSTROUTING链规则列表。

# iptables -t nat -L POSTROUTING

Chain POSTROUTING (policy ACCEPT)

target prot opt source destination

MASQUERADEall--192.168.57.0/24 anywhere

3.2配置NAT客户端

3.2.1 Windows中的NAT客户端配置

在Windows下配置NAT客户端的方法比较简单,以下为具体操作步骤。

在桌面上的“网上邻居”图标上右击,然后在弹出的快捷菜单中选择“属性”命令,打开“网络连接”窗口。

在“本地连接”图标上右击,然后在弹出的快捷菜单中选择“属性”命令,则系统会打开“本地连接属性”对话框,如图5所示。

选中“Internet协议(TCP/IP)”复选框,然后单击“属性”按钮,系统会打开“Intemet协议(TCP/IP)属性”对话框,如图6所示。

在“默认网关”中输入NAT服务器eth0的IP地址,然后单击“确定”按钮即可完成Windows下的NAT客户端的配置。若Linux服务器上设置了DNS,需要设置DNS服务器的地址。

3.2.2 Linux中的NAT客户端配置

在Linux的Web Server中,只需要将网关设置为NAT服务器的第二块网卡地址即可,如图7所示。

完成以上设置后,在windows中点击浏览器访问Linux上的Web Server,在地址栏输入http://211.32.26.120可以访问位于Linux主机上的Web站点。

在Linxu主机上,查看Web server的http访问日志可以看到一条记录:

211.32.26.1 - - [25/Sep/2007:00:03:06 +0800] "GET / HTTP/1.1" 403 3985 "-" "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.8.0.9) Gecko/20070118 Red Hat/1.5.0.9-10.el5 Firefox/1.5.0.9 pango-text"

对于Linux主机而言,来自192.168.57.2的Windows主机的访问请求,都被认为是从NAT服务器上211.32.26.1发出的。

4NAT的安全问题分析

防火墙是基于网络层的安全系统,它在网络之间执行访问控制策略。防火墙对流经它的通信数据进行分析,并能够过滤掉一些有攻击特征的数据。防火墙可以关闭不使用的端口,禁止特定端口的通信。还可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。一般的防火墙都具有NAT功能,或者与NAT一起配合使用。例如可以使用iptables实现NAT的功能,将NAT应用到防火墙种,可以把个别IP地址隐藏起来不被外界发现,使外界无法直接访问内部网络设备。

经常有人会把NAT和代理服务器相混淆,然而两者是有很大区别的。NAT设备对源机器和目标机器都是透明的(用户看不到),地址转换只在网络边界进行。而代理服务器是不透明的,源机器知道要通过代理服务器发出访问请求,并且,需要在源机器上将目标机器设置为代理服务器,将数据直接发送到代理服务器,由代理服务器将数据转发。代理服务器工作在OSI模型的第四层(传输层),NAT则是工作在第三层(网络层)。由于高层的协议比较复杂,通常来说,代理服务器比NAT要慢一些。

但是NAT占用路由器的CPU资源,加上NAT隐藏了IP地址,跟踪起来比较困难,不利于管理员对内部用户对外部访问的跟踪管理和审计工作。所有NAT技术只适用于内部用户数量较少的应用,如果访问外部网络的用户数量大,而且管理员对内部用户有访问策略设置和访问情况跟踪的应用,还是使用代理服务器较好一些。

如果单纯使用NAT技术,还会遇到几个方面的安全问题。

(1) NAT只对地址进行转换而不进行其他操作,因此,在建立了与外部网络的连接时,NAT不会阻止任何从外部返回的恶意破坏信息。

(2) 虽然NAT隐藏了端到端的IP地址,但并不隐藏主机信息。

(3) Internet上的恶意攻击通常针对机器的“公用端口”,如HTTP的80端口、FTP的21端口和POP的110端口等。虽然NAT可以屏蔽不向外部网络开放的端口,但针对面向公用端口的攻击,它是无能为力的。

(4) 许多NAT设备都不记录从外部网络到内部网络的连接,这会使用户受到来自外部网络的攻击,但由于没有记录可以追查,用户根本无法发觉自己受到过什么攻击。

5结束语

尽管应用NAT技术,具有解决IP地址不足的问题、简化配置和网络设计、使得网络设计更加灵活等优点,同时NAT隐藏了内部IP地址,使其具有一定的安全性,但从上面的分析可以看出,NAT作为单一的网络安全防范措施是不够全面的,需要与其他安全手段配合使用。此外,由于路由器需对每个数据包进行检查,并对需要地址转换的数据包进行操作,会占用大量的路由器CPU时间,所以NAT技术只适用于需要转换地址的机器数量不太多的情况。

参考文献

[1] 鲁顶柱,贺桂英,周东.NAT与防火墙穿透技术研究[J].广东广播电视大学学报,2008,17(3) : 75-79.

[2] 陈晓苏,吴悠.路由器中网络地址转换的一种实现方法[J]. 计算机工程与应用, 2004,40(1):157-159.

[3] 李小玲,周金治.网络地址转换技术在计算机网络上的应用[J].广东科技大学学报,2004,23(2):68-71.

[4] 孔欣,李清平,谢鹏.NAT 技术在无线局域网中的应用[J]. 微型电脑应用.2010, 26(7): 53-56.

[5] 白伟华,津李吉桂.NAT技术及其穿越方案研究[J]. 计算机科学.2005,32(8):44-46.

基金项目:

国家自然科学基金项目(61063042);中国博士后科学基金项目(201104753);北京市自然科学基金项目(4132025)。

作者简介:

杨明华(1977-),男,工程师,博士;主要研究方向和关注领域:网终安全、可信计算技术。

王云会(1990-),男,硕士研究生;主要研究方向和关注领域:无线传感器网络、可信计算技术。

郑建群(1974-),男,江苏建湖县人,第二炮兵工程大学,硕士,高级工程师;主要研究方向和关注领域:信息化应用技术。

王振海(1975-),男,青海西宁人,兰州大学,本科,工程师;主要研究方向和关注领域:计算机网络技术。

推荐访问:环境 研究 服务 Linux NAT