文件服务器:FTP服务器
数据传输原理
功能简介
- 文件的传输与管理
-
不同等级的用户身份:user、guest、anonymous
- 实体用户。权限较完整
- 匿名用户。下载资源的能力
-
命令记录与日志文件记录
/var/log 里面可找到用户曾经使用过的命令和传输的数据
使用的服务是syslogd -
限制用户活动的目录:(change root,简称:chroot)
用户的工作范围局限在用户的主目录下。ftp后显示的就是根目录就是用户的主目录。
工作流程和使用到的端口(以ftp默认的主动式连接为例)
-
两个连接
- 命令通道
- 数据流通道
因为是TCP数据包,所以每次连接都需要经过三次握手
-
连接过程
- 建立命令通道的连接
客户端随机取一个大于1024的端口与ftp服务器的port 21端口实现连接,这个连接来对ftp服务器执行命令
- 通知ftp服务器端使用Active并告知连接的端口号
客户端在需要数据的情况下,会告知服务器使用什么方式来连接,如果是主动式(Active)连接时,客户端会先随机启用一个端口,且通过命令通道告知FTP服务器这两个消息,并等待ftp服务器的连接
- FTP服务器主动向客户端连接
ftp服务器通过命令了解到客户端的需求之后,默认使用port 22向客户端发起请求,经过三次握手,现在就可以开始传输数据了
备注:数据传输通道是在有数据传输行为的时候,才会建立的通道,并不是一开始就连接ftp服务器的时候就立刻建立起的通道
在主动连接的FTP服务器与客户端之间具有防火墙
很多局域网络都会使用防火墙的NAT功能
让我们来梳理一下问题发生的过程吧!
-
用户与服务器之间命令通道的建立
NAT会主动记录由内部送往外部的连接信息,而由于命令通道的建立是由客户端向服务器端发起的,故这条连接顺利建立
-
用户与服务器之间数据通道建立的通知
client启动数据传输通道,并通过命令告知ftp服务器,等待服务器端的主动连接
-
服务器主动连到NAT等待转递至客户端的连接问题
经过NAT转换,服务器端只能得知NAT的IP而不是客户端的IP。因此ftp服务器会以port 20主动向NAT发起port发起主动连接的请求。但NAT并没有启动port来监听ftp服务器的连接
在ftp的主动式连接中,NAT将会被视为客户端,但是NAT并不是客户端,这就造成了问题。
如果你有时发现连接上服务器了,但是无法获取文件名的列表,而是在超过一段时间后显示“can’t build data connection:connection refused”,"无法进行数据传输"之类的信息,那就是这个原因困扰的。
简易的解决办法:
-
iptables提供的ftp检测模块
使用modprobe这个命令加载ip_conntrack_ftp及ip_nat_ftp等模块,这几个模块会主动的分析目标是port 21的连接信息,就可以得到客户端的数据传输通道的端口信息,就能接收服务器的连接了。
但是如果ftp服务器使用的不是默认端口21的话,那就无法顺利解析了
-
客户端选择被动式(Passive)连接模式
主动式是服务器向客户端发起连接,那被动式就是客户端向服务器端发起连接。
客户端选择被动式的连接模式
用户与服务器建立命令通道
-
客户端发起PASV的连接请求
当使用数据通道命令时,客户端可通过命令通道发出PASV的被动式连接要求,并等待服务器的回应
-
ftp服务器启动数据端口,并通知客户端连接
如果你所使用的ftp服务器是支持被动式连接的,那么就会启动一个监听端口,也可以自定义某一范围的端口,这要看ftp服务器软件而定。然后ftp服务器会通过命令通道告知客户端已经启动的端口(port PASV)
-
客户端随机取用大于1024的端口进行连接
客户端随机取用大于1024的端口来进行对ftp服务器的port PASV连接。
潜在问题:
被动式的ftp数据通道的连接方向是由客户端向服务器端连接的。那么,如果ftp服务器也是在NAT后端怎么办?
服务器在没有设置的情况下随机选取大于1024的端口来提供客户端连接使用。但如果此端口有问题的话,怎么办呢?很难追踪来自入侵者攻击的日志信息。 passive ports限制 port number
vsftpd服务器基础设置
较为安全的ftp服务器软件的特点
启动者身份为一般用户,对于Linux系统的权限较低,危害相对降低。此外,vsftpd利用chroot()函数进行改换根目录的操作,使系统工具不被利用
任何需要具有较高执行权限的vsftpd命令均以一个特殊的上层程序所控制,该上层程序享有的较高执行权限能力已经被限制的相当低了
绝大部分的ftp命令已经被整合到vsftpd主程序中,不要使用额外的系统提供的命令,比较安全
较高执行权限的命令需经过相当程度的身份确认后,才可使用
所需软件及软件结构
软件:vsftpd
-
配置文件:/etc/vsftpd/vsftpd.conf
参数=设置值
等号两边不能有空白 -
文件/etc/pam.d/vsftpd
主要作为身份认证使用,阻挡一些用户身份的功能
-
文件/etc/vsftpd/ftpusers
系统账号默认是无法使用vsftpd
限制某些用户无法使用vsftpd -
文件/etc/vsftpd/user_list
不允许登陆vsftpd的账号写入这里,与ftpusers的作用相同
但是这个文件是否生效是由vsftpd.conf来决定(userlist_deny与userlist_enable = {YES/NO}) -
文件/etc/vsftpd/chroot_list
此文件默认不存在,需要手动建立。
功能:将某些账号的用户chroot建立在他们的默认用户主目录下。但是这个文件生效与vsftpd.conf内的chroot_list_enable、chroot_list_file两个参数有关 -
文件/usr/sbin/vsftpd
vsftpd的主要执行文件。只有这一个执行文件
-
目录/var/ftp
匿名用户登陆的根目录