FTPSサーバーの設定

ALL
スポンサーリンク
スポンサーリンク

はじめに

FTPの通信をSSL/TLSで暗号化する、FTPSサーバーの Ubutn/CentOSでの設定方法です。

似たものに SFTP がありますが、SFTPではSSHを使用した転送となります。
SFTPサーバーの設定は、下記の記事を参照してください。

家庭用NASにSSHサーバ経由でsftpでアクセスできるようにする – パソコン鳥のブログ

本記事で説明している FTPSサーバーでは、FTPS接続時のディレクトリを chrootによって指定できます。また、設定(以降に記載の allow_writeable_chroot=YES)によって、chrootしたディレクトリ直下へも書き込みができます。

一方、SFTPサーバーでは、SFTP接続ユーザにルートとして見せるディレクトリは、所有者 root で書き込み権限も root のみにしないといけない制限があり、chrootしたディレクトリ直下へは書き込みできません。これは、SSHのchrootの制限のためです。

FTPSサーバーの設定

設定内容

本記事では、以下のように設定を行います。

  • 接続ユーザーアカウントは、サーバー上のLinuxユーザーアカウントです。
    後述の設定で、接続できるユーザーを指定できます。
  • 接続ユーザーのディレクトリは、chrootによってユーザーのホームディレクトリがルートディレクトリになります。
    ホームディレクトリより上位にアクセスする場合は、後述の設定が必要です。
  • FTPSサーバーとしてパッシブモードが有効です。パッシブモードで利用するサーバーのポートは、40000~40030 とします。

基本的な設定

FTPSサーバーとしてvsftpdを使用します。

Ubuntuの場合
apt install vsftpd

CentOSの場合
yum install vsftpd

vsftpdの設定ファイルを以下のように修正します。
このファイルは、
Ubuntu:/etc/vsftpd.conf
CentOS:/etc/vsftpd/vsftpd.conf
です。

同じ設定項目がすでにあれば、以下の内容に変更してください。無い場合は、追加してください。

listen=YES
listen_ipv6=NO
write_enable=YES
chroot_local_user=YES
ls_recurse_enable=YES
userlist_enable=NO
anonymous_enable=NO

allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/user_conf
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40030

ssl_enable=YES
ssl_ciphers=ssl_ciphers=kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 !SHA1 !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED !DES
rsa_cert_file=/etc/vsftpd/server.crt
rsa_private_key_file=/etc/vsftpd/server.key

rsa_cert_file 、rsa_private_key_file でサーバ証明書、サーバ用秘密鍵を指定します。
オレオレ証明書(自己署名証明書)を用いる場合は、次の記事で作成方法を参照してください。
CentOS6/CentOS7/Ubuntu14.04 でのサーバ証明書の作成方法 – パソコン鳥のブログ

ssl_ciphers の記述内容で、接続の際に使用する暗号化するプロトコルはTLSv2以上としています。個別に ssl_sslv2=NO 等の指定は不要です。
RedHat系(CentOSも)では、ssl_tlsv1_2=YES のように、ssl_tlsv1_1=、ssl_tlsv1_2= が使えますが、Ubuntuではそのオプションは無いので、上記のように ssl_ciphers の設定によって、暗号化するプロトコルがTLSv2以上になるようにしています。

必要なディレクトリを作成します。

mkdir -p /etc/vsftpd/user_conf

記述したら、vsftpdを起動します。

systemctl enable vsftpd
service vsftpd restart

接続できるユーザーの制限

FTPS接続できるユーザーを制限する場合は、vsftpdの設定ファイルを以下のようにします。
このファイルは、
Ubuntu:/etc/vsftpd.conf
CentOS:/etc/vsftpd/vsftpd.conf
です。

userlist_enable=YES
userlist_file=/etc/vsftpd/userlist
userlist_deny=NO

続けて、FTPS接続させるユーザーを /etc/vsftpd/userlist に、1行に1ユーザーで記述します。

