11.4. LVS 叢集中的 FTP

檔案傳輸協定(FTP)是一種舊的且複雜的多埠通訊協定,它呈現了對一個叢集環境獨特的挑戰性,為了了解 這些挑戰性的天性,您必須先了解關於 FTP 如何運作的一些重要的事項。

11.4.1. FTP 如何運作

在大部分其他的主從關係,用戶端機器開啟一個連線到伺服器上的一個特定連接埠,然後伺服器再回應到 用戶端的該連接埠。 當一部 FTP 用戶端連線到一部 FTP 伺服器時,它將開啟一個連線到 FTP 控制連接埠 21,然後用戶端將告知 FTP 伺服器是否該建立一個 主動被動 的連線。 由用戶端選擇的連線類型可決定 伺服器如何回應,以及這個處理將會發生在那些連接埠。

資料連線的兩種類型為:

主動連線

當建立一個主動連線時,伺服器開啟一個資料連線到用戶端,從埠號 20 到用戶端 機器上的高範圍連接埠,所有來自伺服器的資料都會通過這個連線。

被動連線

當建立一個被動連線時,用戶端會向 FTP 伺服器要求建立一個被動連線的連接埠, 可以是任何高於 10000 的連接埠。 然後伺服器將會為這個特定的作業階段繫結到這個高連接埠,並且轉接 這個埠號給用戶端。 用戶端並會為這個資料連線開啟全新繫結的連接埠,每一個用戶端發出的資料要求, 將會產生另一個資料連線,大部分當代的 FTP 用戶端都會嘗試建立一個被動連線到 FTP 伺服器。

在此關於叢集有兩件事需要特別注意的是:

  1. 用戶端決定連線的類型,而不是伺服器,這表示為了要有效地叢集 FTP,您必須設定 LVS 路由器來處理主動與被動的連線。

  2. FTP 主從的關係可能會在 Piranha 組態設定工具 與 IPVS 都不知情的情況下開啟大量的連接埠。

11.4.2. 如何影響到 LVS 路由

IPVS 封包轉送只允許進出叢集的連線,必須基於叢集能夠辨識封包的連接埠號或防火牆標記。 假如來自叢集 外部的用戶端試著開啟一個 IPVS 未設定來處理的連接埠,該連線將會被丟棄。 同樣地,假如實時伺服器試著 在一個 IPVS 未設定來處理的連接埠上開啟一個連接網際網路的連線,該連線也將會被丟棄。 這表示, 所有來自網際網路中 FTP 用戶端的連線,必須擁有指派給它們 的相同防火牆標記,並且來自 FTP 伺服器的所有連線必須 使用網路封包過濾規則來適當地轉送。

11.4.3. 建立網路封包過濾規則

在指派任何 iptables 規則給 FTP 服務前,請先檢視 第 11.3.1 節 中關於多埠服務以及檢查既有網路封包過濾規則技術的資訊。

以下為指派相同防火牆標記 21 給 FTP 流量的規則,為了使這些規則正常運作,您也必須使用 Piranha 組態設定工具VIRTUAL SERVER 小節來設定一個虛擬伺服器給埠號 21(在 Firewall Mark 欄位使用 21 的數值),請參考 第 12.6.1 節 以取得詳細資訊。

11.4.3.1. 主動連線的規則

用於主動連線的規則會告知核心接受並且轉送傳送至內部浮動 IP 位址於埠號 20 的連線 — FTP 資料連接埠。

iptables
/sbin/iptables -t nat -A POSTROUTING -p tcp \
               -s n.n.n.0/24 --sport 20 -j MASQUERADE

在以上的 iptables 指令中,必須以 Piranha 組態設定工具GLOBAL SETTINGS 方框中所定義用於 NAT 介面的內部網路介面之浮動 IP 的前三個數值取代 n.n.n。 這個指令允許 LVS 路由器接受來自實時伺服器 的外來連線(IPVS 不知情的情況下)。

11.4.3.2. 被動連線的規則

用於被動連線的規則指派適當的防火牆標記給來自網際網路的連線給在一個廣泛範圍連接埠服務的浮動 IP — 10,000 至 20,000。

警告警告
 

假如您要限制被動連線的連接埠範圍,您也必須設定 VSFTP 伺服器來使用相符的埠號範圍,您可以藉由增加下列這些行到 /etc/vsftpd.conf 檔案中來完成:

pasv_min_port=10000
pasv_max_port=20000

您也必須控制被動 FTP 連線顯示給用戶端的伺服器位置,在一個 NAT 路由的 LVS 系統上,請新增下列這些 行到 /etc/vsftpd.conf 檔案來以 VIP 強制覆寫實時伺服器的 IP 位址,這就是用戶端 進行連線時所看到的位址,舉例來說:

pasv_address=X.X.X.X

請以 LVS 系統的 VIP 位址取代 X.X.X.X

如需其他 FTP 伺服器的設定資訊,請參閱個別的說明文件。

這個範圍應該要夠大才能適用於大部分的狀況,然而您可以更改以下指令中的 10000:200001024:65535 來增加這個數量以包括所有可用的非安全連接埠。

iptables
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32  \
               --dport 21 -j MARK --set-mark 21
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32 \ 
               --dport 10000:20000 -j MARK --set-mark 21

在以上的 iptables 指令中,必須以 Piranha 組態設定工具VIRTUAL SERVER 小節中所定義用於 FTP 虛擬伺服器之浮動 IP 取代 n.n.n.n。 這些指令有指派防火牆標記 21 給目標為適當連接埠上浮動 IP 之任何流量的純效應,將會由 IPVS 所辨識並且妥善地轉送。

警告警告
 

以上的指令將會立即生效,不過請勿堅持進行重新啟動系統。 如要確定重新開機後可以回復網路封包過濾設定, 請參考 第 11.5 節

最後,您必須確定適當的服務已設定為在適當的執行等級啟動,如需關於這個的更多資訊,請參考 第 10.1 節