Ubuntu22.04 proFTPD FTPS(FTP over TLS) 手順メモ
実験用FTPSのFTPサーバをproFTPDで作ろう
Pythonのftplibを使ったFTPクライアントを作る機会があり、そのテスト環境としてproFTPDでFTPサーバを作ろうと思ったのですが、今どきならばFTPS(over TLS)でなければダメだろうということで、Ubuntu22.04にFTPSのproFTPSサーバの設置を試しました。
FTPSでのproFTPDの立ち上げ方の情報はあちこちで見られます。それらを参考にして、自分なりに改めてtls.confの設定などをまとめたのでここに紹介します。
Ubuntu22.04にproFTPDインストール
proFTPDはaptでインストールできます。
$ sudo apt -y install proftpd-basic
サーバ証明書
TLS認証のために、秘密鍵を含むサーバ証明書をpem形式で作ります。
ネット検索でいくつかの方法がヒットしますが、私の場合は次のコマンドラインでpem形式の証明書を作成しました。
$ cd /etc/ssl/private
$ sudo su
$ openssl req -x509 -nodes -newkey rsa:2048 -keyout proftpd.pem -out proftpd.pem -days 365
$ chmod 600 proftpd.pem
あるいはこれでも同じです。
sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.pem -out /etc/ssl/private/proftpd.pem -days 365
chmod 600 /etc/ssl/private/proftpd.pem
後でtls.confにこのパスを指定します。
proFTPDをインストールすると、各種.confファイルが/etc/proftpd/以下に展開されます。
TLS関係の設定変更がいくつか必要です。
modules.confを次のように変更します。
-#LoadModule mod_tls.c
+LoadModule mod_tls.c
proftpd.confを次のように変更します。
-# DefaultRoot~
+DefaultRoot ~
-# PassivePorts 49152 65534
+PassivePorts 49152 65534
-#Include /etc/proftpd/tls.conf
+Include /etc/proftpd/tls.conf
tls.confは、以下の左の設定項目について、右の設定に変更します。
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1.2
TLSRSACertificateFile /etc/ssl/private/proftpd.pem
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.pem
TLSOptions NoSessionReuseRequired
TLSVerifyClient off
TLSRequired on
上の設定の意味を以下にまとめます。
tls.conf設定項目 |
設定 |
|---|---|
TLSEngine |
on: SSL/TLSを有効化する。 |
TLSLog |
ログファイルのパス |
TLSProtocol |
利用可能なSSL/TLSバージョンをリストで指定する。SSLv23 (SSL2 SSL3) TLSv1 TLSv1.1 TLSv1.2 TLSv1.3※2025年時点、TLSv1.1以前の利用は禁止されている。 |
TLSRSACertificateFileTLSRSACertificateKeyFile
|
PEM形式サーバ証明書のパスを指定する。 PEM形式の証明書には、秘密鍵が含まれる。 秘密鍵を分離する場合は TLSRSACertificateKeyFileに指定する。※同じpemファイルを両方に指定しても動作する。 |
TLSOptions |
NoSessionReuseRequired:これを指定しない場合、データ接続でTLSセッション再利用が必須となる。 TLSセッションの再利用とは、毎回の通信でフルのTLS手続きをやらなくても、セッションIDで初回以降は短縮TLSで済ませられるという方式である。 セッションの再利用に対応していないクライアントに対応するには、このオプションを指定しなければならない。 NoCertRequest:クライアント認証が不要であるという設定のようだが、これを指定するとエラーになる。ドキュメントにも見当たらない。 TLSVerifyClientがあるので不要なのかもしれない。EnableDiags:openSSLのコールバックでTLSの詳細なログを記録する。 AllowClientRenegotiations:TLSセッションの再ネゴシエーションを許可する。通常は、DoS攻撃などの対応のために再ネゴシエーションは禁止している。この設定は一般には推奨されない。 |
TLSVerifyClient |
クライアント認証の要・不要設定on: クライアント認証要off: クライアント認証不要デフォルトOFF(不要) |
TLSRequired |
on: SSL/TLSが必須となり平文での通信ができない設定になる。off: SSL/TLSでも平文でも許可される。 |
サービスの操作
サービスはsystemctlコマンドで操作します。以下の通り「開始」・「再開」・「ステータス表示」・「停止」です。
$ sudo systemctl start proftpd
$ sudo systemctl restart proftpd
$ sudo systemctl status proftpd
$ sudo systemctl stop proftpd
ユーザー
FTPクライアントでは、proftpdを起動しているユーザでログイン設定すれば、そのユーザほホームディレクトリがFTPのルートディレクトリになります。
FTPのユーザは、useraddでユーザを追加できます。
$ sudo useradd -m ftpuser
$ sudo passwd ftpuser
FTPクライアント側は、このユーザftpuserとパスワードを指定して接続します。
/home/ftpuserがFTPの転送先のルートディレクトリとなります。
参考
How To Install ProFTPD on Ubuntu 24.04 LTS
ProFTPD module mod_tls
FTP : ProFTPD Over SSL/TLS
Discussion