对于具有匿名 ftp 服务器 (vsftpd) 的公共文件存档,我需要恢复被动 ftp,它在一段时间前将 Ubuntu 16 LTS 升级到 18 LTS 后停止工作(随后将升级到 20)。SE 网络周围的先前答案表明,除了在内核和防火墙中配置连接跟踪外,还应在核心 设置或系统控制 配置。
然而,这经常引用的文章关于使用助手的说明指出“这不是最佳选择,甚至存在安全风险”。这一点在这个答案,但我发现在这种情况下没有其他答案对设置 net.netfilter.nf_conntrack_helper = 1 有这样的保留。
所以我不确定:使用起来是否安全或者有风险?
除非我启用 nf_conntrack_helper,否则被动 ftp 会被 UFW 阻止。或者 conntrack 配置中存在其他疏忽?
背景
带有 ftp 模块的内核 4.15.x:
$ lsmod | grep ftp
nf_nat_ftp 16384 0
nf_nat 28672 1 nf_nat_ftp
nf_conntrack_ftp 16384 1 nf_nat_ftp
nf_conntrack 110592 9 nf_conntrack_ipv6,nf_conntrack_ftp,nf_conntrack_ipv4,nf_conntrack_broadcast,nf_nat_ftp,nf_conntrack_netbios_ns,xt_CT,xt_conntrack,nf_nat
vsftpd 限制了 pasv 端口范围:
pasv_min_port=49152
pasv_max_port=60999
UFW 中的相关配置行规则之前:
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
在用户规则:
### tuple ### allow tcp 21 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 21 -j ACCEPT
在规则之后:
*raw
-A PREROUTING -p tcp --dport ftp -j CT -helper ftp
COMMIT
*filter
:ufw-after-input - [0:0]
:ufw-after-output - [0:0]
:ufw-after-forward - [0:0]
-A ufw-after-input -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp -d <IP-address> --dport 49152:60999 -j ACCEPT