![iptables FTP 连接跟踪不起作用](https://linux22.com/image/770846/iptables%20FTP%20%E8%BF%9E%E6%8E%A5%E8%B7%9F%E8%B8%AA%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我希望有人能给我指明正确的方向。
在公共 IP 上运行 proftpd(支持 tls)。
FTP 客户端连接成功,但无法列出目录。当我将 iptables 上的“INPUT”策略更改为 ACCEPT 时,它就可以正常工作了。
以下是我的相关iptables规则:
$IPTABLES -A INPUT -i eno1 -s 0/0 -d x.x.x.x -p tcp --sport 1024:65535 -m multiport --dports 20,21,989,990 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d x.x.x.x --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
我已经启用了 connection_tracking 模块。
server ~ # lsmod | grep nf_conntra
nf_conntrack_ftp 24576 3
nf_conntrack 176128 8 xt_conntrack,nf_nat,xt_state,xt_nat,xt_helper,nf_conntrack_ftp,xt_CT,xt_MASQUERADE
nf_defrag_ipv6 24576 1 nf_conntrack
nf_defrag_ipv4 16384 1 nf_conntrack
libcrc32c 16384 2 nf_conntrack,nf_nat
我还在 /proc 中启用了 nf_conntrack_helper
server ~ # cat /proc/sys/net/netfilter/nf_conntrack_helper
1
答案1
proftpd (支持 tls)
TLS 支持可能是罪魁祸首。
通常在智能防火墙中,当您允许 FTP 时,您需要打开控制连接的端口 TCP 21,然后,在明文 FTP 协议中,conntrack 模块可以扫描并检测响应PORT
。然后,FTP conntrack 帮助模块将自动打开 FTP 服务器分配给该特定客户端的端口号,从而实现更细粒度的访问控制。
当使用 TLS 加密连接时,防火墙无法再检测到 PORT 响应,因此不会自动打开分配的端口。解决方案是:
将 FTP 服务器用于被动连接的端口范围固定到小范围
PassivePorts min-pasv-port max-pasv-port
在防火墙中打开端口 21 和固定范围的端口以进行数据连接