核心升級後 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 啟動系統時才會出現此問題(我不知道這些之間的其他版本是否也受到影響)。
**問題:**我區域網路外的使用者按照上面的規則可以正常訪問和使用FTP服務。該問題僅影響 LAN 中使用 DNS 名稱啟動 FTP 連接的使用者,該名稱解析為公共地址,因此連接返回 LAN 並到達 FTP 伺服器。最後一行在那裡,因此 FTP 伺服器不會直接將連接傳遞給客戶端。
這似乎只影響載入 nf_conntrack_ftp 模組時在 /etc/modprobe.d 中指定的 FTP 連接和其他埠(例如,添加的埠 80 規則按預期工作)。我不認為 rp_filter 與它有任何關係,因為我已經禁用它並且沒有任何改變。此外,使用 iptables LOG,我可以看到數據包一直傳輸到 POSTROUTING 鏈。在 FTP 伺服器上執行 Wireshark 時,我檢查並確認沒有一個數據包到達它。
所以,我的問題是:我做錯了什麼嗎?在這個核心版本中是否有一些新方法可以滿足我的需求?或者這可能是一個錯誤?
謝謝您的幫助!
最近的核心不再根據編譯的埠號自動附加連接跟踪幫助程序。相反,您必須向
raw
表中添加特定規則以附加這些助手。因此,對於您的範例,我認為您需要添加以下內容:
iptables -t raw -A PREROUTING -d $public_ip -p tcp --dport 21 -j CT --helper ftp
這還應該注意確保在沒有顯式
modprobe
命令的情況下載入輔助模組。
試試這個,
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.