防火墙:Centos 6
我最近启用了双因素身份验证,使用 Google Authenticator,因此某些用户无法通过 SCP 进行传输。因此,我找到的解决方案是使用 VSFTP(Ubuntu 22.04 LTS)通过 FTP(主动)传输文件。由于我所在大学的网络限制严格(不允许使用被动 FTP),我使用主动 FTP。我能够成功将 SSH 访问重定向到服务器。但是,我在使用 FTP 时遇到了困难。我已经尝试了几种规则,并在论坛上阅读了大量文档和提示。
防火墙。打开端口:
- 22/TCP、2222/TCP、65020/TCP、65021/TCP。
内部服务器。打开端口:
- 20/TCP、21/TCP、22/TCP。
在端口 22/TCP 上接收到通过 SSH 访问防火墙的请求。
防火墙上端口 2222/TCP 收到的请求被重定向到内部服务器上的端口 22/TCP(SSH)。
防火墙上端口 65020/TCP 收到的请求被重定向到内部服务器上的端口 20/TCP(FTP-DATA)。
防火墙上端口 65021/TCP 收到的请求被重定向到内部服务器上的端口 21/TCP(FTP)。
以下是防火墙IPTABLES规则:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2222 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 65020 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 65021 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 65020 -j DNAT --to-destination 192.168.0.2:20
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 65021 -j DNAT --to-destination 192.168.0.2:21
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.0.2:22
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
端口 2222/TCP 重定向运行正常。我可以通过 SSH 访问内部服务器。通过 FTP 访问不起作用。我从 Filezilla 收到以下消息:
状态:正在连接到 172.17.1.212:65021...状态:已建立连接,正在等待欢迎消息...状态:服务器不安全,不支持 FTP over TLS。状态:服务器不支持非 ASCII 字符。状态:已登录状态:正在检索目录列表...命令:PWD 响应:257 “/” 是当前目录命令:TYPE I 响应:200 切换到二进制模式。命令:PORT 172,17,1,253,233,145 响应:500 非法 PORT 命令。命令:PASV 响应:227 进入被动模式 (192,168,0,2,56,33)。命令:LIST 错误:20 秒不活动后连接超时错误:无法检索目录列表
我尝试过其他规则,但我不会把它们放在这里,因为我不想让不必要的信息弄乱帖子。
“nf_conntrack_ftp”模块已加载。
# lsmod | grep ftp
nf_conntrack_ftp 12081 0
nf_conntrack 79761 7 nf_conntrack_ftp,ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
IPV4 转发也已加载:
# sysctl -p | grep "net.ipv4.ip_forward"
net.ipv4.ip_forward = 1
通过内部网络的 FTP 访问工作正常(我使用 Filezilla 的主动模式选项)。
有人能帮助我了解我做错了什么吗?
我最诚挚的问候。
答案1
您的问题与主动 FTP 模式有关,它使用单独的连接进行控制和数据,这可能会导致您的iptables
规则出现问题。
首先设置一个端口范围vsftpd.conf
pasv_min_port=50000
pasv_max_port=50100
然后重新启动
sudo service vsftpd restart
然后打开适当的端口范围iptables -A INPUT -p tcp -m tcp --dport 50000:50100 -j ACCEPT
然后我们将ports
FTP 数据连接从防火墙重定向到您的内部服务器
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50000:50100 -j DNAT --to-destination 192.168.0.2
然后最终配置Filezilla
为使用passive
模式而不是active
模式,然后它应该可以工作。