Iptables

核心升級後 FTP NAT 停止工作

  • October 30, 2017

升級到較新的核心版本後,我遇到了一些 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.

引用自:https://serverfault.com/questions/849159