💬

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を次のように変更します。

modules.conf
-#LoadModule mod_tls.c
+LoadModule mod_tls.c

proftpd.confを次のように変更します。

proftpd.conf
-# DefaultRoot~
+DefaultRoot ~

-# PassivePorts 49152 65534
+PassivePorts 49152 65534

-#Include /etc/proftpd/tls.conf
+Include /etc/proftpd/tls.conf

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以前の利用は禁止されている。
TLSRSACertificateFile
TLSRSACertificateKeyFile
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