kukai88

垢 - やったことを残す -

FTP サーバー(ProFTPD)を構築する

環境


FTPS と SFTP の違いは?

今回使用する「ProFTPD」は FTPS を使用します。FTPS と良く似たプロトコルに SFTP があります。それらの違いを確認しておきます。

  • FTPS(File Transfer Protocol over SSL/TSL)
    • FTP で送受信するデータを SSL/TSL で暗号化する方式
  • SFTP(SSH File Transfer Protocol)
    • SSH を介してデータを送受信する方式
    • SSH を利用するため、別途 FTP サーバーを構築する必要がない


1. ProFTPD をインストールする

ProFTPD パッケージは Ubuntu 標準の universe レポジトリで提供されている為、もし universe レポジトリが追加されていない場合は追加します。その後、ProFTPD をインストールします。

$ sudo add-apt-repository universe
$ sudo apt -y install proftpd-basic


インストール完了後に ProFTPD の状態を確認しておきます。"active (running)" になっていれば OK です。

$ sudo systemctl status proftpd


2. ProFTPD の設定ファイルを調整する

/etc/proftpd ディレクトリ直下にある tls.conf ファイルに以下の設定を追記します。念のため、変更を加える前にバックアップを取っておきます。

$ sudo cp /etc/proftpd/tls.conf /etc/proftpd/tls.conf.bak
<IfModule mod_tls.c>
   TLSEngine                  on
   TLSLog                     /var/log/proftpd/tls.log
   TLSProtocol                SSLv23
   TLSRSACertificateFile      /etc/ssl/certs/proftpd.cts
   TLSRSACertificateKeyFile   /etc/ssl/private/proftpd.key
   FactsAdvertise             off
</IfModule>


3. SSL/TLS 用の証明書と秘密鍵を作成する

FTPS は SSL/TLS を利用して通信するため、証明書と秘密鍵を作成する必要があります。作成場所は 2. で追加した設定に合わせます。

   TLSRSACertificateFile      /etc/ssl/certs/proftpd.cts
   TLSRSACertificateKeyFile   /etc/ssl/private/proftpd.key


下のコマンドで証明書と秘密鍵を作成します。

$ sudo openssl req -x509 -newkey rsa:1024 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -nodes -days 365


作成した秘密鍵のアクセス権を変更します。所有者のみ読み書き可能な設定(600)にしておきます。

$ sudo chmod 600 /etc/ssl/private/proftpd.key


4. ProFTPD の設定ファイルを有効にする

/etc/proftpd ディレクトリ直下にある proftpd.conf ファイルを調整して、2. で調整した tls.conf ファイルを有効にします。変更を加える前にバックアップを取っておきます。

sudo cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak


proftpd.conf ファイルを以下のように変更します。

# Include /etc/proftpd/tls.conf
↓
Include /etc/proftpd/tls.conf
# PassivePorts        49152  65534
↓
PassivePorts        49152  65534


変更完了後に、変更内容を反映させるためにサービスを再起動しておきます。

$ sudo systemctl restart proftpd


5. ファイアウォールの設定をする

クライアントアプリから FTP サーバーへは 21 番ポートを使用するみたいなので、21 番ポートを開いておきます。

$ sudo ufw allow 21


6. クライアントアプリから FTP サーバーに接続する

cyberduck を起動して、[新規接続] を選択し、接続方法に「FTP-SSL」を指定します。あとは、「サーバ名」、「ユーザ名」、「パスワード」を入力して接続します。
そうすると、「証明書を信用しますか?」という旨のメッセージが表示されるので OK を選択することで FTP サーバーにアクセスできます。