vsftpd设置被动模式_Vsftp安装及配置主动模式/被动模式

第一章、前言

FTP的主动模式(active mode)和被动模式(passive mode)

大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。

但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:

一个控制连接 (control connection)

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

几个数据连接 (data connection)

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

而且,数据连接既可能是客户端发起的,也可能是服务器端发起的。

在FTP协议中,控制连接使用周知端口21 ,因此使用ISA的IP PACKET FILTER就可以这种连接进行很好的安全保护。

相反,数据传输连接的目的端口通常实现无法知道,因此处理这样的端口转发非常困难。

FTP协议使用一个标准的端口21作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。

FTP的数据连接和控制连接的方向一般是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。

连接的端口是由服务器端和客户端协商确定的。FTP协议的这个特征对ISA 转发以及防火墙和NAT的配置增加了很多困难。

除此之外,还有另外一种FTP模式,叫做被动模式 (passive mod)。在这种模式下,数据连接是由客户程序发起的,和刚才讨论过的模式(我们可以叫做主动模式 )相反。

是否采取被动模式取决于客户程序,在ftp命令行中使用passive命令就可以关闭/打开被动模式。

第二章、安装vsftp

1.关闭防火墙

[root@mail ~]# iptables -L -n #查看当前防火墙状态,及启用规则,当前机器防火墙规则为iptables默认规则

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all-- 0.0.0.0/0 0.0.0.0/0state RELATED,ESTABLISHED

ACCEPT icmp-- 0.0.0.0/0 0.0.0.0/0ACCEPT all-- 0.0.0.0/0 0.0.0.0/0ACCEPT tcp-- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22REJECT all-- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)

target prot opt source destination

REJECT all-- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

[root@mail~]# service iptables save #如果当前机器有其他iptables规则建议先保留

iptables:将防火墙规则保存到/etc/sysconfig/iptables: [确定] #规则保留至/etc/sysconfig/iptables文件中

[root@mail~]# service iptables stop #关闭防火墙

iptables:将链设置为政策 ACCEPT:filter [确定]

iptables:清除防火墙规则: [确定]

iptables:正在卸载模块: [确定]

[root@mail~]# iptables -L -n #确认当前防火墙规则

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

2.安装vsftp及配置vsftp被动模式(默认为被动模式)

[root@mail ~]# yum install vsftpd -y

[root@mail~]# vim /etc/vsftpd/vsftpd.conf

[root@mail~]# egrep -v "^#|^$" /etc/vsftpd/vsftpd.conf#除了添加注释选项,未注释选项均为默认值

anonymous_enable=NO #禁止匿名用户登录

local_enable=YES

write_enable=YES

local_umask=022dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

#chroot_local_user=YES !!!------>#是否将所有用户限制在主目录,默认为NO

chroot_list_enable=YES #现在用户被锁定在自己的home目录中

chroot_list_file=/etc/vsftpd/chroot_list #与上一选项相配合,在这个配置文件中添加用户,每个用户一行,则在这个文件里的用户登录ftp后,可以访问上级目录。不再的用户只能访问自己的home目录listen=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

[root@mail~]# useradd -M -d /data/ftp -s /sbin/nologin ftp_user #创建一个测试用户,不允许登录

[root@mail~]# echo "123456"|passwd --stdin ftp_user #设置密码

更改用户 ftp_user 的密码 。

passwd: 所有的身份验证令牌已经成功更新。

[root@mail ~]# mkdir /data/ftp -p                          #创建用户家目录

[root@mail ~]# chown ftp_user:ftp_user /data/ftp/          #授权

[root@mail~]# echo "ftp_user" >> /etc/vsftpd/chroot_list #将用户名添加至锁定文件中

[root@mail~]# service vsftpd start #启动服务

为 vsftpd 启动 vsftpd: [确定]

[root@mail~]# chkconfig vsftpd on

测试是否可以登录,我这使用的是WinSCP客户端工具

a0620c1f1c0a39b3ab509c949d21aece.png

点击登录

9488f1730abf944b368be2e70a6a7bd3.png

#对ftp的增删改查可以自行测试,应该没有问题

下面我们打开防火墙,再次从新登陆ftp服务器

b0685d4f5127e53be73936d5065d58b9.png

b52dccba7369d9310b85a6d536e4ea17.png

可以看到由于防火墙的原因,现在已经无法连接到服务器了,现在放行21端口

