FTPS - 通过 TLS 显式 FTP - 无法获取目录列表

FTPS - 通过 TLS 显式 FTP - 无法获取目录列表

更新- 解决问题的总结:修复路由器上输入错误的端口后,我收到错误“450 TLS 数据连接会话未恢复或会话与控制连接不匹配” - 这导致我取消勾选服务器设置“使用 PROT P 时要求在数据连接上恢复 TLS 会话”,从而解决了问题。不确定禁用此“功能”对安全性意味着什么。 ------

原始帖子- 我的目标是让 Explicit FTP over TLS 与 Firezilla 服务器协同工作。我已将 Firezilla 和 Windows 防火墙设置为允许相同范围的端口进入。

Firewall Ports: 21, 50000-51000
Firezilla Server: Passive Ports: 50000-51000

我的路由器也将这个范围的端口通过 TCP 转发到正确的 LAN IP。

我的服务器位于 NAT 后面,并且具有静态 IP,该 IP 也列在 Firezilla Server 的被动设置选项卡上。我成功的唯一方法是当客户端位于 NAT 的同一侧,并且仅当直接使用普通 FTP 并且仅处于主动模式时。

我使用 ftptest.net 进行了测试,这是日志

通过 TLS 进行显式 FTP

Status: Resolving address of xxx.x.xxx.xxx
Status: Connecting to xxx.x.xxx.xxx
Warning: The entered address does not resolve to an IPv6 address. 
Status: Connected, waiting for welcome message... 
Reply: 220-FileZilla Server 0.9.60 beta 
Reply: 220 Welcome 
Command: CLNT https://ftptest.net on behalf of xxx.x.xxx.xxx 
Reply: 200 Don't care 
Command: AUTH TLS 
Reply: 234 Using authentication type TLS 
Status: Performing TLS handshake... 
Status: TLS handshake successful, verifying certificate... 
Status: Received 1 certificates from server. 
Status: cert[0]: subject='CN=xxx.x.xxx.xxx,C=US,ST=My state,L=My city' issuer='CN=xxx.x.xxx.xxx,C=US,ST=My state,L=My city' 
Command: USER username 
Reply: 331 Password required for username 
Command: PASS ************* 
Reply: 230 Logged on 
Command: SYST 
Reply: 215 UNIX emulated by FileZilla 
Command: FEAT 
Reply: 211-Features: 
Reply: MDTM 
Reply: REST STREAM 
Reply: SIZE 
Reply: MLST type*;size*;modify*; 
Reply: MLSD 
Reply: AUTH SSL 
Reply: AUTH TLS 
Reply: PROT 
Reply: PBSZ 
Reply: UTF8 
Reply: CLNT 
Reply: MFMT 
Reply: EPSV 
Reply: EPRT 
Reply: 211 End 
Command: PBSZ 0 
Reply: 200 PBSZ=0 
Command: PROT P 
Reply: 200 Protection level set to P 
Command: PWD 
Reply: 257 "/" is current directory. 
Status: Current path is / 
Command: TYPE I 
Reply: 200 Type set to I 
Command: PASV 
Reply: 227 Entering Passive Mode (xxx,x,xxx,xxx,196,44) 
Command: MLSD 
Reply: 425 Can't open data connection for transfer of "/" 
Error: Listing failed 

允许回退到普通 FTP

Warning: Allowing fallback to plaintext FTP is insecure. You should use explicit FTP over TLS.
Status: Resolving address of xxx.x.xxx.xxx 
Status: Connecting to xxx.x.xxx.xxx 
Warning: The entered address does not resolve to an IPv6 address. 
Status: Connected, waiting for welcome message... 
Reply: 220-FileZilla Server 0.9.60 beta 
Reply: 220 Welcome 
Command: CLNT https://ftptest.net on behalf of xxx.x.xxx.xxx 
Reply: 200 Don't care 
Command: AUTH TLS 
Reply: 234 Using authentication type TLS 
Status: Performing TLS handshake... 
Status: TLS handshake successful, verifying certificate... 
Status: Received 1 certificates from server. 
Status: cert[0]: subject='CN=xxx.x.xxx.xxx,C=US,ST=My state,L=My city' issuer='CN=xxx.x.xxx.xxx,C=US,ST=My state,L=My city' 
Command: USER username 
Reply: 331 Password required for username 
Command: PASS ************* 
Reply: 230 Logged on 
Command: SYST 
Reply: 215 UNIX emulated by FileZilla 
Command: FEAT 
Reply: 211-Features: 
Reply: MDTM 
Reply: REST STREAM 
Reply: SIZE 
Reply: MLST type*;size*;modify*; 
Reply: MLSD 
Reply: AUTH SSL 
Reply: AUTH TLS 
Reply: PROT 
Reply: PBSZ 
Reply: UTF8 
Reply: CLNT 
Reply: MFMT 
Reply: EPSV 
Reply: EPRT 
Reply: 211 End 
Command: PBSZ 0 
Reply: 200 PBSZ=0 
Command: PROT P 
Reply: 200 Protection level set to P 
Command: PWD 
Reply: 257 "/" is current directory. 
Status: Current path is / 
Command: TYPE I 
Reply: 200 Type set to I 
Command: PASV 
Reply: 227 Entering Passive Mode (xxx,x,xxx,xxx,196,107) 
Command: MLSD 
Reply: 425 Can't open data connection for transfer of "/" 
Error: Listing failed 

