文档库 最新最全的文档下载
当前位置:文档库 › 通过FTP浅谈NAT、NAT ALG与ASPF

通过FTP浅谈NAT、NAT ALG与ASPF

通过FTP浅谈NAT、NAT ALG与ASPF

声明

Copyright ?2005

华为技术有限公司

版权所有,保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本书内容的部分或

全部,并不得以任何形式传播。

?、HUAWEI?、华为?、C&C08?、EAST8000?、HONET?、?、视点?、ViewPoint?、INtess?、ETS?、DMC?、TELLIN?、InfoLink?、Netkey?、Quidway?、

SYNLOCK?、Radium?、雷霆?、M900/M1800?、TELESIGHT?、Quidview?、

Musa?、视点通?、Airbridge?、Tellwin?、Inmedia?、VRP?、DOPRA?、iTELLIN?、

HUAWEI OptiX?、C&C08iNET?、NETENGINE?、OptiX?、iSite?、

U-SYS?、iMUSE?、OpenEye?、Lansway?、SmartAX?、边际网?、

infoX?、TopEng?均为华为技术有限公司的商标。

对于本手册中出现的其它商标,由各自的所有人拥有。

由于产品版本升级或其它原因,本手册内容会不定期进行更新。除非另有约定,

本手册仅作为使用指导,本手册中的所有陈述、信息和建议不构成任何明示或

暗示的担保。

技术支持

技术支援网址:https://www.wendangku.net/doc/656968459.html,客户服务邮箱:support@https://www.wendangku.net/doc/656968459.html,

客户服务电话:8008302118 0755-******** 传真:0755-********

地址:深圳市龙岗区坂田华为总部办公楼邮编:518129

目录

声明 (i)

技术支持 (i)

通过FTP浅谈NAT、NAT ALG与ASPF (1)

1 基本概念 (1)

1.1 FTP的pasv和port方式: (1)

1.2 Nat与Nat Alg (2)

1.3 基于ACL规则的包过滤与ASPF (2)

2 实例分析 (3)

2.1 Nat outbound情况 (3)

2.2 Nat Server情况 (4)

2.3 讨论 (5)

通过FTP浅谈NAT、NAT ALG与ASPF

1 基本概念

1.1 FTP的pasv和port方式:

FTP与其他客户服务器应用程序的不同就是它在主机之间使用两条连接。一条连接用于数据传送,而另一条则用于控制信息(命令和响应)传送,将命令与数据传送分开使得FTP的效率更高。在整个交互的FTP会话中,控制连接始终是处于连接状态,数据连接则在每一次文件传送时先打开然后关闭,若传送多个文件,则数据连接打开和关闭多次(每次数据连接打开的端口不同)。

以下是使用port和pasv连接方式的简单流程:

Port方式:

1> Client打开一个短暂端口与Server的21端口进行三次握手,建立控制连接;

2> Client使用接入命令,Server对client的user和pass验证后,Client登录成功;

3> Client使用文件管理命令和数据格式化命令来定义数据传输的文件类型、传输方式和目录等信息;

4> Client向Server端发起port连接命令,并把client端的一个短暂端口号发给Server;

5> Server的20端口与Client的短暂端口进行三次握手,建立数据连接;

6> 传输数据;

7> 握手再见;

8> 使用QUIT命令请求关闭控制连接或者发请求打开另一个数据连接以传送另一个文件。

Pasv方式:

1> Client打开一个短暂端口与Server的21端口进行三次握手,建立控制连接;

2> Client使用接入命令,Server对client的user和pass验证后,Client登录成功;

3> Client使用文件管理命令和数据格式化命令来定义数据传输的文件类型、传输方式和目录等信息;

4> Client向Server端发起pasv连接命令,要求Server选择一个端口号,并在pasv连接命令

的响应中将此端口号告诉Client;

5> Client使用短暂端口号与Server选择的端口号进行三次握手,建立数据连接;

6> 传输数据;

7> 握手再见;

8> 使用QUIT命令请求关闭控制连接或者发请求打开另一个数据连接以传送另一个文件。

对比:

port方式(主动连接方式)―――>client选择端口,等待server数据连接

pasv方式(被动连接方式)―――>server选择端口,等待client数据连接

“主动”和“被动”是相对于server而言的。

1.2 Nat与Nat Alg

