FTP 通信を ファイアウォール(Firewall)や iptables (CentOS7以後は Firewalld) で通す方法を紹介します。
まずは FTP のパッシブモード(Passive Mode)とアクティブモード(Active Mode)を理解する必要があります。
(1)パッシブモード (Passive Mode)
一般的なFTPのモードです。ポイントは通信の向きです。セッションは常にFTPクライアントからFTPサーバ方向です。
初めは21番ポートを使用しますが、その後は high port で通信されます。
常にクライアントからサーバ方向の向きとなります。よって企業内や学校内PCではパッシブモードが必須です。
有名なffftp ではデフォルトで パッシブモードです。
(2)アクティブモード (Active Mode)
アクティブモードはあまり使われないモードです。
初めは21番ポートを使用するのはパッシブモードと同じですが、通信が始まると逆にサーバ側からクライアント側へ20番ポートで通信します。
20番ポートはFTPサーバからFTPクライアント側となります。よってファイアウォールでは内部に入ってくるので一般的な企業や学校内では許可されないでしょう。(セキュリティ上の理由)
Windows 標準の ftp.exe (コマンドプロンプトベースのツール) はアクティブモードです。画面には "Passive Mode"と表示されますが、誤りと思われます。
(2017年現在で ftp.exe は パッシブモードでは使用できないようです。)
(3)データの流れと通信(セッション)の向きの違いは重要
よく間違えるのはデータの流れと通信の向きは違うということです。例えばFTPサーバからファイルをダウンロードする場合、FTPクライアントからFTPサーバへ接続するので向きは FTP クライアント→ FTPサーバとなります。ただし実際のデータの向きは FTPサーバ → FTP クライアントとなります。違いに注意してください。
(4)ファイアウォールでの許可
最近のファイアウォールはFTPに対応しており、FTP通信を認識したらその後の通信はパケット内部をチェックして自動的に必要なパケットを通すようになります。通信が終了したらそれ以後はポートを許可しません。詳細はファイアウォールメーカーに確認してください。
(5)iptables、firewalld
iptablesやfirewalld でも FTPを考慮して設計されています。20番やhigh ポートを設定で通すのではなく、iptablesやfirewalld の機能に任せるのが一番です。
例:
firewall-cmd --add-service=ftp
(*)本ページは CentOS 7.2以後を想定しています。
最終更新日:2017/09/24
[ホーム] -
[ Redhat Linux 7 FAQ 一覧]