VSFTPD TLS と明示モード

VSFTPD TLS と明示モード

現在、Ubuntu 16.04 サーバーに VSFTPD をセットアップしようとしており、FTPS を使用したいと考えています (理想的には SFTP を使用したいのですが、残念ながらレガシー システムに制約されています)

デフォルトの設定と TLS なしでセットアップすることができ、FileZilla 経由で問題なく接続できます。ただし、過去 2 日間、TLS を有効にしようとしましたが、SE やその他の場所でいくら質問しても良い結果は得られませんでした。

vsftpd.conf ファイル内の証明書の詳細は次のとおりです。

rsa_cert_file=/path/to/fullchain.pem
rsa_private_key_file=/path/to/privkey.pem
allow_anon_ssl=NO
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES

しかし、FileZilla コンソールに次のように表示され、接続できなくなりました。

Status:         Verifying certificate...
Status:         TLS connection established.
Status:         Server does not support non-ASCII characters.
Status:         Logged in
Status:         Retrieving directory listing...
Status:         Server sent passive reply with unroutable address. Using server address instead.
Command:    LIST
Error:      Connection timed out after 20 seconds of inactivity
Error:      Failed to retrieve directory listing

VSFTPD を設定するのは今回が初めてなので、オンラインのチュートリアルをいくつか参照しました。チュートリアルでは UFW も取り上げられており、図のようにポートを開きました。

また、vsftpd.confファイルに次の行を追加してみました。

  ssl_tlsv1=YES
  ssl_sslv2=NO
  ssl_sslv3=NO

  require_ssl_reuse=NO
  ssl_ciphers=HIGH

pasv_addressオプションについて言及している他の投稿を見ました

そこで、サーバーの外部 IP を使用してこれを構成に追加してみました。これは Google Compute Engine でホストされており、チュートリアルで指定されたのと同じポートなどを許可するように Compute のファイアウォール ルールも更新したことに注意してください。ただし、これも機能しません。

これはポート/ファイアウォールまたはその他の TLS オプションに関係しているとしか思えませんが、まったくわかりません。Google Cloud ネットワーク ファイアウォールと ufw を使用していることは役に立たないようです (ufw を無効にしても効果はありません)

私の ufw ルールは次のようになります。

20/tcp                     ALLOW       Anywhere                  
21/tcp                     ALLOW       Anywhere                                   
990/tcp                    ALLOW       Anywhere                  
40000:50000/tcp            ALLOW       Anywhere 

さらに詳しく知りたい人のために、私が参考にしたチュートリアルはここにあります:FTP アクセスの設定

vsftpd.log には問題を示すログはないようですが、FileZilla で詳細ログをオンにすると次のようになります。

データ接続元 IP を制御接続元 IP 192.168.1.100 にバインドします

これはローカル IP のように見えるので、問題である可能性があります。ただし、vsftpd.conf ファイルに次の内容も含まれているため、これを修正する方法がわかりません。

pasv_address=(外部 Google コンピューティング IP)

私の Google Cloud ファイアウォール ルールは次のとおりです。

IP ranges: 0.0.0.0/0
tcp:20-21   
Allow
1000
default

pass-ports
sftp    
IP ranges: 0.0.0.0/0
tcp:40000-50000

(これらは最終的には IP 的にロックダウンされますが、すべてテストしても動作しません)

また、vsftpd.conf ファイルでは、次のポートを使用するポートとして追加したと思います。

port_enable=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=41000

アップデート

lftpと以下の引数を使用して、ボックス自体からこれに接続できるようになりました。

ftp:ssl-force を true に設定する

証明書はドメインにマップされているため、IP ではなくドメイン名で接続します。IP では機能しません。

その後、コマンドラインから新しいディレクトリなどを作成できます。しかし、実行しようとするとls、エラーが発生し、そこで停止します。また、FileZillaなどの外部FTPクライアント経由でもエラーが発生します。これは、コマンドls at 0 [Making data connection...]でタイムアウトします。LIST

Command:    LIST
Error:          The data connection could not be established: ETIMEDOUT - Connection attempt timed out
Response:   425 Failed to establish connection.
Error:          Failed to retrieve directory listing
Error:          GnuTLS error -15: An unexpected TLS packet was received.
Status:         Disconnected from server: ECONNABORTED - Connection aborted

関連があると思われる唯一の他の情報は、ドメインが NGINX によってノード アプリにポート転送されることです。ただし、これはポート 80 と 443 に対してのみ実行されるはずなので、ポート 21 には影響しないはずです。

誰か何かアイデアはありますか?

関連情報