Show Table of Contents
3.5. FTP の設定
ファイル転送プロトコル (FTP) は旧式の複雑なマルチポートプロトコルで、ロードバランサーを使用する環境では扱いが難しくなります。扱いの難しさを理解するには、初めに FTP の仕組みで重要となる点を理解する必要があります。
3.5.1. FTP の動作
ほとんどのサーバー/クライアント関係では、クライアントマシンが特定のポート上でサーバーへ接続を開いて、サーバーがそのポートのクライアントに応答します。FTP クライアントが FTP サーバーに接続する場合、FTP 制御ポート 21 への接続を開きます。そして、その クライアントが FTP サーバーに アクティブ か パッシブ のどちらの接続を開くかを指示します。クライアントが選択した接続タイプにより、サーバーの対応方法とトランザクションが発生するポートを決定します。
データ接続は以下の 2 種類です。
- アクティブ接続
- アクティブ接続が確立されると、サーバーはポート 20 からクライアントマシン上の高い範囲のポートにクライアントへデータ接続を開きます。サーバーからのすべてのデータは、この接続を通じて送信されます。
- パッシブ接続
- パッシブ接続が確立されると、クライアントは FTP サーバーに対してパッシブ接続ポートを確立するように依頼します。これは 10,000 より高いポートになります。するとサーバーは、この特定のセッション用に高い数値のポートをバインドして、このポート番号をクライアントに中継します。クライアントは、データ接続のために新規にバインドされたポートを開きます。クライアントが作成するデータ要求それぞれ、別個のデータ接続となります。最近の FTP クライアントのほとんどは、 サーバーからデータを要求する場合、パッシブ接続を試みます。
注記
接続タイプを決定するのは、サーバーではなく クライアント です。つまり、効果的に FTP をクラスター化するには、アクティブ接続とパッシブ接続の両方を処理するように LVS ルーターを設定する必要があることになります。
HTP のクライアントとサーバーの関係によって、Keepalived が認識しない多くのポートが開かれる可能性があります。
3.5.2. ロードバランサーのルーティングへの影響
IPVS パケット転送は、それをベースにしたクラスターへの接続とそのクラスターからの接続のみを許可し、そのポート番号やファイアウォールマークを認識します。クラスター外のクライアントが IPVS で処理するように設定されていないポートを開こうとした場合、接続は切断されます。同様に、実サーバーが IPVS が認識できないポート上でインターネット接続を開こうとした場合も、接続は切断されます。つまり、インターネット上の FTP クライアントからのすべての接続は、それらに割り当てられているファイアウォールマークと同じである必要があり、FTP サーバーからの全接続は、ネットワークパケットのフィルタリングルールを使用して正常にインターネットに転送される必要があることを意味します。
注記
パッシブ FTP 接続を有効にするには、
ip_vs_ftp カーネルモジュールがロードされていることを確認します。これは、シェルプロンプトで管理ユーザーとして modprobe ip_vs_ftp コマンドを実行することで可能です。
3.5.3. ネットワークパケットフィルタルールの作成
FTP サービスの
iptables ルールを割り当てる前に、「マルチポートサービスとロードバランサー」 で既存のネットワークパケットフィルタールールをチェックするためのマルチポートサービスおよびテクニックに関する情報を確認してください。
以下のルールは、ファイアウォールマーク
21 をFTP トラフィックへ割り当てます。
3.5.3.1. アクティブ接続のルール
アクティブ接続のルールは、ポート
20 (FTP データポート) 上で 内部 のフローティング IP アドレス宛の接続を許可および転送するようカーネルに指示します。
以下の
iptables コマンドにより、LVS ルーターは IPVS が認識していない実サーバーからの外向けの接続を受け付けることが可能になります。
/usr/sbin/iptables -t nat -A POSTROUTING -p tcp -s n.n.n.0/24 --sport 20 -j MASQUERADE
この
iptables コマンドの n.n.n は、keepalived.conf ファイルの virtual_server セクションで定義され、NAT インターフェースの内部ネットワークインターフェースに割り当てられるフローティング IP の最初の 3 つの値に置き換える必要があります。
3.5.3.2. パッシブ接続のルール
パッシブ接続のルールは、10,000 から 20,000 までの広い範囲のポートで、インターネットからフローティング IP アドレスへの接続に適切なファイアウォールマークを割り当てます。
警告
パッシブ接続でポート範囲を制限している場合、FTP サーバーである
vsftpd を設定し、同じポートの範囲を使用するようにする必要があります。これには、以下の行を /etc/vsftpd.conf に追加します。
pasv_min_port=10000
pasv_max_port=20000
実際の FTP サーバーアドレスを上書きする
pasv_address の設定は使用しないでください。LVS により仮想 IP アドレスに更新されるためです。
他の FTP サーバーの設定については、個別のドキュメンテーションを参照してください。
この範囲はほとんどの状況では十分なものです。しかし、以下のコマンド内の
10000:20000 を 1024:65535 に変更することで、利用可能な非保護ポートすべてを含めることができます。
以下の
iptables コマンドは、適切なポート上のフローティング IP 宛のトラフィックにファイアウォールマーク 21 を割り当てます。これにより、IPVS で認識され、適切に転送されます。
/usr/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 --dport 21 -j MARK --set-mark 21
/usr/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 --dport 10000:20000 -j MARK --set-mark 21
この
iptables コマンドの n.n.n.n は、keepalived.conf ファイルの virtual_server サブセクションで定義される FTP 仮想サーバーのフローティング IP アドレスに置き換える必要があります。
上記のコマンドは即座に有効になりますが、保存されていないとシステムの再起動後に保持されません。変更を保存するには、以下のコマンドを入力します。
# systemctl save iptables

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.