使用 iptables 将活动 FTP 流量重定向到另一台服务器

使用 iptables 将活动 FTP 流量重定向到另一台服务器

网络方案 - IP 地址是虚构的

防火墙: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

然后我们将portsFTP 数据连接从防火墙重定向到您的内部服务器

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50000:50100 -j DNAT --to-destination 192.168.0.2

然后最终配置Filezilla为使用passive模式而不是active模式,然后它应该可以工作。

相关内容