第一章、前言
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/ state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/ 0.0.0.0/
ACCEPT all -- 0.0.0.0/ 0.0.0.0/
ACCEPT tcp -- 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt:
REJECT all -- 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/ 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=
dirmessage_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 ""|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客户端工具
点击登录
#对ftp的增删改查可以自行测试,应该没有问题
下面我们打开防火墙,再次从新登陆ftp服务器
可以看到由于防火墙的原因,现在已经无法连接到服务器了,现在放行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
再次登录
现在我们发现已经可以登录服务器了,但是无法浏览数据,这是因为数据端口在被动模式下是一个随机端口
问题分析:
主动模式 下,客户连接 TCP/,服务器通过 TCP/ 连接客户的随机端口
————这种情况下,通过状态防火墙可以解决 iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
被动模式 下,客户连接 TCP/,客户再通过其他端口连接服务器的随机端口
卡住的原因,是因为服务器在被动模式下没有打开临时端口让 client 连过来,因此需要几个条件
、client 没有防火墙时,用主动模式连接即可
、server 没有防火墙时,用被动模式即可
、双方都有防火墙时,vsftpd 设置被动模式高端口范围,server 打开那段范围,client 用被动模式连接即可
、加载 ip_conntrack_ftp 模块,使 server 支持 connection tracking,支持临时打洞,client 用被动模式即可
、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 [确定] #可以看到,两个模块已经加载
重新登录
已经没有问题了
三、配置服务为主动模式
[root@eshop-cache04 ~]# tail - /etc/vsftpd/vsftpd.conf
pasv_enable=NO #关闭pasv模式,启动主动模式
[root@eshop-cache04 ~]# /etc/init.d/vsftpd restart
关闭 vsftpd: [确定]
为 vsftpd 启动 vsftpd: [确定]
重启后,再次登录
可以看到已经连接服务器,但是无法浏览数据,现在我们先允许20端口可以访问,步骤参考21端口即可,重启iptabls后重启访问
可以看到还是没有权限浏览数据
问题分析:参考此链接 https://www.cnblogs.com/tdalcn/p/6940147.html
验证问题:
[root@mail ~]# ftp 192.168.1.103 #另外一台Linux客户端
Connected to 192.168.1.103 (192.168.1.103).
(vsFTPd 2.2.)
Name (192.168.1.103:root): test_user #按提示输入账号密码
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls #浏览数据,与客户端工具相同,没有权限浏览
Permission denied.
Passive mode refused.
ftp> passive #关闭客户端的pasv
Passive mode off.
ftp> ls #再次浏览,可以正常访问了
PORT command successful. Consider using PASV.
Here comes the directory listing.
-rw-r--r-- Nov : 新建文件
Directory send OK.
现在我们可以看到,由于service端关闭了pasv模式,但是client端默认还是pasv模式导致无法正常浏览数据,客户端需要关闭pasv模式改为port模式才能正常访问
解决:客户端加入相关参数,在连接时关闭pasv
命令行下:
[root@mail ~]# ftp -A 192.168.1.103
Connected to 192.168.1.103 (192.168.1.103).
(vsFTPd 2.2.)
Name (192.168.1.103:root): test_user
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls #直接可以访问了
PORT command successful. Consider using PASV.
Here comes the directory listing.
-rw-r--r-- Nov : 新建文件
Directory send OK.
客户端:
点击高级
点击连接,关闭被动模式选项
选择保存
再次访问
没有问题
总结:
下面的图表会帮助管理员们记住每种FTP方式是怎样工作的:
主动FTP:
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 <- 服务器 20端口
被动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 -j ACCEPT #放行22端口
[root@eshop-cache04 ~]# service iptables restart #重启生效
[root@eshop-cache04 ~]# iptables -L -n -v #使用-v参数,查看规则是否匹配
Chain INPUT (policy ACCEPT packets, bytes)
......
Chain OUTPUT (policy DROP packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ tcp spt: #这边可以看到已经匹配到数据包了,没有问题
[root@eshop-cache04 ~]# iptables -P OUTPUT DROP #当上一步骤没有问题时,我们再修改默认策略为DROP
使用客户端工具进行访问
可以看到登录失败,下面我们放行ftp21 20端口,参照22,步骤省略,再次访问
可以正常访问
2.被动模式:(由于被动模式下数据端口是随机的,所以我们需要为FTP服务器指定一个有限的端口范围,在防火墙上放行这段端口即可)
修改模式为被动模式,并制定数据端口
[root@eshop-cache04 ~]# tail - /etc/vsftpd/vsftpd.conf #修改或添加以下三行,我们定义随机端口为7000~8000之间
pasv_enable=YES
pasv_min_port=
pasv_max_port=
[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 of this file is not recommended.
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT DROP [:]
-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 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -p tcp --dport : -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 -j ACCEPT
-A OUTPUT -p tcp --sport -j ACCEPT
-A OUTPUT -p tcp --sport : -j ACCEPT
COMMIT
[root@eshop-cache04 ~]# iptables -L -n
修改客户端访问模式,进行访问
可以正常访问,至此,ftp相关配置全部完成!
Vsftp安装及配置主动模式/被动模式的更多相关文章
-
vsftp配置主动模式和被动模式
配置文件:/etc/vsftpd/vsftpd.conf 主动模式配置方法: 主动式连接使用的数据通道 connect_from_port_20=YES 支持数据流的被动式连接模式 pasv_enab ...
-
ftp主动模式 被动模式 和iptables 设置
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式. Port模式:ftp server:tcp 21 <------client:dynamic ftp se ...
-
zabbix 模板 创建逻辑 + 主动模式-被动模式
模板通常包含了item.trigger.graph(图形).application以及low-level discovery rule:模板可以直接链接至某个主机: 模板包含一系列的item,trig ...
-
FTP 连接模式 (主动模式被动模式)
FTP是有两种传输的模式的,主动模式和被动模式,一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接. 1. 控制连接客户端希望与 ...
-
Centos7安装与配置domain模式wildfly(默认配置)
(1)安装与配置JDK8 1)使用wget下载JDK8: wget --no-check-certificate --no-cookies --header "Cookie: oraclel ...
-
vsftp安装和配置
2013-10-10 10:49:48| 分类: Linux|举报|字号 订阅 源码下载地址:ftp://vsftpd.beasts.org/users/cevans/untar/ 1. ...
-
CentOS vsftp安装与配置
详细配置说明:. http://www.cnblogs.com/app-lin/p/5189762.html 1.安装vsftpd yum install vsftpd 2.启动/重启/关闭vsftp ...
-
【转】CentOS中vsftp安装、配置、卸载
1. 安装VSFTP yum -y install vsftpd 2. 配置vsftpd.conf文件 # Example config file /etc/vsftpd/vsftpd.conf # ...
-
Linux之CentOS下vsftp安装及配置相关操作
1.安装ftps——vsftpd: #yum install vsftpd 2.指定上传下载目录配置: 如:用户名:xxx,需指定目录:/xxx/xxx #useradd -d /xxx/xxx -s ...
随机推荐
-
只具备内网的服务器通过yum安装软件
1.在维护过程中,需要统一安装一些软件,可能有的机器只具有内网,有的机器具备外网,可以直接从yum安装,怎么办呢?答:在具备外网的机器上启用yum缓存,这样安装软件的时候本地也缓存了软件安装包,怎样修 ...
-
网上找到的一个jquery版网页换肤特效
这个跟我之前在锋利的JQuery那本书里看到的那个一模一样. <!DOCTYPE html> <html> <head> <meta name="& ...
-
django 安装
git clone https://github.com/django/django.git 或者到django的官网下载 然后 python setup.py install
-
h5移动端前端性能优化
1.脚本优化 (1)减少重绘和回流 (2)缓存Dom选择与计算 (3)缓存列表length (4)尽量使用事件代码,避免批量绑定事件 (5)尽量使用ID选择器 (6)使用touchstart.touc ...
-
jQuery遍历对象、数组、集合实例
1.jquery 遍历对象 复制代码代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ...
-
Python - 元组(tuple) 详解 及 代码
元组(tuple) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17290967 元组是存放任意元素集合,不能修 ...
-
Mysql锁机制介绍
Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
-
how tomcat works 读书笔记(一)----------一个简单的webserver
http协议 若是两个人能正常的说话交流,那么他们间必然有一套统一的语言规则<在网络上server与client能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertex ...
-
c语言最后一次作业
1.当初你是如何做出选择计算机专业的决定的? 我再来到大学之前,通过查询和询问,了解到当前计算机行业就业需求量较高,同时我对计算机的几年过去比较高了,在高中时期就有过在大学学习计算机行业的知识与专业的 ...
-
大页内存(HugePages)在通用程序优化中的应用
今天给大家介绍一种比较新奇的程序性能优化方法-大页内存(HugePages),简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失.这方面的资料比较贫乏,而且网上绝大多数资料都是介绍它在O ...