Linux

通過 iptables 將 FTP 流量轉發到本地伺服器

  • June 16, 2017

我有一個負載平衡的基礎設施,它有一個邊緣伺服器作為負載平衡器,一些 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。

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