分享
 
 
 

SSH进阶(二):FTP转发

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

简介

1.FTP协议简介

2.转发控制连接

3.FTP、防火墙和被动模式

4.FTP和网络地址转换(Network Address Translation)

4.1.客户端网络地址转换问题

4.2.服务器端网络地址转换问题

5.使用默认数据传输端口

6.转发数据连接

7.结论

简介

有关SSH,一个经常被问起的问题是“我怎样才能使用端口转发加强FTP安全?”。很不幸,你得到的回答一般非常简短,让你仍然无所适从。在标准FTP协议中,所有的数据都是明文传输的,因此网络上可能存在的嗅探器是一个极大的威胁。使用嗅探器,攻击者很容易获得你的帐户和密码。而在SSH的数据传输过程中,所有的数据以密文的形式传输的,所以SSH的端口转发功能能够很好地保护的帐户密码。

本文详细地解释你能够使用SSH和FTP做什么,不能做什么,以及其原因。这里有FTP本身的复杂性造成的问题。除此之外,防火墙和网络地址转换(Network Address Translation)也给我们制造了不少困难。因为现在防火墙和网络地址转换(Network Address Translation)已经广泛存在了,因此我们将对这些情况进行详细的讨论。不过,由于网络环境千差万别,我们无法覆盖所有可能出现的问题,这就需要你自己举一反三了。

1.FTP协议简介

为了便于后面的讨论,我们首先简要地讨论一下FTP协议(如果对FTP协议已经有了比较深入的了解,你可以略过这一节)。大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:

一个控制连接(control connection)

这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP会话时间。

几个数据连接(data connection)

这些连接用于传输文件和其它数据,例如:目录列表等。这种连接在需要数据传输时建立,而一旦数据传输完毕就关闭,每次使用的端口也不一定相同。而且,数据连接既可能是客户端发起的,也可能是服务器端发起的。

下面,我们通过一个FTP客户程序看一下控制连接。这里,我们需要使用debug模式(ftp -d)才能显示客户发出的FTP协议命令。在客户程序的输出信息中,这些协议命令是以---开头的,例如:

--- USER nixe0n

在命令发出之后,服务器会发出响应,响应信息以数字开头,例如:

530 Login incorrect.

下面,我们和FTP服务器建立一个连接,使用用户名nixe0n登录,在会话过程中发出两次目录切换名,一次成功一次失败,其中黑体是我们的输入:

ftp -d ftp.linuxaid.com.cn

Connected to ftp.linuxaid.com.cn.

220 ftp.linuxaid.com.cn FTP server ready.

Name (ftp.linuxaid.com.cn:nixe0n): nixe0n

--- USER nixe0n

331 Password required for nixe0n.

Password:

--- PASS XXXX

230 User nixe0n logged in.

--- SYST

215 UNIX Type: L8

Remote system type is UNIX.

Using binary mode to transfer files.

ftp cd one

--- CWD one

250 CWD command successful.

ftp cd tmp

--- CWD tmp

550 tmp: No such file or directory.

ftp bye

--- QUIT

221-You have transferred 0 bytes in 0 files.

221-Total traffic for this session was 398 bytes in 0 transfers.

221 Thank you for using the FTP service on ftp.linuxaid.com.cn.

在FTP协议中,控制连接使用周知端口21,因此使用SSH的标准端口转发就可以这种连接进行很好的安全保护。相反,数据传输连接的目的端口通常实现无法知道,因此处理这样的端口转发非常困难。FTP协议使用一个标准的端口21作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。FTP的数据连接和控制连接的方向一般是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的。FTP协议的这个特征对SSH转发以及防火墙和NAT的配置增加了很多困难。

除此之外,还有另外一种FTP模式,叫做被动模式(passive mod)。在这种模式下,数据连接是由客户程序发起的,和刚才讨论过的模式(我们可以叫做主动模式)相反。是否采取被动模式取决于客户程序,在ftp命令行中使用passive命令就可以关闭/打开被动模式。

在了解了使用SSH转发FTP连接的一些难点之后,我们将开始讨论如何解决这些问题。

2.转发控制连接

FTP的控制连接的一端是一个周知端口21,因此很容易通过SSH实现端口的转发。通常,需要保护的FTP服务器上需要运行SSH服务,而且你需要在服务器上有一个合法帐户以便通过SSH访问FTP服务。

