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

大多数的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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指定的参数已超出有效值的范围_整流二极管的特性和重要参数

一、 二极管的半导体原理略二、 二极管的特性曲线研究电路也有两种方法,一个是从它的内部工作原理去分析,另一个是从它表现出的外部特征去分析,把电路看成一个黑匣子,不管它内部什么结构什么原理,只研究它表现出来的特…

mysql boolean 和bool_关于 MySQL 的 boolean 和 tinyint(1)

boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),MySQL里有四个常量:true,false,TRUE,FALSE,它们分别代表1,0,1,0,mysql> select true,false,TRUE,FALSE;--------------------------| TRUE | …

mysql存储过程触发器_【MySQL笔记】触发器,存储过程和函数

2)case语句mysql > DELIMITER //mysql >CREATEPROCEDUREproc3 (inparameterint)->begin->declarevarint;->setvarparameter1;->casevar->when0then->insertintotvalues(17);->when1then->insertintotvalues(18);->else->insertintotvalues…

count返回0_MySQL实战 | 14 为什么count(*)越来越慢?

select count(*) 应该是一个比较常用的语句,用来统计记录行数。但是,慢慢地你会发现,这个语句越来越慢了,为什么呢?count(*) 的实现方式首先,我们来看下它的实现方式。MySQL 中,不同的存储引擎&…

mysql info commit_mysql show processlist 发现大量的commit

今天执行show processlist 发现大量的commit;查看锁信息,发现基本上都是-----------------------------------------------------------------------------------------------------------------------------------------------------------------------…

sql管理:索引超出范围必须为非负值并小于集合大小_java面试基础知识-数据库基础知识(数据库索引部分)...

1.1数据库架构:如何设计一个关系型数据库?存储模块(文件系统)用块或者页作为存储单位 程序实例:存储管理缓存机制 不宜过大,要有淘汰机制SQL解析日志管理权限划分容灾机制索引管理锁管理1.2 索引为什么要使用索引&…

今日头条 mysql_今日头条的核心架构解析

一、产品背景今日头条是为用户提供个性化资讯客户端。下面就和大家分享一下当前今日头条的数据(据内部与公开数据综合):5亿注册用户2014年5月1.5亿,2015年5月3亿,2016年5月份为5亿。几乎为成倍增长。日活4800万用户2014年为1000万日活&#x…

编译原理语法分析_斯坦福大学《编译原理》学习记录 - 第二章:语法分析器

05-01: Introduction to Parsing 语法分析parser的作用:05-02: Context Free Grammars 上下文无关文法CFG(上下文无关文法)回答了一个字符串是否属于某语言:CFG的组成:终止符非终止符开始符生成式生成式production &am…

mysql中 视图的优缺点_数据库视图优缺点分析

视图作用是什么所谓视图(View)其实是执行查询语句后得到的结果,但这个查询结果可以仿真成数据表来使用,所以有人也称它为“虚拟数据表”,视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同的:数据表是实际…

mysql永远不用utf8_永远不要在 MySQL 中使用「utf8」

题图:by apple from Instagram本文出自极客邦「聊聊架构」公众号的编译。我自己当年也被这个问题坑过,当时并没有如此详细的分析文章。我觉得有责任再次分享一下,让更多人知道这个事情。程序员不帮助程序员,还能指望谁呢&#xff…

sqoop mysql parquet_Sqoop抽取Hive Parquet表数据到MySQL异常分析

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。Fayson的github:https://github.com/fayson/cdhproject1.问题描述在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取…

mysql按select导出_mysql 导出select结果到文本的几种方式

mysql -hxx -uxx -pxx -e "query statement" db > file例如:mysql -h127.0.0.1 -uroot -p000000 -e"select * from a" test > 1.txthost ip user password query statement database filename这样会输出列名信息,如…

mysql架设_主从mysql架设

主从mysql架设二进制安装mysqltar xvf mysql-5.1.46-linux-i686-glibc23.tar -C /usr/localcd /usr/localln -sv mysql-5.1.46-linux-i686-glibc23.tar mysqlcd mysqlgroupadd mysqluseradd -g mysql -s /sbin/nologin -M -r mysqlmkdir /mysql/datachown -R mysql.mysql /mysq…

日志文件和mysql同步到kafka_logstash_output_kafka:Mysql 同步 Kafka 深入详解

0、题记实际业务场景中,会遇到基础数据存在 Mysql 中,实时写入数据量比较大的情景。迁移至kafka是一种比较好的业务选型方案。而mysql写入kafka的选型方案有:方案一:logstash_output_kafka 插件。方案二:kafka_connect…

mysql max嵌套select_使用嵌套select子式 解决mysql不能叠加使用如max(sum())的问题

网上也有解决方案 有的有瑕疵 有的较复杂(mysql没有分析函数,可以使用变量实现) select sumScoreValue,studentid,studentName from sc_studentb, ( select sum (scoreValue) as sumScoreValue,studentid from sc_score group by studentid order by sumSc网上也有解…

mysql 检查记录存在_Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL...

我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录。这样的逻辑固然可以通过两条sql语句完成。SELECT COUNT(*) FROM xxx WHERE…

python linux调试_python调试

以下是我做调试或分析时用过的工具的一个概览。如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍。日志没错,就是日志。再多强调在你的应用里保留足量的日志的重要性也不为过。你应当对重要的内容打日志。如果你的日志打的足够好…

猜数字游戏python程序用函数guesssecret_Python-三、函数

3.1 def语句和参数def ...(...)语句用于定义一个函数,以便后面调用函数,如:def hello(name): #定义函数hello,变元nameprint(hello name) #打印hello变元namenamein input() #定义namein变量,从键盘取值并赋给namein…

java 命令行参数 _java命令行参数

原标题:java命令行参数命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了。这个就是程序的入口点。如图7.4所示:图…

java 最小生成树_图的最小生成树(java实现)

1.图的最小生成树(贪心算法)我两个算法的输出都是数组表示的,当前的索引值和当前索引对应的数据就是通路,比如parent[2] 5;即2和5之间有一个通路,第二个可能比较好理解,第一个有点混乱是什么?将一个有权图中的 所有顶…