Ubuntu下iptables开放ftp端口的一个坑:227 Entering Passive Mode

事情是这样的,我搭的VSFTP服务器在一次重启后竟然外界连不上了,进去系统查看发现服务在正常运行着;内部也可登上排查发现是防火墙iptables的坑。

原来这个iptables规则是临时的,需要写入并save,不然重启后规则就清空了,造成外界无法登陆。

先说解决办法:

iptables -A INPUT  -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

再重启vsftp:

systemctl restart vsftpd.service

按理说这样就可以解决了。为了防止下次重启被清空,我们可以保存一下子。

iptables防火墙规则的保存与恢复

iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载

使用命令 iptables-save 来保存规则。一般用

iptables-save > /etc/sysconfig/iptables

生成保存规则的文件 /etc/sysconfig/iptables,

也可以用

service iptables save

它能把规则自动保存在/etc/sysconfig/iptables中。

当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。

当然系统版本不同稍有出入,我用:

iptables-save > /etc/iptables.up.rules


插一段小序曲:

当在网上搜索解决方案时,有关于FTP服务的两种工作模式的说法,但我遇到的不是这个问题,但也记录一下,避免遇到

•port方式(主动模式), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立一条数据链路来传送数据。
•pasv方式 ( 被动模式 ), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链 路来传送数据。
由于服务器上的FTP进行TCP/IP筛选,仅允许特定的端口可以被客户端连接,所以无法使用PASV方式。找到了原因,解决办法也很简单,只需要关闭客户端的PASV方式,强制其用PORT方式访问服务器即可。
客户端登录FTP服务器后,用passive命令关闭客户端的PASV方式,如下:

代码如下ftp> passivePassive mode off.#再次执行该命令就可以启用PASV模式。

所以说要是你不小心开启了passive模式,除了关还有一个办法将就是再开端口给iptables

在iptables里设置允许访问ftp(建立连接,数据传输)

修改ftp配置文件,指定用于数据传输的端口范围为40001-41000,在配置文件最后添加如下两行:

pasv_min_port=40001
pasv_max_port=41000
-A INPUT -p tcp --dport 40001:41000 -j ACCEPT
-A OUTPUT -p tcp --dport 40001:41000 -j ACCEPT

参考1、参考二参考三

原文地址:https://www.cnblogs.com/ethtool/p/12397536.html

时间: 2024-12-08 08:23:07

Ubuntu下iptables开放ftp端口的一个坑:227 Entering Passive Mode的相关文章

iptables开放FTP端口

FTP是File Transfer Protocol(文件传输协议),它有两种工作模式,分别是主动模式(post)和被动模式(passive) 主动模式:默认TCP的21端口用来建立连接(控制连接),20端口用来数据传输 被动模式:默认TCP的21端口和主动模式一样用来控制连接,而数据连接则是通过大于1023的端口进行 如果FTP工作在主动模式下只要开放20,21端口即可,但如果工作在被动模式下则不能指定数据传输的端口,则要用到iptables中stata(状态追踪) state中有四种状态:N

CentOS 7下升级MySQL5.7.23的一个坑

发现CentOS 7下升级MySQL5.7.23的一个坑,以前面升级到MySQL 5.7.23的一个集群为例 在我们环境下打开文件描述符个数的参数open_files_limit在MySQL 5.6.21下都统一配置为65535,而CentOS 7系统下安装MySQL5.7.23的open_files_limit参数的默认值为5000 否则像分区表数量较多的集群,打开的文件个数过大时,数据库就会报错. 原因如下: 1.CentOS 7安装MySQL5.7.23,服务管理发生了变化,从sysvin

FTP上传失败报错227 Entering Passive Model (222,111,8,111,10,40)

昨天为了一个ftp问题折腾了一天.问题背景:原来有个接口涉及到上传文件,服务端更换了ftp服务器,我们这边需要刷新连接服务端的ip和端口配置,代码没动.联调环境和验收环境都测试通过,一到生产环境就歇菜了.我们手工连接ftp并上传文件正常,就是跑接口由程序上传不行.根据日志信息定位发现在登录ftp后做了两个事情,一个是把传输模式设置为二进制,一个是设置被动模式,用apache的Ftpclient实现: ftpClient.enterLocalPassiveMode(): 从代码层面看不出问题,因为

FTP连接时出现“227 Entering Passive Mode” 的解决方法

今天从公网的服务器连接本地内网的FTP server copy文件时,系统老是提示227 Entering Passive Mode (xxx,xxx,,xxx,xxx,x),很是奇怪,于是上网找资料仔细研究了一下,原来FTP有两种工作模式,PORT方式和PASV方式,中文意思为主动式和被动式 ,详细介绍如下: 主动 FTP : 命令连接:客户端 >1024 端口 → 服务器 21 端口 数据连接:客户端 >1024 端口 ← 服务器 20 端口 被动 FTP : 命令连接:客户端 >1

Iptables开放FTP(主/被)模式端口

FTP是File Transfer Protocol(文件传输协议),它有两种工作模式,分别是主动模式(post)和被动模式(passive) PORT(主动模式) FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口:FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据. PASV(被

Ubuntu下iptables使用记录

这里参考了百度百科还有Ubuntu论坛  http://wiki.ubuntu.org.cn/UbuntuHelp:IptablesHowTo/zh 这里参考了博主just_young大湿的文章  http://blog.csdn.net/just_young 1.查看iptables表项 sudo iptables -L -v 默认情况下,ubuntu下的iptables是允许任意流量进入的.所以刚开始时会看到如下的表项. 解释下target,防火墙的规则指定所检查包的特征,和目标.如果包不匹

ubuntu下Tomcat绑定80端口

转载自:https://www.2cto.com/os/201102/84081.html 工作环境迁移到了Ubuntu,很多东西发生了变化,比如原先配置tomcat端口.只需要配置server.xml文件就可以了.但是在Ubuntu下,只修改了server.xml文件后发现无法访问到服务.起初以为是有别的进程占用了80端口,但是通过netstat -an | grep 80后并没有发现有进程在占用80,Google了一下,发现tomcat使用1023以下的端口时需要使用authbind来指定.

ubuntu下使用code::blocks编译运行一个简单的gtk+2.0项目

在具体的操作之前,首先需要安装一些必要的软件.ubuntu下默认安装了gcc,不过缺少必要的Header file,可以在命令行中输入下面的指令安装build-essential套件:sudo apt-get install build-essential使用GTK+2.0需要安装GTK开发套件,在命令行中输入下面的指令安装GTK开发套件libgtk2.0-dev:sudo apt-get install libgtk2.0-dev安装完成后,可以使用pkg-config查看一下GTK的相关编译

linux下如何开放80端口

linux清屏命令:clear 1.开启80端口命令:/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT2.保存配置 命令:/etc/rc.d/init.d/iptables save 3.重启服务命令 :/etc/rc.d/init.d/iptables restart4.查看已经开放的端口: /etc/init.d/iptables status