通過 iptables 將 FTP 流量轉發到本地伺服器
我有一個負載平衡的基礎設施,它有一個邊緣伺服器作為負載平衡器,一些 Web 伺服器作為後端伺服器,還有一個 cpanel 伺服器,它是我的 ftp 伺服器。我想通過 iptables 將 ftp 流量轉發到負載平衡器伺服器後面的 ftp 伺服器。場景如下:
LB:
ens19:public_ip
ens18:192.168.1.105
ftpserver:
eth0:192.168.1.110
LB 的作業系統是 CentOS 7,ftpserver 的作業系統是 CentOS 6。我禁用了 firewalld 並安裝了 iptables。nat ftp 流量規則如下:
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j LOG -A FORWARD -i ens19 -o ens18 -p tcp --syn --dport 21 -m conntrack --ctstate NEW -j ACCEPT -A FORWARD -i ens19 -o ens18 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A FORWARD -i ens18 -o ens19 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A PREROUTING -i ens19 -p tcp --dport 21 -j DNAT --to-destination 192.168.1.110:21 -A POSTROUTING -o ens18 -p tcp --dport 21 -d 192.168.1.110 -j SNAT --to-source 192.168.1.105 -A POSTROUTING -s 192.168.1.0/24 -o ens19 -j MASQUERADE COMMIT
我還在 iptables-config 文件中添加了以下行:
IPTABLES_MODULES=“ip_nat_ftp ip_conntrack_ftp”
和 net.ipv4.ip_forward = 1。
在我想連接到 ftp 後,我收到以下錯誤:
$> ftp public_ip Connected to public_ip. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 11:19. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (public_ip:sinai): ftp_user_name 331 User ss@mihankhabar.net OK. Password required Password: 230 OK. Current restricted directory is / Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful 425 Could not open data connection to port 29806: Connection timed out ftp>
我認為登錄過程已完全完成,問題在於傳輸數據。你能幫我解決這個問題嗎?
提前致謝。
所以它連接正常,但不傳輸數據。FTP 使用 21TCP 建立連接,但使用 20TCP 發送/接收數據。也嘗試為 20TCP 複製轉發/SNAT/DNAT 規則:
-A FORWARD -i ens19 -o ens18 -p tcp –syn –dport 20 -m conntrack –ctstate NEW -j ACCEPT
-A PREROUTING -i ens19 -p tcp –dport 20 -j DNAT –to-destination 192.168.1.110:21
-A POSTROUTING -o ens18 -p tcp –dport 20 -d 192.168.1.110 -j SNAT –to-source 192.168.1.105
或者您可以嘗試被動模式 FTP。在這種情況下,伺服器連接回客戶端(再次埠 20)以傳輸數據,因此出站連接應該通過 NAT 路由器 OK。