●vsftpd.confの設定
参考URL:FTPサーバー構築(vsftpd)
参考URL:vsftpdを設定した
参考URL:CentOSでftpsをセットアップ(vsftpd)
以下のように設定します。
Firewallで必要なポートを開放します。
●証明書の作成
オレオレ証明書を作成します。有効期限は約10年としています。
●証明書の接続確認
証明書(オレオレ証明書の場合)を確認します。
証明書(Let's Encryptの場合)を確認します。
CentOS 7.9 OpenSSL 1.0.2k-fipsから接続するとオレオレ証明書、Let's Encrypt発行の証明書にかかわらずTLSv1.2での接続となります。
●ftps接続の確認
参考URL:FTP サーバー : Vsftpd over SSL/TLS
参考URL:CentOSでftpsをセットアップ(vsftpd)
※2021年11月現在、FFFTPではTLS接続ができませんでした。
したがって、TLS接続が可能なFileZillaの利用を推奨します。
WindowsにFFFTPをインストールして接続を確認します。
「基本」タブで「ホストの設定名」「ホスト名(アドレス)」「ユーザー名」「パスワード/フレーズ」を設定します。
「拡張」タブで「PASVモードを使う」をチェックし「ポート番号:21」にします。
「暗号化」タブで「FTPS(Explicit)で接続」にチェックを入れます。
設定を保存後、接続してみます。
タイトルバー部分に「暗号化されています」と表示されています。アップロード・ダウンロードできるかどうか確認してください。
参考URL:FTPサーバー構築(vsftpd)
参考URL:vsftpdを設定した
参考URL:CentOSでftpsをセットアップ(vsftpd)
以下のように設定します。
# vi /etc/vsftpd/vsftpd.conf 匿名ユーザのログイン不可 anonymous_enable=NO ローカルユーザでのログイン許可 local_enable=YES FTPログインしてPUTを可能にする(デフォルトはGETしかできない) write_enable=YES /var/log/vsftpd.logに接続・転送を記録(その1) xferlog_enable=YES /var/log/vsftpd.logに接続・転送を記録(その2) xferlog_file=/var/log/vsftpd.log /var/log/vsftpd.logに接続・転送を記録(その3) ファイルのアップロードとダウンロードのログを xferlog_fileオプションで<指定したファイルに記録 xferlog_std_format=NO データを無転送時の切断時間(秒) data_connection_timeout=300 リモートクライアントがFTPコマンドを実行しなかった場合の切断時間(秒) idle_session_timeout=600 アスキーモードでのアップロード及びダウンロードを許可 ascii_upload_enable=YES ascii_download_enable=YES FTPログイン時にソフト名とバージョンが表示されないようにする ftpd_banner=Welcome to blah FTP service. seccomp_sandbox=NO allow_writeable_chroot=YES FTPログインしたユーザが上の階層へ行けないようにする chroot_local_user=YES chroot_list_fileオプションで指定したユーザリストファイルを読み込み chrootさせる(または、させない)などの設定 chroot_list_enable=YES (デフォルトのままコメントアウト) chrootさせる(または、させない)ローカルユーザのリストを含むファイル名を指定 chroot_list_file=/etc/vsftpd/chroot_list ← 別サーバで立ち上げ時、このファイルをコピーする 設定が複雑なので、下記参照 chroot_list_enable=YES chroot_local_user=YES chroot_list_fileオプションで指定したファイルにリストされたユーザ以外はchrootされます。 chroot_local_user=YES chroot_list_enable=NO すべてのローカルユーザはchrootされる chroot_local_user=NO chroot_list_enable=YES chroot_list_fileオプションで指定したファイルにリストされたユーザはchrootされる chroot_local_user=NO chroot_list_enable=NO すべてのローカルユーザはchrootされない ディレクトリごと削除できるようにする ls_recurse_enable=YES IPv4接続を有効化 listen=YES Ipv6接続を無効化 listen_ipv6=YES ※IPv4接続を無効化、IPv6接続を有効化した状態ではPASV接続できなかった。 以下は、追記項目 ローカルタイムを適用する(世界標準時ではなく日本時間) use_localtime=YES PASVモード接続先IPアドレスをホスト名から取得 pasv_addr_resolve=YES PASVモードで接続する場合、IPアドレスを正引きできるホスト名を記載 ※ただし、インターネット側とイントラネット側で同じホスト名を設定している場合、イントラ側のIPアドレスを返答することになるのでインターネット側から接続できなくなる。 その場合、インターネット側のIPアドレスを直接記載しておく。DDNSではインターネット側のIPアドレスが可変なので、それに合わせて書き換えが必要となる。 pasv_address=www.bigbang.mydns.jp PASVモード接続時の最小ポート番号 pasv_min_port=60000 PASVモード接続時の最大ポート番号 pasv_max_port=60010 オレオレ証明書の作成方法は下記を参照してください。 サーバ証明書の作成 SSLの有効化 ssl_enable=YES ※サーバ(オレオレ)証明書を利用する場合、下記のように記載 rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem ※Let's Encryptの証明書を既に利用している場合、下記のように記載 rsa_cert_file=/etc/letsencrypt/live/www.bigbang.mydns.jp/fullchain.pem rsa_private_key_file=/etc/letsencrypt/live/www.bigbang.mydns.jp/privkey.pem POODLE対策のためNO ssl_sslv2=NO ssl_sslv3=NO TLS1.2、1.3を使う ssl_tlsv1=NO ssl_tlsv1_1=NO ssl_tlsv1_2=YES ログイン時にSSL接続を強制しない ※暗号化しない接続もできるようにする場合のみ # コントロールコネクションでSSL認証し、データコネクションで認証されたSSLセッションを再利用する:YES # ↑ FileZillaクライアントの場合、こちらの設定でも動作する(推奨) # コントロールコネクションでSSL認証し、データコネクションでは認証を行わない:NO # ↑ FFFTPクライアントの場合、こちらの設定でないと動作しない require_ssl_reuse=NO データ転送時にSSL接続を強制しない force_local_logins_ssl=NO 暗号化しない接続もできるようにする場合のみ force_local_data_ssl=NO ※SSLを強制する場合は下記のように設定します。 force_local_data_ssl=YES force_local_logins_ssl=YES ロギング設定 syslog_enable=YES ← これを有効にすると/var/log/messagesに記録され、上記xferlog_fileには記録されなくなる debug_ssl=YES※pasv_addressには、サーバのグローバルIPアドレスが牽けるホスト名を指定する。なお、DNSサーバを導入して内部からの名前解決時にプライベートIPアドレスに変換してしまっている場合は、新たにドメインを取得し、DNSサーバに設定しないようにして、取得したドメイン名をpasv_addressに指定する。
Firewallで必要なポートを開放します。
# firewall-cmd --add-service=ftp --permanent # firewall-cmd --add-port=60000-60010/tcp --permanent # firewall-cmd --runtime-to-permanent # firewall-cmd --list-service dns ftp http https smtp ssh # firewall-cmd --list-port 60000-60010/tcp # firewall-cmd --reload success
●証明書の作成
オレオレ証明書を作成します。有効期限は約10年としています。
# cd /etc/pki/tls/certs # openssl req -x509 -nodes -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem -days 3650 Generating a RSA private key ............................................+++++ ....+++++ writing new private key to 'vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP ← 国名コード State or Province Name (full name) []:Tokyo ← 地域 Locality Name (eg, city) [Default City]:Tokyo ← 都市 Organization Name (eg, company) [Default Company Ltd]:BIGBANG ← 組織名 Organizational Unit Name (eg, section) []:BIGBANG ← 組織の部門名 Common Name (eg, your name or your server's hostname) []:www.bigbang.mydns.jp ← サーバ名のFQDN Email Address []:root@mail.bigbang.mydns.jp ← 管理者のメールアドレス作成された証明書のパーミッションを変更します。
# chmod 400 vsftpd.pem
●証明書の接続確認
証明書(オレオレ証明書の場合)を確認します。
# openssl s_client -connect localhost:21 -starttls ftp CONNECTED(00000003) : : Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 1871 bytes and written 731 bytes Verification error: self signed certificate --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 18 (self signed certificate) --- 220 Welcome to blah FTP service. --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 : :
証明書(Let's Encryptの場合)を確認します。
# openssl s_client -connect localhost:21 -starttls ftp CONNECTED(00000003) : : Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 4843 bytes and written 731 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- 220 Welcome to blah FTP service. --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 : :
CentOS 7.9 OpenSSL 1.0.2k-fipsから接続するとオレオレ証明書、Let's Encrypt発行の証明書にかかわらずTLSv1.2での接続となります。
※オレオレ証明書の場合 # openssl s_client -connect www:21 -starttls ftp CONNECTED(00000003) : : verify error:num=18:self signed certificate : : SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 ※Let's Encrypt証明書の場合 # openssl s_client -connect www:21 -starttls ftp CONNECTED(00000003) : : SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384
●ftps接続の確認
参考URL:FTP サーバー : Vsftpd over SSL/TLS
参考URL:CentOSでftpsをセットアップ(vsftpd)
※2021年11月現在、FFFTPではTLS接続ができませんでした。
したがって、TLS接続が可能なFileZillaの利用を推奨します。
WindowsにFFFTPをインストールして接続を確認します。
「基本」タブで「ホストの設定名」「ホスト名(アドレス)」「ユーザー名」「パスワード/フレーズ」を設定します。

「拡張」タブで「PASVモードを使う」をチェックし「ポート番号:21」にします。

「暗号化」タブで「FTPS(Explicit)で接続」にチェックを入れます。

設定を保存後、接続してみます。

タイトルバー部分に「暗号化されています」と表示されています。アップロード・ダウンロードできるかどうか確認してください。