zoukankan      html  css  js  c++  java
  • 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、参考二参考三

    为美好的生活奋斗!
  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/ethtool/p/12397536.html
Copyright © 2011-2022 走看看