[root@eshop-cache04 ~]# vim /etc/sysconfig/iptables #参考22端口复制一行修改为21即可,如果在命令行下使用命令,记得规则一定要插入在REJECT  all  ... 这条之前,否则防火墙规则将不会生效

[root@eshop-cache04 ~]# service iptables restart

iptables:将链设置为政策 ACCEPT:filter [确定]

iptables:清除防火墙规则: [确定]

iptables:正在卸载模块: [确定]

iptables:应用防火墙规则: [确定]

[root@eshop-cache04 ~]# iptables -L -n

再次登录

31b4d573fb90f51cd59f4838deea6564.png

891989c5bc0ed2899f525e8caf7b1fde.png

现在我们发现已经可以登录服务器了,但是无法浏览数据,这是因为数据端口在被动模式下是一个随机端口

问题分析:

主动模式 下,客户连接 TCP/21,服务器通过 TCP/20连接客户的随机端口

————这种情况下,通过状态防火墙可以解决 iptables-A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

被动模式 下,客户连接 TCP/21,客户再通过其他端口连接服务器的随机端口

卡住的原因,是因为服务器在被动模式下没有打开临时端口让 client 连过来,因此需要几个条件1、client 没有防火墙时,用主动模式连接即可2、server 没有防火墙时,用被动模式即可3、双方都有防火墙时,vsftpd 设置被动模式高端口范围,server 打开那段范围,client 用被动模式连接即可4、加载 ip_conntrack_ftp 模块,使 server 支持 connection tracking,支持临时打洞,client 用被动模式即可5、server 使用 ip_conntrack_ftp、client 使用 ip_conntrack_ftp 和 ip_nat_ftp,支持临时打洞和临时 NAT 穿越打洞,双方使用主动或被动模式均可

优点:不影响ftp配置;缺点:客户会感觉到连接有些延迟。原因参见ip_conntract的实现原理

配置临时"打洞",并重启服务

[root@eshop-cache04 ~]# grep -w IPTABLES_MODULES /etc/sysconfig/iptables-config #修改此配置,添加两个模块

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"[root@eshop-cache04 ~]# service iptables restart

iptables:将链设置为政策 ACCEPT:filter [确定]

iptables:清除防火墙规则: [确定]

iptables:正在卸载模块: [确定]

iptables:应用防火墙规则: [确定]

iptables:载入额外模块:ip_nat_ftp ip_conntrack_ftp [确定] #可以看到,两个模块已经加载

重新登录

ff6792a70ddf272856c9e212d5cf391f.png

已经没有问题了

三、配置服务为主动模式

[root@eshop-cache04 ~]# tail -1 /etc/vsftpd/vsftpd.conf

pasv_enable=NO #关闭pasv模式,启动主动模式

[root@eshop-cache04 ~]# /etc/init.d/vsftpd restart

关闭 vsftpd: [确定]

为 vsftpd 启动 vsftpd: [确定]

重启后,再次登录

4081f95c4fc3199cc572ff1fce2b9e54.png

70cd31057d6b5a80c26d4b9ef64750d4.png

可以看到已经连接服务器,但是无法浏览数据,现在我们先允许20端口可以访问,步骤参考21端口即可,重启iptabls后重启访问

f5ed71100d6a97dcd64be6dfd985354a.png

可以看到还是没有权限浏览数据

验证问题:

[root@mail ~]# ftp 192.168.1.103 #另外一台Linux客户端Connected to192.168.1.103 (192.168.1.103).220 (vsFTPd 2.2.2)

Name (192.168.1.103:root): test_user #按提示输入账号密码331Please specify the password.

Password:230Login successful.

Remote system typeisUNIX.

Using binary mode to transfer files.

ftp>ls #浏览数据,与客户端工具相同,没有权限浏览550Permission denied.

Passive mode refused.

ftp>passive #关闭客户端的pasv

Passive mode off.

ftp>ls #再次浏览,可以正常访问了200 PORT command successful. Consider usingPASV.150Here comes the directory listing.-rw-r--r-- 1 501 501 8 Nov 15 11:23新建文件226 Directory send OK.

现在我们可以看到,由于service端关闭了pasv模式,但是client端默认还是pasv模式导致无法正常浏览数据,客户端需要关闭pasv模式改为port模式才能正常访问

