ftpサーバーの基本設定とSSL [ vsftpd ]

vsftpdとは

vsftpdとは、LinuxなどUnix系でよく利用されるftpサーバーです。 UbuntuやCentOSなどで標準のftpサーバーとなっています。

データを暗号化して通信するプロトコルftpsに対応し、パーミッションにかなり厳密な硬派なソフトウェアといった印象です。設定ファイルは逆にものすごく単純な記法で書きやすいです。

環境

  • Alima Linux 8.7 (RHEL系)
  • vsftpd 3.0.3

また、利用するftpクライアントはlftpを想定しています。起動して動作確認する、などの内容ではlftpの方法で記述します。

起動させるまで

インストール

最初から入っている方が多いかもしれません。

dnf -y install vsftpd

起動

まずは起動できるかを一応確認しましょう。

systemctl start vsftpd

設定

基本

設定ファイルは基本的に/etc/vsftpd/にあります。

メインの編集ファイルは/etc/vsftpd/vsftpd.confです。 設定ファイルを見ていただけるとわかると思いますが、設定は基本的に

設定項目=YES or NO or value

といった形になっています。なので、各項目が何を意味しているのか考えながら設定すると理解しやすいです。

匿名アカウントの無効化

匿名アカウントでの利用を許可しない設定です。基本的にユーザーを用意するなどして利用すると思われるので無効化します。

anonymous_enable=NO

ローカルユーザーで認証する

文字通りローカル(vsftpdが起動しているサーバー)のユーザーで認証するためにYESにします。

local_enable=YES

また、今の設定だと、/etc/vsftpd/user_listに追加されているユーザーにはログインできないようになります。最低限rootは追加しておきましょう。

putを許可

ftpでサーバーに書き込めるようにする

write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES

ログインバナーを変え、バージョンを隠す

バージョンを隠すことで脆弱性に少し強くなります。

ftpd_banner=Welcome message.
seccomp_sandbox=NO

起動確認

一度ここで起動確認しましょう。最後にSSL関連をやりますが、ここまでで動かないと確実に動かないです。 ここでは、ftp-userというユーザーにログインする想定で記述していきます。

lftp ftp-user@127.0.0.1
#                                 ↑
#            vsftpdが起動している端末のIP or URL

このようになると、ログインまでは成功です!しかし、コマンドを打つとエラーになることもあるので、lsコマンドも打っておきましょう。

SSL設定

ここでは、サーバー 証明書と対応した秘密鍵が必要になります。購入したものや、Let’s Encryptで取得するなど方法は複数がありますが、今回は自己証明書で行きます。Webサーバーなどで利用しているものがあればそれでも大丈夫です。

証明書,秘密鍵発行

sudo openssl genrsa -aes256 2048 > vsftpd.key
sudo openssl req -new -key vsftpd.key -x509 -days 365 -out vsftpd.pem
mv vsftpd.key vsftpd.key.bak
sudo openssl rsa -in vsftpd.key.bak -out vsftpd.key
sudo sudo chown root:root vsftpd.pem vsftpd.key
sudo mv vsftpd.key /etc/pki/tls/private/
sudo mv vsftpd.pem /etc/pki/tls/certs/

以上で、自分で署名した証明書と秘密鍵が手に入ります。一応しきたりに従って/etc/pki/tls/*/に置いてますが、特に場所はあまり関係ないので/etcのどこかに置きましょう。

途中キーフレーズの追加や削除を行なっています。これは、証明書の発行にキーフレーズを入力するためです。一連の操作で一つの文字列を使ってください。

vsftpd.confの編集

#SSL
ssl_enable=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=NO
ssl_tlsv1_1=YES
ssl_tlsv1_2=YES

ssl_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8:!EXP
force_local_data_ssl=YES
force_local_logins_ssl=YES

rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
rsa_private_key_file=/etc/pki/tls/private/vsftpd.key

この設定では、SSL2,SSL3,TLS1.0を無効化しています。 また、使用される暗号についても、強度が強いものが選択されるようにしています。 また、force_local_data_sslで、ftps通信を必須としています。

最後の二行で、証明書と鍵を指定しています。

再起動して接続確認

systemctl restart vsftpd

で確認しましょう。

自己証明書なので、危険とでますが、ftpsで接続可能です。これら証明書と秘密鍵をちゃんとしたものに変えると、完全なftpsで通信できます。