LoginSignup
2
3

More than 3 years have passed since last update.

[AWS] NLB経由でFTP接続する際の注意点

Posted at

内容

  • AWSにおいて、ロードバランサー配下のEC2でFTPサーバを稼働させて外部からFTP接続する際の注意点
  • FTPはパッシブモード、暗号化方式はexplicit(明示的)モードを使用する
  • FTPサーバは、vsftpdを使用する

構成

構成図.png

こうしたかった理由

  • EC2はウェブサーバとして使用していて、ACMを使用してサーバ証明書を安価に使用したかった(ACMはEC2には使えない)
  • NLBをかますことで、EC2に外部IPアドレスを付与させないようにしたかった

NLBの設定

  1. リスナーの追加
    制御ポート:21(TCP)
    データ転送用ポート:60001(TCP)
    データ転送用ポート:60002(TCP)
    データ転送用ポート:60003(TCP)

  2. ターゲットグループの追加
     1.で設定したリスナーに対して、バックエンドのEC2に繋ぐようにそれぞれターゲットグループを作成する

セキュリティグループの設定

セキュリティグループを追加して、EC2インスタンスに設定する。

タイプ プロトコル ポート範囲 ソース
カスタムTCP TCP 21 外部から接続してくるユーザのグローバルIPアドレス
カスタムTCP TCP 60001-60002 外部から接続してくるユーザのグローバルIPアドレス

EC2の設定

  • vsftpdをインストールする
sudo yum install vsftpd
sudo systemctl enable vsftpd.service
sudo systemctl start vsftpd.service
  • vsftpdの設定をする
sudo vim /etc/vsftpd/vsftpd.conf
listen=YES
listen_ipv6=NO

ssl_enable=YES
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES

pasv_enable=YES
pasv_min_port=60001
pasv_max_port=60003
pasv_addr_resolve=YES
pasv_address=<NLB DNSホスト名 or NLBのAレコードを設定したホスト名>
tcp_wrappers=NO
  • vsftpdの起動スクリプトを修正する(注意点)

このままでも動作するが、EC2を再起動した際にvsftpdが自動起動に失敗する事象が発生した。

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2020-07-30 03:50:54 UTC; 58s ago
  Process: 787 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)

Jul 30 03:50:54 ip-10-221-233-5.ap-northeast-1.compute.internal systemd[1]: Starting Vsftpd ftp daemon...
Jul 30 03:50:54 ip-10-221-233-5.ap-northeast-1.compute.internal vsftpd[787]: 500 OOPS: cannot resolve host:corpweb.common.hk-test.net
Jul 30 03:50:54 ip-10-221-233-5.ap-northeast-1.compute.internal systemd[1]: vsftpd.service: Control process exited, code=exited status=2
Jul 30 03:50:54 ip-10-221-233-5.ap-northeast-1.compute.internal systemd[1]: vsftpd.service: Failed with result 'exit-code'.
Jul 30 03:50:54 ip-10-221-233-5.ap-northeast-1.compute.internal systemd[1]: Failed to start Vsftpd ftp daemon.

pasv_address に登録したホスト名の名前解決ができていないのが原因らしい。
サービスの起動順序では、networkサービスの起動後にvsftpdが起動するように設定されているが、それでも名前解決に失敗する。
何かしらのサービスの起動順序に依存しているのだろうと思うが、そのサービスを特定できなかった。
しかたないので、vsftpdの起動スクリプトで一定時間待機(私は30秒にした)させることで、名前解決できるようにした。
もっといい解決策をご存知の方がいれば教えて下さい。

sudo  vim /etc/systemd/system/multi-user.target.wants/vsftpd.service
# ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ExecStart=/usr/bin/bash -c "sleep 30; /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf"

以上。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3