NAT(Network Address Translation,地址转换)是将IP数据报报头中的IP地址转换为另一个IP地址的过程。在实际应用中,NAT主要用于实现私有网络访问外部网络的功能。这种通过允许使用少量的公有IP地址代表多数的私有IP地址的方式将有助于减缓可用IP地址空间枯竭的速度,并且“隐藏”了企业的私有网络,具有安全性。

NAT和NAPT只能对IP报文的头部地址和TCP/UDP头部的端口信息进行转换。对于一些特殊协议,例如ICMP、FTP等,它们报文的数据部分可能包含IP地址或端口信息,这些内容不能被NAT有效的转换,这就可能导致问题。

在NAT实现中使用ALG(Application Level Gateway,应用级网关)功能。ALG是特定的应用协议的转换代理,它和NAT交互以建立状态,使用NAT的状态信息来改变封装在IP报文数据部分中的特定数据,并完成其他必需的工作以使应用协议可以跨越不同范围运行。

Eudemon防火墙提供了完善的地址转换应用级网关机制,使其在流程上可以支持各种特殊的应用协议,而不需要对NAT平台进行任何的修改,具有良好的可扩充性。目前它所实现了常用应用协议的ALG功能包括:DNS、FTP、H.323、HWCC、ICMP、ILS(Internet Locator Service)、NetBIOS 和QQ。

1.3 基于ACL规则的包过滤与ASPF

ACL(Access Control List,访问控制列表),是由permit或deny语句组成的一系列有顺序的规则,这些规则针对数据包的源地址、目的地址、端口号、上层协议或其他信息来描述。防火墙转发数据包时,先检查包头信息(例如包的源地址/目的地址、源端口/目的端口和上层协议等),然后与设定的规则进行比较,根据比较的结果决定对该数据包进行转发还是丢弃处理。ASPF (Application Specific Packet Filter)是针对应用层的包过滤,即基于状态的报文过滤。

基于ACL规则的包过滤可以在网络层和传输层检测数据包,防止非法入侵。ASPF能够检测应用层协议的信息,并对应用的流量进行监控。

Eudemon防火墙采用ASPF状态检测技术,即基于状态的报文过滤,在进行数据包的检查时,将每个数据包看成是独立单元的同时,还要考虑前后报文的历史关联性,因此具有高安全性。

2 实例分析

2.1 Nat outbound情况

E0/0/0 E1/0/0

[client]----------[Eudemon200]---------[server]

5.5.5.2 [trust] [untrust]

6.6.6.2

[Eudemon] nat address-group 0 6.6.6.5 6.6.6.8

1. Port方式:

C(3146端口)-----→S(21端口) 控制通道

C(3147端口)<------S(20端口) 数据通道

配置:[Eudemon]nat alg enable ftp

[Eudemon-acl-adv-3000] rule 5 permit tcp destination 6.6.6.2 0 destination-port

eq ftp

[Eudemon-acl-basic-2000]rule per

[Eudemon-interzone-trust-untrust] packet-filter 3000 outbound

[Eudemon-interzone-trust-untrust]nat outbound 2000 address-group 0

[Eudemon-interzone-trust-untrust]detect ftp

detect的作用:获取TCP会话的状态,检测它是否合法,创建servermap表项,打开数据端口3147,以后过来的包不用查acl,即可通过Aspf创建的隧道进行通信。

2. Pasv方式:

C(3256端口)-----→S(21端口) 控制通道

C(3257端口)-----→S(2381端口) 数据通道

配置:[Eudemon-acl-adv-3000] rule 5 permit tcp destination 6.6.6.2 0

destination-port eq ftp

[Eudemon-acl-basic-2000]rule per

[Eudemon-interzone-trust-untrust] packet-filter 3000 outbound

[Eudemon-interzone-trust-untrust]nat outbound 2000 address-group 0

[Eudemon-interzone-trust-untrust]detect ftp

detect的作用:控制通道协商出数据通道的目的端口是2381,detect打开此端口。创建servermap表项,以后过来的包不用查acl,即可通过Aspf创建的隧道进行通信。

2.2 Nat Server情况

E0/0/0 E1/0/0

[client]----------[Eudemon200]---------[server]

5.5.5.2 [untrust] [trust]

6.6.6.2

1. Port方式:

C(3146端口)-----→S(21端口) 控制通道

C(3147端口)<------S(20端口) 数据通道

配置:[Eudemon]nat server protocol tcp global 5.5.5.5 ftp inside 6.6.6.2 ftp

