今回はパッシブモードでの接続を許可する設定方法について見ていきます。
まず、パッシブモードで使用するポートを確認しましょう。
上図のように、データコネクションで使用するポートはランダムであり定まっていません。そのため、単純なパケットフィルタで許可しようとすると、次のようなパケットフィルタルールを適用する必要があります。
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ファイル送受信が可能になりました。