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> passive
Passive 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、参考二参考三

posted @ 2020-03-02 20:01  香农Shannon  阅读(754)  评论(0编辑  收藏  举报