假设你已经登录到一台主机名为client的客户主机,然后想通过安全的连接登录到FTP服务器ftp.linuxaid.com.cn。要转发FTP控制连接,首先要在client上运行一个SSH端口转发命令:

[nixe0n@client nixe0n]ssh -L 2001:ftp.linuxaid.com.cn:21 ftp.linuxaid.com.cn

nixe0n@ftp.linuxaid.com.cn's password:

接着,就可以使用被转发的端口登录到ftp.linuxaid.com.cn:

[nixe0n@clinet nixe0n]ftp localhost 2001

Connected to localhost

220 ftp.linuxaid.com.cn FTP server ready.

Name:foo

Password:

230 User foo logged in.

ftp

这里,我们需要注意两个非常重要的问题:

在本地进行转发,可能出现一些错误。

在确定转发的目标时,建议不要使用localhost作为目标,因为有时使用这种地址可能出现一些莫名其妙的问题。假如在你的主机(client)上,有其它的网络接口(例如:eth0),其地址为192.168.0.1,如果你想在本机上进行SSH进行FTP端口转发:

[nixe0n@localhost nixe0n]$ssh -L 2001:localhost:21 localhost

nixe0n@localhost's password:

然后,使用ftp命令登录到FTP服务器就可能出现一些错误:

[nixe0n@localhost nixe0n]ftp localhost 2001

Connected to localhost

220 localhost FTP server ready.

Name[localhost:nixe0n]:nixe0n

331 Password required for nixe0n

Password:

230 User nixe0n logged in

ftpls

200 PORT command successful.

425 Can't build data connection:Cannot assign requested address.

ftp

出现这个问题是因为FTP服务器会试图通过回环地址(lo:127.0.0.1)向client(eth0:192.168.0.1)发起连接造成的。本机的回环接口只能和本机的其它回环接口进行通讯,如果和其它的网络接口(例如:eth0)通讯,就会返回"address not available"的错误。

客户程序需要使用被动模式,被动模式对于解决NAT/防火墙造成的一些问题很有帮助。Linux系统的ftp命令在默认情况下使用这种模式。

3.FTP、防火墙和被动模式

前面我们讲过,FTP协议的数据传输存在两种模式:主动模式和被动模式。这两种模式发起连接的方向截然相反,主动模式是从服务器端向客户端发起;被动模式是客户端向服务器端发起连接。但是如果服务器和客户之间存在防火墙,主动模式经常会引起一些麻烦。设想,客户位于防火墙之后,防火墙允许所有内部向外部的连接通过,但是对于外部向内部发起的连接却存在很多限制。在这种情况下,客户可以正常地和服务器建立控制连接,而如果使用主动模式,ls、put和get等数据传输命令就很难成功运行,因为防火墙会阻塞从服务器向客户发起的数据传输连接。简单包过滤防火墙把控制连接和数据传输连接完全分离开了,因此很难通过配置防火墙允许主动模式的FTP数据传输连接通过。如果防火墙允许ICMP或者TCP RST报文通过,客户程序就会马上返回connection refused错误信息;而如果防火墙只是做简单的丢弃处理,会造成客户程序挂起一段时间。

被动模式一般可以解决此类问题,因为在被动模式下,连接是由客户端发起的饿。不过,这要看FTP服务器和客户程序是否支持被动模式。命令行FTP客户程序一般使用passive命令关/开被动模式。例如:

ftppassive

Passive mode off

ftppassive

Passive mode on

如果客户程序不支持被动模式,它就会返回?Invaild command;如果客户程序支持被动模式,而服务器不支持,就会返回"PASV:command not understood",PASV是一个FTP协议命令,使服务器进入到被动模式。

4.FTP和网络地址转换(Network Address Translation)

除了简单包过滤防火墙之外,被动模式也可以解决使用网络地址转换(NAT)给FTP造成的一些问题。在转发报文之前,进行网络地址转换的网关首先会改变报文的源地址和目的地址。网络地址转换能够提高网络的安全性,有助于解决IP地址资源不足问题。

4.1.客户端网络地址转换问题

假设你的FTP客户主机位于局域网内,通过一个网络地址转换(NAT)网关连入互联网。在这种情况下,客户程序可以毫无困难地和外部的FTP服务器建立控制连接,但是,如果

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有