内核升级后 FTP NAT 停止工作

内核升级后 FTP NAT 停止工作

升级到较新的内核版本后,我遇到了一些 DNAT/SNAT 问题。我使用 Fedora 24 作为网络防火墙,并且我的 LAN 内有一个 FTP 服务器。防火墙有公有和私有 IP 地址。在 Fedora 服务器上,使用内核 4.6.5-300.fc24.x86_64,以下 iptables 规则集按预期工作:

    #!/bin/bash

    modprobe iptable_nat
    modprobe nf_conntrack
    modprobe nf_conntrack_ftp
    modprobe nf_nat_ftp

    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT

    iptables -F
    iptables -F -t nat
    iptables -X
    iptables -Z

    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
    echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -t nat -A PREROUTING -d $public_ip -p tcp --dport 21 -j DNAT --to-destination 192.168.0.10:2121

...

    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -d 192.168.0.10 -p tcp --dport 2121 -j ACCEPT

    iptables -t nat -A POSTROUTING -s 192.168.0.10 -p tcp --sport 2121 -j SNAT --to-source $public_ip

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.10 -p tcp --dport 2121 -j SNAT --to-source 192.168.0.1

...

仅当我使用内核版本 4.10.10-100.fc24.x86_64 启动系统时才会发生此问题(我不知道这些版本之间的其他版本是否也受到影响)。

问题:按照上述规则,我的 LAN 之外的用户能够正常访问和使用 FTP 服务。该问题仅影响使用 DNS 名称启动 FTP 连接的 LAN 用户,DNS 名称解析为公共地址,因此连接返回 LAN 并到达 FTP 服务器。最后一行是为了让 FTP 服务器不直接将连接传递给客户端。

这似乎只会影响加载 nf_conntrack_ftp 模块时在 /etc/modprobe.d 中指定的 FTP 连接和附加端口(例如,添加的带有端口 80 的规则按预期工作)。我不认为 rp_filter 与此有​​关,因为我已禁用它,但没有任何变化。此外,使用 iptables LOG,我可以看到数据包一直传输到 POSTROUTING 链。在 FTP 服务器上运行 Wireshark 时,我检查并确认没有一个数据包到达它。

所以,我的问题是:我做错了什么吗?在这个内核版本中是否有一些新方法可以完成我需要的操作?或者这可能是一个错误?

谢谢您的帮助!

答案1

最近的内核不再根据编译的端口号自动附加连接跟踪助手。相反,您必须向表中添加特定规则raw来附加这些助手。因此,对于您的示例,我认为您需要添加类似以下内容:

iptables -t raw -A PREROUTING -d $public_ip -p tcp --dport 21 -j CT --helper ftp

这还应该确保辅助模块无需明确的modprobe命令即可加载。

答案2

尝试这个,

echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

这与内核日志有关,
nf_conntrack: automatic helper assignment is deprecated and it will be removed soon. Use the iptables CT target to attach helpers instead.

答案3

对此问题给出一些反馈,似乎已在内核 4.13 中修复。奇怪的是,更新日志中没有报告任何有关 netfilter 组件的功能(https://kernelnewbies.org/Linux_4.13)。我的规则集在 4.6 上运行良好,但在 4.12 之前停止运行,现在它在 4.13 上再次运行,没有更改一行(除了更新了帮助程序的正确使用,但这在 4.6 上也经过了测试并运行良好)。因此,在 4.13.9-200.fc26.x86_64 上启动时它可以运行,而在 4.12.5-300.fc26.x86_64 上它会停止运行。

相关内容