今回はパッシブモードでの接続を許可する設定方法について見ていきます。

まず、パッシブモードで使用するポートを確認しましょう。

FTPパッシブモード使用ポート
上図のように、データコネクションで使用するポートはランダムであり定まっていません。そのため、単純なパケットフィルタで許可しようとすると、次のようなパケットフィルタルールを適用する必要があります。

FTPクライアント(From) FTPサーバー(To)
1024~65535 許可 21 許可
1024~65535 許可 1024~65535 許可

上表のとおり、ほとんどのポートを開放する必要があり、これではパケットフィルタを設定する意味がありません。そこでiptablesにその問題を解決してくれるモジュールを組み込む対応を取ります。

「ip_conntrack_ftp」というモジュールを組み込んでおくと、データコネクションやパッシブモードの対応を自動で行ってくれます。

コントロールコネクション用のポート開放

「ip_conntrack_ftp」モジュールの組み込み設定を行う前に、まずはFTPサーバーで待ち受けるコントロールコネクション用のポートを開放する必要があります。
ポートは21番になりますので21番ポートの入力(受信)パケットを許可する必要があります。21番ポートを開けるには以下コマンドを実行します。

# iptables -I INPUT 4 -p tcp --dport 21 -j ACCEPT

ルールを挿入する場所は適宜変更してください。上記例では4番目に挿入しています。

FTP関連モジュールの設定

「ip_conntrack_ftp」モジュールはFTPプロトコルを識別し、使うポートを追跡して適宜開けてくれます。(つまり、ポートレベルでフィルタリングするのではなく、Windowsファイアウォールなどと同じようにアプリケーションレベルでフィルタリングしてくれます。)
また、IPマスカレードを使用している場合は、「ip_nat_ftp」モジュールもロードします。

二つのモージュールをロードするには、「/etc/sysconfig/iptables-config」に以下のように記述します。

IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"

これでiptablesが起動するタイミングで自動的にロードされるようになりました。。

あとは、iptablesを再起動します。

# service iptables restart

以上で、パッシブモードでのFTPファイル送受信が可能になりました。