[Eudemon]nat server protocol tcp global 5.5.5.5 20 inside 6.6.6.2 20 [Eudemon-acl-adv-3000] rule 5 permit tcp destination 6.6.6.2 0

destination-port eq ftp

[Eudemon-interzone-trust-untrust] packet-filter 3000 inbound

[Eudemon-interzone-trust-untrust]detect ftp

2. Pasv方式:

C(3256端口)-----→S(21端口) 控制通道

C(3257端口)-----→S(2381端口) 数据通道

配置:[Eudemon]nat server protocol tcp global 5.5.5.5 ftp inside 6.6.6.2 ftp

[Eudemon-acl-adv-3000] rule 5 permit tcp destination 6.6.6.2 0

destination-port eq ftp

[Eudemon]nat alg enable ftp

[Eudemon-interzone-trust-untrust] packet-filter 3000 inbound

[Eudemon-interzone-trust-untrust]detect ftp

2.3 讨论

(1)数据封装格式:

Port和pasv端口定义命令信息(包括IP地址或端口信息)包含在应用数据中,必须使用Nat Alg 才能转换;

NAT只能对IP首部地址和TCP首部的地址或端口信息进行转换;

<1> Nat outbound

Client------------Server

(trust) (untrust)

5.5.5.2(

6.6.6.7)---→6.6.6.2

port方式:

client端发出端口定义命令port 5.5.5.2 (3147),通过ALG转换,则server端收到的命令格式为 port 6.6.6.7(12297),这样server端主动发起的数据连接才能够成功,如果没有ALG 转换,则server端收到的命令格式仍为port 5.5.5.2 (3147),那么因为server不知道到达私网5.5.5.0网段的路径,所以就会使server端发起的数据连接不能够成功。

抓包情况如图所示:

如果使能ALG转换

client端抓包:

server端抓包:

如果不使能ALG转换client端抓包:

server端抓包:

pasv方式:

client端发出端口定义命令pasv ,然后需要server端把一个短暂端口号发给client,再由client端发起数据连接。因为server在公网,所以pasv 6.6.6.2(2381)不需要Nat ALG的转

换,通过防火墙传给client后,只要按照pasv 6.6.6.2(2381),client端主动发起的数据连接就能够成功。

抓包情况如图所示:

client端抓包:

server端抓包:

<2> Nat server

Client------------Server

(untrust) (trust)

5.5.5.2--- 5.5.5.5(

6.6.6.2)

Port方式:

client端发出端口定义命令port 5.5.5.2 (3147),因为5.5.5.2不是私网地址,所以不需要Nat和Nat Alg的转换,server端收到的命令格式仍为port 5.5.5.2 (3147)。在私网的server 有到达公网5.5.5.0的路径,所以server端主动发起的数据连接能够成功。

抓包情况如图所示:

client端抓包:

server端抓包:

Pasv方式:

client端发出端口定义命令pasv ,然后需要server端把一个短暂端口号发给client,再由client端发起数据连接。如果有Alg转换,则server端收到pasv命令后向client回的pasv

6.6.6.2(2381)将被转换成pasv 5.5.5.5(2381),这样client端主动发起的数据连接才能够成功,如果没有ALG转换,则server端收到pasv命令后向client回的pasv 6.6.6.2(2381)仍为pasv 6.6.6.2 (2381),client没有到私网6.6.6.0的路由,因此client端主动发起的数据连接不能够成功。

抓包情况如图所示:

如果使能ALG转换

client端抓包:

server端抓包:

如果不使能ALG转换

client端抓包:

server端抓包:

6.6.6.2 20。

因为如果只配置nat server protocol tcp global 5.5.5.5 ftp inside 6.6.6.2 ftp,那么就只有21端口进行nat转换,数据端口20将不能够nat转换,从而不能够与私网进行数据传输。

也可以配置nat server global 5.5.5.5 inside 6.6.6.2代替这两条。

(3)Nat outbound的pasv中,如果配置packet-filter 的outbound方向所有报文全通过,则不

用再配置detect ftp就可以实现pasv了,因为此时已经不用detect去创建servermap,不需要通过detect创建的隧道进行通信了。也就是说,此时体现不了detect的作用。

(4) 先进行基于ACL规则的包过滤,再进行ASPF包过滤。虽然detect建立servermap表项之后,

通过的包不再查acl,但是不能没有这个acl,因为它起到了触发detect的前提作用。

相关文档