現象
Docker 環境上に建てた vsftpd のサーバに対して FFFTP で接続しようとすると以下のエラーが表示されてファイル一覧の取得に失敗します。
500 Illegal PORT command.
PORTコマンドが受け付けられません.
ファイル一覧の取得を中止しました.
ファイル一覧の取得に失敗しました.
ユーザ名・パスワードの認証は通っているので、どうもパッシブモードにしようとした際にコケている印象。
# less /etc/vsftpd/vsftpd.conf
## 略
## パッシブモード有効
pasv_promiscuous=YES
pasv_min_port=60000
pasv_max_port=60100
vsftpd.conf
ではこのようにパッシブモードを設定していて、
ports:
- "21:21"
- "60000-60100:60000-60100"
docker-compose.yml
ではこのようにそのままのポート番号を開けている状態です。
対処
色々試しましたが、最終的な原因は「ホストの設定」→「特殊機能」タブの「PASVで返されるアドレスを無視」にチェックを入れたところ解決しました。
vsftpd がパッシブアドレスとしてグローバルっぽいIPアドレスを返しており、そこに接続しようとしていたのが失敗の要因だったようです。今回に限って言えば何せ Dockerコンテナ 上なのでホストアドレスとしては 127.0.0.1
で良いわけです。
参考
- FFFTPでファイル一覧の取得に失敗する「425エラー」を対策 | 己で解決!泣かぬなら己で鳴こうホトトギス
- FFFTP 「500 Illegal PORT command / PORTコマンドが受け付けられません」 – 無題なログ
- FFFTPのローカルFTPサーバへの接続で500 Illegal PORT command. | ピロリロール
- OpenVPNを介したFTP接続設定を追加した件 – DENET 技術ブログ
- FTPなんもわからん | ICTSC Tech Blog
- centosでvsftpdを起動するDockerコンテナをDockerfileで作成しながらDockerの使い方を覚える – Qiita
- ファイル転送(FTPコマンド)