我将非常感激任何帮助我解决这个问题的帮助。提前致谢。

答案1

防火墙和 NAT 设备在 TLS 上进行 FTP 传输时存在双重问题,既存在防火墙问题,又存在 NAT 问题。

  1. FTP 是一种糟糕的协议,需要两个连接:

  2. 在被动 FTP 中,最初是到默认端口 TCP 21 的一个控制连接

  3. 要真正传输数据(获取目录列表也是一种数据传输),客户端需要第二个 TCP 连接, 这data连接。FTP
    客户端使用PASV控制字请求被动 F​​TP 连接后,FTP 服务器将选择一个“随机可用的临时”非默认端口,并通过响应宣布该端口PORT。PORT
    响应通常包含 6 个八位字节,例如,PORT h1,h2,h3,h4,p1,p2 其中h1.h2.h3.h4是 FTP 服务器的 IPv4 IP 地址,TCP 端口号是,(p1*256) + p2xxx,x,xxx,xxx,196,107代表端口 (196 * 256) + 107 = 50283

  4. 在 FTP over TLS 中,客户端和 FTP 服务器之间的连接是加密的。这会导致受防火墙保护且位于 NAT 设备后面的服务器出现问题。

防火墙问题

通常在智能防火墙中,当您允许 FTP 时,您需要打开控制连接的端口 TCP 21,然后,在明文 FTP 协议中,防火墙可以扫描并检测 PORT 响应。然后,FTP 帮助模块将自动打开 FTP 服务器分配给该特定客户端的端口号,从而实现非常精细的访问控制。

当使用 TLS 加密连接时,防火墙无法再检测到 PORT 响应,因此不会自动打开分配的端口。
解决方案是:

  • 将 FTP 服务器用于被动连接的端口范围固定到小范围
  • 在防火墙中打开端口 21 和固定范围的端口以进行数据连接

NAT 问题

当 FTP 服务器位于执行网络地址转换和端口转发的设备后面时,端口 21 上的控制连接上的流量将从 NAT 设备的(外部)IP 地址转发到 FTP 服务器上的端口 21。
此外,它将运行类似的 NAT FTP 帮助程序模块,该模块在明文 FTP 协议中可以扫描和检测 PORT 响应。
看到PORT响应后,它通常会进行两项更改:

  • 在响应中,FTP 服务器的PORT h1,h2,h3,h4,p1,p2IP 地址将被替换为表示客户端连接到的 NAT 服务器的(外部)IP 地址。h1,h2,h3,h4e1,e2,e3,e4e1.e2.e3.e4
  • 为该客户端制定动态端口转发规则,将定义的端口p1,p2从 NAT 设备转发到 FTP 服务器。

当 FTP 连接使用 TLS 加密时,NAT 设备无法检测到 PORT 响应,因此 NAT 设备既不能重写 ip 地址,也不能自动创建所需的端口转发规则。

此类 NAT 问题的典型解决方案是:

  • 重新配置 FTP 服务器,以便它在响应中h1.h2.h3.h4使用e1.e2.e3.e4NAT 设备的外部 IP 地址,而不是它自己的 IP 地址。PORT
  • 将 FTP 服务器用于被动连接的端口范围固定到小范围
  • 除了 TCP 端口 21 之外,还要为您在 FTP 服务器中配置的被动端口范围中的每个端口创建明确的端口转发(NAT)规则到 FTP 服务器上的相应端口,即
    e1.e2.e3.e4 port 50000 --> h1.h2.h3.h4 port 50000,,
    e1.e2.e3.e4 port 50001 --> h1.h2.h3.h4 port 50001等等
    e1.e2.e3.e4 port 50002 --> h1.h2.h3.h4 port 50002。...

别忽视,除了 FTP 服务器上基于主机的防火墙之外,可能还涉及其他防火墙或安全组。例如,除了端口转发规则之外,您可能还需要在 NAT 设备中创建防火墙规则。

相关内容