(接上篇)
4. IP监听与连接控制
vsftpd工作在独立模式(standalone)下的启动参数有两项:
listen=yes/no
listen_ipv6=yes/no
其中第一条已经前面已经提过了,第二条应用在ipv6网络环境中,这两相参数只能有一条值为yes。
在实际的网络环境中,服务器通常都有多个IP地址,而每个IP地址连接不同的网段,我们可能并不希望在所有网段的上的计算机都能访问服务器。而默认情况下,vsftpd将在所有的IP地址上监听,因此,我们需要下面两行:
listen_address=监听 ip
listen_address6=监听 ip
这两行分别是针对IPv4和IPv6环境的。
下面的两项是vsftpd并发连接控制:
max_clients=数字
max_per_ip=数字
参数max_clients设置了服务器可以接受的最大并发连接数量,max_per_ip设置了每个客户端IP可以发起的最大连接数。针对服务器性能适当设置这两个参数,可以在服务器可接受的连接数量和连接速度之间找到平衡点。这两项默认值均为0,表示无限制。
accept_timeout=数字
connect_timeout=数字
data_connection_timeout=数字
idle_session_timeout=数字
上面的数字都是以秒为单位的。其中 access_timeout 代表以 pasv数据连接模式的时候,数据连接的超时;connect_timeout 表示以 port模式连接数据连接时的超时时间;关于ftp服务连接模式下面会有详细介绍。data_connection_timeout 表示数据连接后数据连接等待的空闲时间超时,超过时间后,数据连接将断开连接;idle_session_timeout 设置发呆时间,也就是客户端隔多长时间不与服务器有交互 ftp 命令,将自动断开 ftp 服务连接。
5. 关于连接端口设置
我们知道 ftp 服务有一点是不同于其他的服务的是,ftp 服务使用的是 tcp 双连接通道,也就是ftp-server 和 ftp-data 连接。我们可以这么理解:ftp-server 连接接受客户端连接请求、并发控制、身份和权限认证以及传输客户端下达的命令。ftp-data连接负责传输数据,也就是说当有数据传输的时候才会有这条连接。我们先来看一下 ftp-server 的设置:
listen_port=端口号
那么这条设置可以设置 ftp-server 端口号,默认为21,如果我们指定了其它端口号,那么客户端连接服务器上时就得使用指定端口号了。我们将这一行加入主配置文件中:
listen_port=2121
# ftp 127.0.0.1
ftp: connect: Connection refused
ftp> open 127.0.0.1 2121
Connected to 127.0.0.1.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
……
已经看到效果了,接下来我们讨论ftp-data连接的问题。
FTP数据传输有两种模式:FTP Port模式和FTP Passive模式,两种工作方式截然不同。
FTP Port模式
在FTP Port模式下,客户端与服务器建立ftp-server连接之后,如果某条指令涉及到数据传送,就需要建立ftp-data连接。其实连接步骤如下:
(1) 客户端启用另一个高于1024的空闲端口xx做连接准备,并且使用port命令利用ftp-server信道向服务器发送一个数据包,数据包里包含客户端的IP地址和xx端口,告诉服务器客户端xx端口已做好连接准备。Port命令还支持第三方(third-party)模式,第三方模式是客户端告诉服务器端打开与另台主机的连接。
(2) 服务器以ftp-data端口(默认为20)主动向客户端xx端口进行连接。
(3) 客户端响应服务器连接,并继续完成三次握手后,ftp-data连接建立,开始传送数据。当数据传输完毕后,服务器ftp-data端口就处于等待关闭状态。
我们看到,Port模式下ftp-data连接请求是由服务器发起的。现在来看一下vsftpd中关于Port模式的语句设置:
port_enable=yes/no //是否启用 port 模式
connect_from_port_20=yes/no //port 模式下是否默认使用固定的 20 端口
ftp_data_port=port_number //指定 port 模式的端口号
port_promiscuous=yes/no //是否使用安全的 port 模式
将port_enable 设置为 yes,就采用 port 模式。在 port 模式下端口如果采用固定的20 端口,就把connect_from_port_20选项就设为yes,这是很多服务器默认的设置规则。我们也可以指定其他的端口,那么这也就由ftp_data_port 来指定固定端口。port_promiscuous 默认值为no,表示ftp-data连接之前检验一下数据连接的目标ip的是否是真正客户端的IP,反之则不检查。除非你确保服务器是与真正的客户端进行连接,否则不要将此参数值改为yes。
我们将下面两行加入配置文件中:
port_enable=yes
connect_from_port_20=no
登录服务器运行3次ls(显示文件列表)命令,再在服务器端运行netstat命令查看效果:
# ftp 127.0.0.1
Connected to 127.0.0.1.
……
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive
Passive mode off.
ftp> ls
……
226 Directory send OK.
ftp> ls
……
ftp> ls
……
ftp> bye
# netstat -an|more
……
tcp 0 0 127.0.0.1:1069 127.0.0.1:1068 TIME_WAIT
tcp 0 0 127.0.0.1:21 127.0.0.1:1065 TIME_WAIT
tcp 0 0 127.0.0.1:1071 127.0.0.1:1070 TIME_WAIT
tcp 0 0 127.0.0.1:1067 127.0.0.1:1066 TIME_WAIT
……
我们看到服务器开了3个大于1024的端口去连接客户端,这3个连接就是3次ls命令产生的。如果我们把connect_from_port_20参数的值改为yes,再做上述实验,就会发现服务器3次连接都固定打开20端口。如果我们再加上ftp_data_port=2020语句,再做上述实验,服务器就会固定开启2020端口。
大家来看这张图,局域网客户机使用私有IP地址,并采用出口路由器做的 NAT(网络地址转换)连到internet。ftp 服务器采用的是port模式。当客户端使用port命令向服务器发出包含自身IP地址和端口的包,此包通过路由器时路由器必须检查其内容,把包中的IP地址和端口翻译成分配给客户的地址和端口,而这个操作要求路由器必须工作在应用层!我们不可能要求每个客户的路由器都有此功能,但如果路由器没有正常完成这步工作,ftp数据传输就失败了。
另外,由于第三方third-party模式的支持,黑客还可能在PORT命令中设置IP地址和端口号参数来指定一台其它主机的地址和端口号来发动攻击(称为FTP反弹攻击)。虽然有的防火墙设备已经修正了该问题,但对于大多数防火墙和路由器来说这个问题还是一个非常严重的。
FTP Passive模式
下面描述了Passive模式的ftp-data连接建立的步骤:
(1) 当用户请求数据传输的时候,客户端软件发送PASV命令给服务器端表明客户端希望进入Passive模式;
(2) 服务器端进行应答,应答数据包内有服务器的IP地址和一个临时端口,这个临时的端口是客户端在打开数据传输连接时应该使用的端口;
(3) 客户端服务器发出连接请求,源端口为客户端自己选择的一个临时端口,目的端口为服务器在PASV应答命令中指定的临时端口号;
(4) 服务器响应客户端请求,并继续完成TCP三次握手之后,ftp-data连接建立,开始传送数据。
接下来我们来看看vsftpd中关于Passive模式中设置语句:
pasv_enable=yes/no
pasv_min_port=yes/no
pasv_max_port=yes/no
pasv_promiscuous=yes/no
pasv_address=ip_address
第一行设置是否启用 pasv 模式。pasv_min_port 和pasv_max_port 是设置在 pasv 模式下开启的端口范围。一般情况下,如果设置成 pasv 模式,我们最好指定端口范围,便于防火墙设置开启这个范围的端口以接受客户端的连接请求。pasv_promiscuous与port_promiscuous参数一样是设置在pasv下是否设置安全的传输,我们也要将其值设为no(默认值即为no)。pasv_address 后接一个有效的ip地址,来指定pasv打开端口的ip地址。但是默认情况下这行是取消的,因为服务会在 tcp 连接的套接字中知道连接的ip地址。我们把主配置文件改成这样然后看一下设置效果:
listen=yes
anonymous_enable=yes
pasv_enable=yes
pasv_min_port=3000
pasv_max_port=3003
登录服务器运行3次ls命令,再在服务器端运行netstat命令查看效果:
# netstat -an
……
tcp 0 0 192.168.0.105:3000 192.168.0.122:11066 TIME_WAIT
tcp 0 0 192.168.0.105:3002 192.168.0.122:11065 TIME_WAIT
tcp 0 0 192.168.0.105:3001 192.168.0.122:11063 TIME_WAIT
我们看到,每次ls命令产生了一个连接,服务器开的端口是3000和3003之间。在 vsftpd2.0.3 以后的版本中,pasv 端口允许我们重复开启,在之前的版本里是不允许的,也就是说同一个端口可以同时与客户端建立多条连接,大家可以自己试验一下。
大多数人认为在防火墙网络环境中Passive模式比Port模式的问题少,但我们注意到在Passive模式下,客户端向服务器端一个临时的目的端口发起连接,一些防火墙或者设备的访问控制列表(ACL)可能会阻止这种连接;同样服务器的回应也是从一个临时的端口到另一个临时的端口,防火墙或者访问列表也会阻止这种连接。在许多路由器和防火墙上(包括iptables)允许你使用访问列表关键字"established"来避免第二个问题,"established"关键字告诉路由器允许带ACK标志的包通过。而对于第一个问题,我们虽然使用pasv_min_port和pasv_max_port语句来限制服务器开设临时端口的范围,从而在防火墙上打开这些端口,但这样做还是存在一定的安全漏洞。好在多数状态检测防火墙例如Linux netfileters支持ftp协议的深层状态检测,进行准确的PASV动态端口过滤。
五、vsftpd高级操作
这一节我们介绍一下vsftpd的其它一些知识,其中包括:双模式切换、基于ip的虚拟ftp 站点、基于数据库虚拟用户建立及管理、基于 OpenSSL 的加密数据传输。
1. vsftpd双模式切换
前面我们提过,vsftpd 服务是支持在linux下的两种服务模式:独立(standalone)模式和守护进程(xinetd)模式。在standalone模式下,vsftpd进程启动后会一直占用系统资源,当有连接请求时,它会迅速反应;在xinetd模式下,ftp服务是由守护进程统一管理,当出现ftp连接请求时,守护进程才将ftp服务启动,这种方式最大的优点是没有连接的时候ftp服务不会占用系统资源,处于睡眠状态,但因为要花费时间去唤醒该服务,所以响应时间较长。
之前做的试验一直是把vsftpd 做在独立模式下,下面我们把它移到守护进程下。注意在工作在守护进程下时,有的参数并不起作用,详细请查阅vsftpd帮助信息(man vsftpd.conf)。
我们需要在守护进程配置目录/etc/xinetd.d/里建立vsftpd 的守护进程文件。我们在安装时已经将该文件考到/etc/xinetd.d/目录下了。我们稍稍修改其内容:
#vi /etc/xinetd.d/vsftpd
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd.conf
nice = 10
}
接下来把配置文件中的listen=yes或listen_ipv6=yes去掉,停掉vsftpd服务,重启xinetd服务:
# sesrvice vsftpd stop
# service xinetd restart
重新启动守护进程后,vsftpd 服务就会让守护进程来管理了。在守护进程管理过程中,我们再修改主配置文件的话,就不需要重新启动服务了。
2. 基于IP的虚拟ftp站点
这一小节我们来讨论在同一服务器上建立多个ftp站点,每个站点相互独立,拥有独立的配置文件。当然服务器必须有两个以上的IP地址。在standalone模式下,我们可以考虑启动多个ftp服务进程;在xinetd模式下,可以让守护进程来管理。下面我们分别讨论这两种情况。为简单起见,我们在服务器上建立两个匿名虚拟站点。下面是这两个站点的信息:
|
站点1 |
站点2 |
ip地址 |
192.168.0.105
|
192.168.0.106
|
主配置文件 |
/etc/vsftpd/vsftpd.conf
|
/etc/vsftpd/vsftpd2.conf
|
匿名用户映射的本地用户名
|
默认为ftp
|
新建立ftp2
|
匿名用户主目录 |
/var/ftp/
|
/var/ftp2/ |
standalone模式下虚拟站点的建立
首先我们修改站点1的配置文件/etc/vsftpd/vsftpd.conf为下面所示:
listen=yes
listen_address=192.168.0.105
anonymous_enable=yes
local_enable=yes
pam_service_name=vsftpd
write_enable=yes
ftpd_banner=This is ftp1 site
站点1就这样配置完毕了。接下来为站点2建立ftp2的用户:
# mkdir /var/ftp2/
# useradd -d /var/ftp2/ ftp2
为了让站点2知道匿名用户的主目录为/var/ftp2,我们需要在配置文件中手动指定站点2使用ftp2用户登录,于是我们要用到下面这条语句:
ftp_username=local_username
建立站点2的配置文件/etc/vsftpd/vsftpd2.conf,内容如下:
listen=yes
listen_address=192.168.0.106
anonymous_enable=yes
local_enable=yes
pam_service_name=vsftpd
write_enable=yes
ftp_username=ftp2
ftpd_banner=This is ftp2 site
接下来我们启动vsftpd服务,就可以看到效果了。需要注意的是这里就不能用service vsftpd start命令来启动服务了,必须用第三节前面介绍的方式启动。
# /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &
[1] 2287
# /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd2.conf &
[1] 2288
# ftp 192.168.0.105
Connected to 192.168.0.105.
220 This is ftp1 site
530 Please login with USER and PASS.
……
# ftp 192.168.0.106
Connected to 192.168.0.106.
220 This is ftp2 site
……
我们在各自的配置文件设置了不同的banner,上面已经看到效果了。
守护进程模式下虚拟站点的建立
在standalone模式下,IP的绑定在配置文件里配置了,配置文件名及其位置在启动服务的命令参数里指定;在xinetd模式下,这两步需要在守护进程配置文件里配置。这样在守护进程里面我们就得用到这两个设置:
bind=绑定的ip
server_args=每个站点的配置文件
那么我们来做守护进程文件,首先来写站点1的守护进程文件:
# vi /etc/xinetd.d/vsftpd
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd.conf
nice = 10
bind = 192.168.0.105
}
再建立站点2的守护进程文件,并输入下面的内容
# vi /etc/xinetd.d/vsftpd2
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd2.conf
nice = 10
bind = 192.168.0.106
}
这样两个守护进程文件就写完了,用户也在上个试验已经建立完了。接下来继续修改两个站点的配置文件,均是把listen、listen_address两行删去即可。现在我们可以重新启动xinetd服务,测试结果就不贴出来了。
未完持续
原文出处:http://blog.chinaunix.net/space.php?uid=8739112&do=blog&id=2015403
分享到:
相关推荐
在本文中,我们将详细介绍如何在 CentOS 7.9 上安装和配置 vsftpd,以实现匿名用户的上传和下载操作。 一、关闭防火墙 在配置 vsftpd 之前,需要关闭防火墙,以免防火墙的限制导致-vsftpd 无法正常工作。可以使用...
可以使用命令配置vsFTPd服务,例如设置FTP服务的监听端口、匿名用户的权限等。同时,也可以使用vsFTPd提供的配置文件来进行配置,例如设置FTP服务的启动参数等。 vsFTPd服务的配置文件是/etc/vsftpd/vsftpd.conf,...
在配置VSFTPD服务之前,通常需要确保系统已经准备好了必要的软件仓库。例如,在RHEL或CentOS系统中,可以通过Yum管理器来安装和管理软件。首先,需要进入`/etc/yum.repos.d/`目录,创建一个新的Yum仓库配置文件,...
### CentOS中配置vsftpd服务器 #### 一、概述 在CentOS Linux系统下配置vsftpd(Very Secure FTP Daemon)是一项重要的网络服务配置任务。本文将详细介绍如何在CentOS Server 5.5上安装与配置vsftpd版本2.3.4。...
### vsftpd虚拟用户的配置详解 #### 一、虚拟用户概念 在介绍具体的配置步骤之前,我们先来...通过上述步骤,我们可以成功配置vsftpd虚拟用户,不仅可以提高FTP服务器的安全性,还可以更灵活地管理用户的访问权限。
在本场景中,我们要讨论的是如何在Webmin中配置VSFTPD(Very Secure FTP Daemon),这是一个流行的开源FTP服务器软件,以其安全性而闻名。由于官方提供的Webmin模块可能不再可用,我们将探讨替代方法和手动配置步骤...
### 配置vsftpd本地用户登录详解 在Linux系统中,vsftpd(Very Secure FTP Daemon)是一款非常流行的FTP服务器软件,它以其强大的安全性和稳定性而被广泛使用。本文将详细介绍如何配置vsftpd来支持本地用户的登录,...
通过合理配置vsftpd的各项参数,不仅可以保障FTP服务的安全性,还能提高其性能表现。上述内容涵盖了vsftpd配置文件中的关键配置项及其含义,希望能为正在部署和管理vsftpd服务的技术人员提供有益参考。
* vsftpd 服务的配置文件位于 /etc/vsftpd/vsftpd.conf 中,可以根据需要进行修改。 * 在卸载 vsftpd 软件时,需要首先保存配置文件,以免丢失重要信息。 * 在挂载 CDROM 时,需要确保已经安装了 VMware-workstation...
在 CentOS 5.5 系统中配置 vsftpd 服务是一项常见的 IT 操作任务。vsftpd 是一款非常安全且快速的 FTP (File Transfer Protocol) 服务器软件,被广泛应用于 Linux 和其他类 Unix 系统中。本文将详细介绍如何在 ...
手动编译安装vsftpd之后,只需要将该文件复制到/etc/init.d文件夹下,即为安装了vsftpd服务,可运行service vsftpd status查看
### Ubuntu下Vsftpd服务器配置指南 #### 一、Vsftpd简介与许可说明 Vsftpd是一款在Linux系统上非常流行的FTP服务器软件,它以其高效性、安全性...通过仔细配置Vsftpd的各项设置,可以满足不同场景下的FTP服务需求。
500:出现错误 `OOPS: vsftpd: refusing to run with writable root inside chroot()`,解决方法是编辑 Vsftpd 配置文件 `/etc/vsftpd.conf`,添加一行 `allow_writeable_chroot=YES`,然后重启 Vsftpd 服务。...
在本配置过程中,我们将探讨如何在服务器上安装并配置vsftpd,以允许匿名用户访问共享资源,以及创建一个新的test目录供用户使用。 ### 安装vsftpd服务 首先,我们需要在服务器上安装vsftpd服务。这通常可以通过包...
安装完成后,需要配置vsftpd以满足特定的使用场景。主要的配置文件位于`/etc/vsftpd/vsftpd.conf`。默认配置可能不允许匿名登录,但允许本地用户通过FTP访问其家目录。以下是一些常见的配置项: 1. **anonymous_...
本文将深入解析如何在Linux环境中安装与配置vsftpd,搭建FTP服务器,以及进行必要的安全设置。 #### 一、安装vsftpd 首先,确保你的Linux系统已连接至互联网,然后通过包管理器`yum`进行安装。执行以下命令: ```...
二、配置vsftpd vsftpd的主要配置文件是`/etc/vsftpd.conf`。我们可以通过编辑这个文件来调整服务器的行为。例如,允许匿名访问、限制用户权限或启用写入权限。下面是一些常见的配置选项: 1. 允许匿名访问: ```...