vsftpdに反映させます。

service vsftpd reload

SSH接続の制限

本記事では、Linuxサーバー上のユーザーでFTPS接続可能にする設定ですが、FTPS接続だけ可能にし、SSH接続をさせたくない場合は、次の作業が必要です。

SSH接続をさせないユーザー名を指定して、次のコマンドを実行します。
ユーザーのログインシェルを、すぐ終了する nologin にすることで、ログインできなくします。

sudo usermod -s /usr/sbin/nologin ユーザー名

また、/etc/shells に次の行が無ければ追加します。
ユーザーのログインシェルが /etc/shells に記載が無いと、vsftpd で接続ができないので、下記を追加する必要があります。

/usr/sbin/nologin

接続時のルートディレクトリの指定

上記設定では、ホームディレクトリがルートディレクトリになります。
それ以外のディレクトリを指定する場合は、ここでの作業が必要です。

FTPS接続させるユーザーごとに、ファイル /etc/vsftpd/user_conf/ユーザー名 を作成します。
ファイルの内容は次のようにします。
ディレクトリ の箇所に、ルートディレクトリとなるディレクトリを指定します。

local_root=ディレクトリ

ファイアウォールの設定

FTPSサーバーのファイアウォールの設定を行います。
以下の値 40000、40030は、先の「基本的な設定」で、pasv_min_port、pasv_max_port に指定した値です。

Ubuntuでは、以下を実行します。

ufw allow ftp
ufw allow 40000:40030/tcp

CentOSでは以下を実行します。

firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=40000-40030/tcp --permanent
firewall-cmd --reload

以上でサーバーの設定は完了です。

クライアント(WinSCP)の接続

設定したFTPSサーバーへ、WinSCPで接続する場合の設定です。

セッションの箇所で、「転送プロトコル」に “FTP”、「暗号化」に ”明示的なTLS/SSL” を指定します。
ユーザー名・パスワードは、FTPSサーバーの設定をしたLinuxサーバーのものを指定します。
ポーと番号は21のままにしてください。

また、上記画面で [設定] を押して、「高度なサイトの設定」を出します。
ここで、ダイアログ画面左のツリーで「環境」を選択し、「ファイル名を UTF-8 でエンコード」を “オン” にします。

ダイアログ画面左のツリーで「TLS/SSL」を選択し、「TLS/SSL の最小バージョン」を “TLS 1.2” にします。

以上が WinSCP の設定です。

参考

【vsftpd】FTPサーバーでchroot設定するとログイン出来なくなってしまう原因と対策 – 中堅プログラマーの備忘録
【CentOS7】vsftpdでパッシブモードのFTPサーバーを設定する – 中堅プログラマーの備忘録
CentOS7 の vsftpd でホームディレクトリ直下も書き込み可能にする – Ewig Leere(Lab2)
vsftpdでFTPユーザーごとのルートディレクトリを設定する方法 – DACELO SPACE
Linux の使い方: vsftpd でホームディレクトリより上を参照禁止にする (CentOS 5.4)
vsftpd で特定のアカウントに chroot を設定する
vsftpdで550 Permission denied.がでてファイルが書き込めなくてハマった件 » KUMA TYPE
【vsftpd】FTPをSSL/TLSで暗号化する設定 #vsftpd – Qiita
vsftpdでパッシブモードを設定する | ex1-lab
最近のnologinは/etc/shellsに含まれていない #RaspberryPi – Qiita
ftp – How to enable TLS 1.1 minimum on vsftpd – Server Fault
PowerProtect DPシリーズ アプライアンスおよび統合データ保護アプライアンス: セキュリティ脆弱性スキャンが検索で「TLS SSL弱MAC暗号スイート」を検出しました | Dell 日本
Pure-FTPd ufwによるFireWall設定とパッシブモードで使用するポート範囲の指定 – Symfoware

コメント