読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

FTPサーバ構築(パッシブFTP)

FTPサーバ
FTPには ・PORTモード(アクティブFTP) ・PASVモード(パッシブFTP の2通りの接続があります。この違いについて述べていきます。 まずですが、FTPではポートを2つ使用してます。 1つは制御用、もう1つはデータ転送用です。PORTとPASVではこのポートが異なります。 PORTモードがFTPの元来の使用方法で、 制御・・・21番ポート データ転送・・・20番ポート を通してFTPクライアントから接続するときに使用します。PASVモードはブラウザ等からアクセスすることが可能であり、 制御・・・21番ポート データ転送・・・任意のポート を使用します。 ではどんなメリットがあるのか、大きな違いは何かを説明します。 ◆パッシブではデータ転送用ポートの設定が不要 アクティブFTPではデータ転送のために20番ポートに対して ルータによるポートの開放 IPマスカレード設定 サーバのFW(ファイアウォール)のポート開放 などが必要でした。これが設定されていないと接続自体できません(LIST命令も返ってこない)。 これは「外から内への接続はルータやFWで制限される」ためです。当然ですね。私もこれは知っていました。重要なのは次です。 逆にいうと「中から外は制限されない」となるわけです。 そう、内から外への接続であれば、上記の設定をしなくても接続できます。私は勘違いしていて、「とにかく接続するためには必ずポート開放をしなくてはならない」と思っていました。 これを利用したのがパッシブFTPで、FTPクライアントから21番ポートに対して接続することを伝え、「サーバ側にデータ転送用ポートの準備をしてもらう」のです。これにより、内から外への接続が準備され、ルータやFWの開放をすることなしにクライアントとの接続を確立できます。 これにより外部から見えてしまうポートを減らせますし、パッシブでデータ転送に使用するポートは毎回変更されるのでセキュリティ的にはこちらが推奨されています。 なのでパッシブであれば、制御用ポートである ・21番ポートを解放する だけで接続できます。 ◆実際のサーバの設定方法 以前でしたらconfファイルを編集したりする必要がありましたが、現在ではルータがほとんど対応しているので特に必要ありません。 逆に対応しているのにconfファイルでPASV系の編集をすると「LIST」命令で止まることがあります(私はこれでずっとできませんでした)。 つまり、サーバ構築系サイトでたまに書いてあるパッシブ系設定の pasv_enable=YES pasv_address=ルータのWAN側のIPアドレス (デフォルト:なし サーバのNICアドレス) pasv_addr_resolve=YES pasv_min_port=最小ポート番号 (デフォルト:0 任意のポートを使用) pasv_max_port=最大ポート番号 (デフォルト:0 任意のポートを使用) などを書かないことがポイントでした。 私の失敗例として pasv_enable=YES pasv_address=ルータのWAN側のIPアドレス pasv_addr_resolve=YES pasv_min_port=最小ポート番号 pasv_max_port=最大ポート番号 としていたわけなんですが、問題なのがNAT問題解決のための pasv_address pasv_addr_resolve の部分。ここをルータが自動で解決してくれるのに、自分で中途半端な設定をしてしまうとログインはできても「LIST」で止まって接続できません。 ◆クライアント側の設定 filezillaでしたら 編集→設定→FTP→パッシブ を選択すればOKです。接続時のログに「PASV」と表示されるようになります。 ◆実際に接続すると パッシブFTPで接続し、データ転送を行うと $ sudo netstat -untap した際に、複数のポートで TIME_WAIT の状態が現れます。これはサーバ側で任意でデータ転送ポートを指定しているからですね。 一方アクティブFTPで接続すると20番ポートで「TIME_WAIT」が現れます。規定通りですね。 以上です。 次回はSSLを用いたFTPSや、SSHを用いたSFTPについて解説します。 ソース: アクティブFTPとパッシブFTP FTPサーバ(vsftpd)の構築(RedHat系編) FTPサーバー接続時のLIST取得失敗について・・・。