大多数的TCP服务是使用单个端口的连接,一般是用户向服务器的一个某个端口发起连接,然后使用这个连接进行通讯。但FTP协议却是例外,它使用双向的多个连接

,而且使用的端口很难预计。

FTP连接包括:一个控制连接 (control

connection)

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

N个数据连接 (data

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

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

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

主动与被动模式

FTP的数据连接和控制连接的方向一般是相反的,即服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的,这就是vsftpd的主动模式(port

mod)。FTP协议的这个特征对iptables防火墙和NAT的配置增加了很多困难。在FTP被动模式 (passive

mod)下,数据连接是由客户程序发起的,和主动模式相反。

选择模式的原则

1、client 没有防火墙时,用主动模式连接即可

2、server 没有防火墙时,用被动模式即可

3、双方都有防火墙时,vsftpd 设置被动模式高端口范围,server 打开那段范围,client

用被动模式连接即可

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

在xp命令行模式下使用ftp命令连接ftp服务器,用的是主动模式。浏览器方式下连接ftp服务器,可以修改访问使用的模式。

iptables中配置vsftp

问题:配置iptables后,能够登录到vsftpd服务器,但ls列目录失败(超时)。

分析:

主动模式下:客户连接

TCP/21,服务器通过 TCP/20 连接客户的随机端口

―这种情况下,通过状态防火墙可以解决

iptables -A INPUT -m state

--state NEW,RELATED,ESTABLISHED -j ACCEPT

或者如下:

iptables -A INPUT -m state --state

ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p

tcp -m multiport --dport 20,21 -m state --state NEW -j ACCEPT

NEW: 该包想要开始一个新的连接(重新连接或连接重定向)

RELATED:该包是属于某个已经建立的连接所建立的新连接。如FTP的数据传输连接和控制连接之间就是RELATED关系。

ESTABLISHED:该包属于某个已经建立的连接。

INVALID:该包不匹配于任何连接,通常这些包被DROP。

被动模式下:客户连接

TCP/21,客户再通过其他端口连接服务器的随机端口,卡住的原因,是因为服务器在被动模式下没有打开临时端口让 client

连过来。

临时打洞的方法:

优点:不影响ftp配置;缺点:

客户会感觉到连接有些延迟。原因参见ip_conntract的实现原理

在/etc/modprobe.conf中添加

alias ip_conntrack ip_conntract_ftp ip_nat_ftp

在/etc/rc.local中添加

/sbin/modprobe ip_conntract

/sbin/modprobe ip_conntrack_ftp

/sbin/modprobe ip_nat_ftp

限制被动模式连接端口的方法:

优点:对连接速度没有影响。缺点:

限制了客户端并发连接的数量。

在/etc/vsftpd/vsftpd.conf中添加

pasv_enable=YES

pasv_min_port=2222

pasv_max_port=2225

iptables中开放这段端口

-A INPUT -m state --state

RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j

ACCEPT

-A INPUT -p tcp --dport 2222:2225 -j ACCEPT

如果有硬件防火墙,也同样需要打开这些端口!

vsftpd设置被动模式_(1)vsftpd主、被动模式iptables配置方法相关推荐

  1. ac ap方案 华为_华为AC+AP无线的配置方法

    <华为AC+AP无线的配置方法>由会员分享,可在线阅读,更多相关<华为AC+AP无线的配置方法(4页珍藏版)>请在人人文库网上搜索. 1.华为AC+AP无线配置方法组网示意图: ...

  2. 链路两段不同网段怎么通信_静态路由跨网段访问配置方法和命令

    静态路由跨网段访问配置方法和命令 静态路由是一种需要管理员手工配置的特殊路由.静态路由比动态路由使用更少的带宽,并且不占用CPU资源来计算和分析路由更新.但是当网络发生故障或者拓扑发生变化后,静态路由 ...

  3. ib网卡命令_一种IB网卡连通配置方法、装置、终端及存储介质与流程

    本发明属于服务器设置技术领域,具体涉及一种IB网卡连通配置方法.装置.终端及存储介质. 背景技术: InfiniBand架构是一种支持多并发链接的"转换线缆"技术,它是新一代服务器 ...

  4. vb mysql 设置数据源_总结 vb与数据库的连接方法

    总结:vb与数据库连接方式,两种分法. 根据是否使用ODBC(驱动程序)来分: 1.有源连接 2.无源连接. 其中有源连接指的是:通过设置数据源(ODBC)来连接 据我的观察无源连接选择的是oledb ...

  5. dataframe 设置空值_数据清洗--DataFrame中的空值处理方法

    数据清洗是一项复杂且繁琐的工作,同时也是整个数据分析过程中最为重要的环节. 在python中空值被显示为NaN.首先,我们要构造一个包含NaN的DataFrame对象. >>> im ...

  6. 服务器03系统怎么设置网站,Windows 2003系统路由服务的配置方法

    windows 2003下配置路由服务实现宽带的共享,不但不占用服务器资源,还可以节省下购买路由器的费用,是一个一举两得的好方法,用户只要利用win2003自带的adsl宽带拨号程序中的"路 ...

  7. python不同版本共存_多版本Python共存的配置方法

    同一台PC中,如果同时安装Python2和Python3环境,会在执行python命令时出现错误,操作系统会找到默认的配置进行执行.怎么样才能让python2和python3一起工作又互相不影响呢. ...

  8. mysql8.0.13解压版安装密码设置_mysql8.0.13解压版安装配置方法图文教程

    一.安装 1.下载mysql 下载地址:链接地址 在浏览器打开网页后,下载如图所示压缩包 下载完成后将该压缩包进行解压,位置自定义,如:D:\Developer\mysql-8.0.13-winx64 ...

  9. 【渗透测试】Lin.Security靶机渗透练习_虚拟机无法获取ip的配置方法+靶机多种提权方式练习

    靶机描述:在in.security,我们希望开发一个Linux虚拟机,该虚拟机在编写本文时基于最新的Ubuntu发行版(18.04 LTS),但存在许多漏洞,这些漏洞使用户无法升级扎根在盒子上.旨在帮 ...

最新文章

  1. IT人士,你的知识需要管理。
  2. java中hashMap的排序
  3. html中视频变圆角,圆形视频和圆角视频的一种实现方式
  4. Tjamie 谭传奇来报到
  5. HTTPS原理和对中间件攻击的预防
  6. 阿里技术专家详解 DDD 系列- Domain Primitive
  7. c++语言偶数分离,在C++的链表中分离偶数和奇数节点
  8. iOS App创建桌面快捷方式
  9. 【ArcGIS|空间分析】图像纠正
  10. python爬取拉勾网职位信息_Python爬虫:拉勾网Python的职位信息爬取
  11. 手机端和PC端开发区别
  12. Java爬坑--集合(二)List
  13. 【PageHelper】实现拦截pageNum和pageSize
  14. 5G工业无线网关在物联网的应用优势
  15. Guava-Splitter工具类
  16. 软件测试:给你一个网站,你如何测试
  17. html+监听+页面滚动到底部,JS监听页面滚动到底部事件
  18. 学生个人网页制作成品
  19. 乱七八糟之处理器天梯图
  20. 培训班H5宣传单怎么做?快进来拿方案~

热门文章

  1. 如何解决ajax跨域问题
  2. web 前端 如何分享到instagram_如何找到靠谱的Web培训机构?web前端培训机构哪个好?...
  3. python 第三方绘图库_D3py首页、文档和下载 - 基于 D3 的 Python 绘图库 - OSCHINA - 中文开源技术交流社区...
  4. oracle清理告警日志,Oracle 跟踪/告警/监听日志的清理脚本
  5. python计算结果传给spark_Spark入门:流计算简介(Python版)
  6. 如何使用JavaScript访问对象的键中有空格的对象?
  7. ruby 三目运算符_Ruby运算符
  8. c#中.clear()作用_清单 .Clear()方法以及C#中的示例
  9. Java LinkedList公共对象peek()方法(带示例)
  10. JSP JAVA 自定义 错误页面(404,505,500)