Docker環境 に FFFTP でFTP接続しようとして「500 Illegal PORT command.」が表示されてファイル一覧が取得できない

現象

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で返されるアドレスを無視」にチェックを入れる
「ホストの設定」→「特殊機能」タブの「PASVで返されるアドレスを無視」にチェックを入れる

色々試しましたが、最終的な原因は「ホストの設定」→「特殊機能」タブの「PASVで返されるアドレスを無視」にチェックを入れたところ解決しました。

vsftpd がパッシブアドレスとしてグローバルっぽいIPアドレスを返しており、そこに接続しようとしていたのが失敗の要因だったようです。今回に限って言えば何せ Dockerコンテナ 上なのでホストアドレスとしては 127.0.0.1 で良いわけです。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。