专栏首页arebirth重生者的IT之路vsftpd上传文件大小为0(主动模式)
原创

vsftpd上传文件大小为0(主动模式)

最近在搞VSFTPD+Nginx结合,但是发现上传文件大小总是为0,

由于最开始在搞的时候不知道主动模式和被动模式到底是什么鬼东西,所以遇到问题根本找不到根的原因,遇到问题只是乱搜,好像是解决了问题,但实际不然。

就像我们最开始的时候,来说下最开始瞎搞的情况吧:

环境:Linux+VSFTPD+FTPClient 想要实现一个,文件上传到服务器的功能,根据百度的VSFTPD搭建,步骤如下 1.安装VSFTPD 2.VSFTPD把配置文件vsftpd.conf里面的anonymous_enable=YES 改为anonymous_enable=NO 3.重启服务 service vsftpd restart 然后呢,就是开始使用FTPClient开始上传文件,但是,问题来了,根本上传不了啊,上传总是失败,文件大小为0..... 接下来你们懂得,就是开始找百度乱搞一气,认为所谓的可行的办法就是把Linux防火墙关闭,然后在FtpClient上传的代码中添加如下代码 ftp.enterLocalPassiveMode(); 意思是开启被动模式,别说,还真的可以了,但是这只是表象,你的配置文件你真的知道配置了什么??你到底干了什么?----- 还有,你把Linux防火墙开启你看看还Ok不??肯定凉凉的!(而且生产环境下防火墙基本上不可能会关闭的)


  好了,我们要开始解决问题了,一步一步的跟我正确的配置(我们以主动模式为例)

  那么大概的说一下什么主动和被动,具体详情百度!!

主动模式(PORT)(Server->Client)     客户端打开端口N(N为>1024的随机端口)连接服务器21端口建立命令通道;     客户端通过N+1端口与服务器20端口建立数据传输通道。 被动模式(PASV)(Client->Server)     客户端打开端口N(N为>1024的随机端口)连接服务器21端口建立命令通道(同上);     客户端通过N+1端口与服务器>1024随机端口建立数据传输通道,客户端使用PASV命令。

  问题解决步骤:

  1.开放你的21端口可以直接按照你默认的22端口编写,把22原封不动弄一行,然后把复制的22换成21即可(技巧:在22那行按esc,然后按yyp即可复制本行)

  开放完你的21端口后记得重启:service iptables restart

[root@rebirth vsftpd]# vim /etc/sysconfig/iptables

下面的是我的防火墙配置,不需要跟我的全部一样,只需要开启你的21端口即可
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [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 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 177 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1777 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT


  2.首先我们打开vsftpd.conf的配置文件(在你安装的路径) vim vsftpd.conf

  3.在你的vsftpd.conf里面开启主动模式的配置:(如果没有则自己加上去这段命令 一般会有:connect_from_port_20=YES )      connect_from_port_20=YES   主动模式      pasv_enable=NO  关闭被动模式

   4..重启vsftpd服务  service vsftpd restart

这时候我们在重新执行我们上传,如果通过FtpClient的话,不要添加开启被动的那句代码:

ftp.enterLocalPassiveMode();

如果此时你的文件直接完整的上传成了那么直接恭喜你!你的问题得以解决!下面的内容你可以选择跳过咯!


如果此时你的文件大小还是为0的话,那么恭喜你,你跟我一样,我们继续搞!

原因是:我们本地的防火墙原因,防火墙的入站规则阻碍了我们

解决方案:

  1.最简单,最直接的就是直接把本地的防火墙全部关闭

再来试试吧!ok完美解决!

   2.如果你不想全部关闭防火墙(我也一样)那么就要稍微配置一些高级的防火墙规则了!跟我来

接下来右键入站规则,点击新建入站规则(由于截图快捷键一按按钮就消失,导图不全谅解哈!)

 直接下一步即可

下一步很重要,你可以直接选择默认的配置,任何ip都可以

 当然,你是一位非常重视安全的决策者,那么你可以这么做

你可以选择指定的IP可以通过此规则,例如本次我们配置的vsftpd的虚拟机所在的IP!当然你也可以配置虚拟机所在的网段,由你自行决策!决策者

然后我们只需要确认下一步即可

默认下一步即可

好了,我们的配置结束了,如果你已经者却的配置了,那么来启动你的程序来看下你的成果吧!

PS:

了解原理很重要喔!  

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • centos7-gitlab平台搭建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • cURL无法访问TLS网站故障解决

    大多数人都厌烦使用老旧的系统,无论软件还是硬件。但有的时候又不得不困守其中,坚持延续着系统的寿命,或者还需要点几柱香,祈求神佛的护佑。 Linux是一个模...

    俺踏月色而来
  • 使用netstat、lsof查看端口占用情况

    netstat用来查看系统当前系统网络状态信息,包括端口,连接情况等,常用方式如下:

    拓荒者
  • 【转】记一次TIME_WAIT网络故障

    前段时间,组里遇到个问题:线上某个业务出现了短连接太多,造成tw_bucket溢出。

    二狗不要跑
  • SBT无痛入门指南 顶

    SBT 是 Scala 的构建工具,全称是 Simple Build Tool, 类似 Maven 或 Gradle。 SBT 的野心很大,采用Scala编程语...

    joymufeng
  • 性能监控平台搭建 -- 集成Locust性能数据

    这是之前介绍过的性能监控平台的整体架构图,想要了解其它部分的搭建,可以查看相关文章《Telegraf安装与简易使用指南》、《InfluxDB安装与简易使用指南》...

    上帝De助手
  • linux下curl的用法

    参考:http://www.aiezu.com/system/linux/linux_curl_syntax.html

    二狗不要跑
  • Python定时任务神器-APScheduler

    但是这些定时任务库都只是提供了简答的,或者只支持静态的定时任务。而对于需要复杂定时功能,或者动态注册定时任务的场景,则无法满足。

    上帝De助手
  • Linux下用netstat查看网络状态、端口状态

    在linux一般使用netstat 来查看系统端口使用情况步。       netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表...

    拓荒者
  • linux lsof/netstat查看进程和端口号相关命令:

           在linux操作时,经常要查看运行的项目的进程和端口号,在这里总结了以下常用到的相关命令:

    拓荒者

扫码关注云+社区

领取腾讯云代金券