vsftpdでFTPS接続をできるように設定する

vsftpdのFTPS (File Transfer Protocol over SSL/TLS)の対応

vsftpdでFTPS接続が必要になりFTPS接続できるように設定を追加しました。

FTP接続では制御用コネクションとデータ転送用コネクションとも暗号化されずに平文でセキュリティ上問題があります
FTPS (File Transfer Protocol over SSL/TLS) は、FTPで送受信するデータをTLS・SSLで暗号化して通信するのでセキュリティ対策となります

FTPSを利用するにはサーバ証明書が必要になります。今回はWEBサーバー利用している「Let’s Encrypt」の無償SSL証明書を使用します

vsftpdのftps利用できるように設定する

今回FTPS接続する場合ですが対応するvsftpdのサーバーですが、すでにftp接続ができる環境でインストール・設定されている状態となっています。SSL証明書は以下のディレクトリに保存されているとします。

  • 証明書ファイル: /etc/letsencrypt/live/examle.com/cert.pem
  • 秘密鍵ファイル: key_file=/etc/letsencrypt/live/examle.com/privkey.pem

また接続するTLSはTLS1.2 のみします。
FTPS接続する場合ですが、990番を使用しする「Implicit(暗黙的)モード」は使用せず、「Explicit(明示的)モード」で接続します

  • Explicit(明示的)モード:接続時は暗号化せずにAUTHコマンドを実行してから内容を暗号化
  • Implicit(暗黙的)モード:990番ポートに接続し、最初から内容を暗号化

 

1.vsftpdの設定ファイルのバックアップします

$ sudo cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

2.「vsftpd.conf」 の設定変更

# FTPSを有効にする
ssl_enable=YES

# SSL証明書と秘密鍵のファイルパス
rsa_cert_file=/etc/letsencrypt/live/examle.com/cert.pem
rsa_private_key_file=/etc/letsencrypt/live/examle.com/privkey.pem

# TLSのバージョン指定
ssl_tlsv1=NO
ssl_tlsv1_1=NO
ssl_tlsv1_2=YES

# SSLのバージョン指定
ssl_sslv2=NO
ssl_sslv3=NO

# 強制的にTLSを使用する(暗号化を必須にする)
force_local_data_ssl=YES
force_local_logins_ssl=YES

# SSL再利用を無効にする(セキュリティのため)
require_ssl_reuse=NO

# PASVモードの設定(必要に応じて調整)
pasv_min_port=10000
pasv_max_port=10100

# 暗号化された接続を使用するための設定
ssl_ciphers=HIGH

3.F/WにFTPSで使用するポートを追加する

# 21板を追加
$ sudo firewall-cmd --permanent --add-port=21/tcp

# PASVモードで使用するポート (10000 ~ 10100) を追加する
$ sudo firewall-cmd --permanent --add-port=10000-10100/tcp

# firewall を再起動します
$ sudo firewall-cmd --reload

4.vsftpdを再起動します

$ sudo systemctl restart vsftpd