解决:客户端加入相关参数,在连接时关闭pasv

命令行下:

[root@mail ~]# ftp -A 192.168.1.103Connected to192.168.1.103 (192.168.1.103).220 (vsFTPd 2.2.2)

Name (192.168.1.103:root): test_user331Please specify the password.

Password:230Login successful.

Remote system typeisUNIX.

Using binary mode to transfer files.

ftp>ls #直接可以访问了200 PORT command successful. Consider usingPASV.150Here comes the directory listing.-rw-r--r-- 1 501 501 8 Nov 15 11:23新建文件226 Directory send OK.

客户端:

点击高级

7d60e7ea95af248e3ed797bf68c5a220.png

点击连接,关闭被动模式选项

a89ff367b4b48ec6a713ccab3afa9a69.png

选择保存

1fb7d0b83d984d106078da35440af676.png

再次访问

f43b5e68de7451fe4419862108105873.png

没有问题

总结:

下面的图表会帮助管理员们记住每种FTP方式是怎样工作的:

主动FTP:

命令连接:客户端>1023端口 -> 服务器 21端口

数据连接:客户端 >1023端口

被动FTP:

命令连接:客户端>1023端口 -> 服务器 21端口

数据连接:客户端 >1023端口 -> 服务器 >1023端口

下面是主动与被动FTP优缺点的简要总结:

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险

四、OUTPUT默认策略为DROP时配置ftp服务

可以看到,之前的iptables的OUTPUT链默认策略是ACCEPT  (其实INPUT链默认也是ACCEPT,但是默认最后一条规则--reject-with icmp-host-prohibited 表示拒绝所有其他不符合任何一条规则的数据包)

1.主动模式:

先添加OUTPUT允许22端口(或者自定义的ssh链接端口),否则当默认策略改变时ssh无法登陆,如果机器在机房那就只能通知机房了....

[root@eshop-cache04 ~]# cat /etc/sysconfig/iptables-A OUTPUT -p tcp --sport 22 -j ACCEPT #放行22端口

[root@eshop-cache04 ~]# service iptables restart #重启生效

[root@eshop-cache04 ~]# iptables -L -n -v #使用-v参数,查看规则是否匹配

Chain INPUT (policy ACCEPT0 packets, 0bytes)......

Chain OUTPUT (policy DROP4 packets, 240bytes)

pkts bytes target prot optin outsource destination9 1444 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:22#这边可以看到已经匹配到数据包了,没有问题

[root@eshop-cache04 ~]# iptables -P OUTPUT DROP #当上一步骤没有问题时,我们再修改默认策略为DROP

使用客户端工具进行访问

c3186e9b7771578d0214d7bdda72e90b.png

37d16a13a730a72f21a5c796919a4349.png

6f91813b159e1149f299527b2a313b13.png

可以看到登录失败,下面我们放行ftp21 20端口,参照22,步骤省略,再次访问

cb3053974bef9bf23c76b000c957e90c.png

可以正常访问

2.被动模式:(由于被动模式下数据端口是随机的,所以我们需要为FTP服务器指定一个有限的端口范围,在防火墙上放行这段端口即可)

修改模式为被动模式,并制定数据端口

[root@eshop-cache04 ~]# tail -3 /etc/vsftpd/vsftpd.conf #修改或添加以下三行,我们定义随机端口为7000~8000之间

pasv_enable=YES

pasv_min_port=7000pasv_max_port=8000[root@eshop-cache04 ~]# /etc/init.d/vsftpd restart #重启vsftp服务

[root@eshop-cache04 ~]# cat /etc/sysconfig/iptables #修改防火墙规则,添加INPUT和OUTPUT对7000~8000端口放行数据

# Firewall configuration written by system-config-firewall

# Manual customization ofthis file isnot recommended.*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT DROP [0:0]-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT-A INPUT -p tcp --dport 7000:8000 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibited-A OUTPUT -p tcp --sport 22 -j ACCEPT-A OUTPUT -p tcp --sport 21 -j ACCEPT-A OUTPUT -p tcp --sport 7000:8000 -j ACCEPTCOMMIT

[root@eshop-cache04 ~]# iptables -L -n

修改客户端访问模式,进行访问

54815c76da46916ea573446d4365c23b.png

6fc71f4a25f8ce69d71b16be530b6cfe.png

可以正常访问,至此,ftp相关配置全部完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值