純粋なFTPd は、セキュリティを念頭に置いて設計された無料のオープンソースFTPサーバーです。このチュートリアルでは、Pure-FTPdを使用してDebian 10でFTPサーバーをセットアップする方法と、TLS暗号化を適用する方法を学習します。
純粋なFTPd機能:
- SSL / TLS暗号化をサポートしているため、パスワードとコマンドを保護できます。
- Linux、BSD、Solaris、Darwin、HPUX、AIX、さらにはiPhoneなど、ほとんどのUnixライクなシステムで実行できます。
- 21の言語で利用できます。
- アクティブなセッションを監視できます。
- 仮想クォータシステムをサポートします。
- その他
機能の完全なリストについては、Pure-FTPdの公式Webサイトにアクセスしてください。
ステップ1:Debian10サーバーにPure-FTPdをインストールする
これはソフトウェアリポジトリにあるため、次のコマンドを発行してFTPサーバーをインストールします。
sudo apt install pure-ftpd
インストールすると、次のコマンドで確認できるように、Pure-FTPdが自動的に開始されます。
systemctl status pure-ftpd
出力:
● pure-ftpd.service Loaded: loaded (/etc/init.d/pure-ftpd; generated) Active: active (running) since Wed 2021-06-16 13:15:52 UTC; 23s ago Docs: man:systemd-sysv-generator(8) Tasks: 1 (limit: 558) Memory: 972.0K CGroup: /system.slice/pure-ftpd.service └─9223 pure-ftpd (SERVER)>
実行されていない場合は、次のようにスターを付けます:
sudo systemctl start pure-ftpd
そして、制御ポートであるTCPポート21でリッスンしています。 、
で見ることができるようにsudo ss -lnpt | grep pure-ftpd
もう1つのポートはデータポートです (TCPポート20)。ユーザーがFTP経由でファイルを転送するときに使用されます。
匿名アクセスはデフォルトで無効になっています。今後は、システムアカウントを使用してログインできますが、プレーンテキストのFTPは安全ではなく、強くお勧めしません。安全なFTPサーバーを使用するには、TLSとの通信を暗号化する必要があります。
ステップ2:TLS暗号化を適用する
プレーンテキストとTLS暗号化の両方を有効にするには、次のコマンドを実行して、/etc/pure-ftpd/conf/TLS
を作成します。 ファイルに1番を入れます。
echo 1 | sudo tee /etc/pure-ftpd/conf/TLS
ただし、プレーンテキストを無効にしてTLS暗号化のみを使用することをお勧めします。そのため、代わりに番号2をファイルに追加してください。
echo 2 | sudo tee /etc/pure-ftpd/conf/TLS
TLSを適用したので、有効なTLS証明書を取得する必要があります。以下のスクリーンショットのような警告メッセージがユーザーに表示されるため、自己署名証明書はお勧めしません。
ステップ3:Let’sEncryptから信頼できるTLS証明書を取得する
次のコマンドを実行して、デフォルトのDebian 10リポジトリからLet’s Encryptクライアント(certbot)をインストールします。
sudo apt install certbot
standalone
の使用をお勧めします またはwebroot
Pure-FTPdのTLS証明書を取得するためのプラグイン。
スタンドアロンプラグイン
Debian 10サーバーで実行されているWebサーバーがない場合は、スタンドアロンプラグインを使用できます。次のコマンドを実行します。サブドメインにDNSAレコードを設定することを忘れないでください。
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d ftp.example.com
場所:
-
certonly
:証明書を取得しますが、インストールしないでください。 --standalone
:スタンドアロンプラグインを使用して証明書を取得します-
--preferred-challenges http
:http-01チャレンジを実行して、ポート80を使用するドメインを検証します。 -
--agree-tos
:Let'sEncryptの利用規約に同意します。 --email
:メールアドレスはアカウントの登録と復旧に使用されます。-
-d
:ドメイン名を指定してください。
次のスクリーンショットからわかるように、私は正常に証明書を取得しました。
webrootプラグインの使用
Debian 10サーバーにWebサーバーがある場合、webrootプラグインを使用して証明書を取得することをお勧めします。webrootプラグインはほとんどすべてのWebサーバーで機能し、Webサーバーに証明書をインストールする必要がないためです。
まず、ftp.example.com
の仮想ホストを作成する必要があります 。
Apache
Apacheを使用している場合は、
sudo nano /etc/apache2/sites-available/ftp.example.com.conf
そして、次の行をファイルに貼り付けます。
<VirtualHost *:80> ServerName ftp.example.com DocumentRoot /var/www/Pure-FTPd </VirtualHost>
ファイルを保存して閉じます。次に、Webルートディレクトリを作成します。
sudo mkdir /var/www/Pure-FTPd
www-data(Apacheユーザー)をWebルートの所有者として設定します。
sudo chown www-data:www-data /var/www/Pure-FTPd -R
この仮想ホストを有効にします。
sudo a2ensite ftp.example.com
変更を有効にするためにApacheをリロードします。
sudo systemctl reload apache2
仮想ホストを作成して有効にしたら、次のコマンドを実行して、webrootプラグインを使用してLet’sEncrypt証明書を取得します。
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Nginx
Nginxを使用している場合は、
sudo nano /etc/nginx/conf.d/ftp.example.com.conf
次の行をファイルに貼り付けます。
server { listen 80; listen [::]:80; server_name ftp.example.com; root /var/www/Pure-FTPd/; location ~ /.well-known/acme-challenge { allow all; } }
ファイルを保存して閉じます。次に、Webルートディレクトリを作成します。
sudo mkdir -p /var/www/Pure-FTPd
www-data(Nginxユーザー)をWebルートの所有者として設定します。
sudo chown www-data:www-data /var/www/Pure-FTPd -R
変更を有効にするためにNginxをリロードします。
sudo systemctl reload nginx
仮想ホストを作成して有効にしたら、次のコマンドを実行して、webrootプラグインを使用してLet’sEncrypt証明書を取得します。
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
ステップ4:証明書をインストールする
Pure-FTPdでは、証明書と秘密鍵をpure-ftpd.pem
という名前の1つのファイルに結合する必要があります。 /etc/ssl/private/
の下に保存されます ディレクトリ。
/etc/letsencrypt/live/ftp.example.com/
に変更します ディレクトリ。
sudo su - cd /etc/letsencrypt/live/ftp.example.com/
cat
を使用できます 以下のように2つのファイルを1つに結合するコマンド。
cat fullchain.pem privkey.pem | sudo tee /etc/ssl/private/pure-ftpd.pem
rootユーザーのみがファイルを読み取ることができることを確認してください。
sudo chmod 600 /etc/ssl/private/pure-ftpd.pem
次のコマンドでDiffie-Hellmanパラメーターを生成する必要があります:
sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 4096
サーバーに単一のCPUコアがある場合、これには長い時間がかかります(約10分)。
それが完了したら、Pure-FTPdを再起動します。
sudo systemctl restart pure-ftpd
ステータスをチェックして、実行されているかどうかを確認します。
systemctl status pure-ftpd
これで、TLSを介してFTPサーバーに接続できます。
ステップ5:ファイアウォールでFTPポートを開く
UFWファイアウォールを使用している場合は、次のコマンドを実行してTCPポート20および21を開きます。
sudo ufw allow 20,21/tcp
ステップ6:FTPサーバーに接続する
ノーチラスを使用する場合 プレーンテキストftp://
を介してFTPサーバーに接続するファイルマネージャー プロトコル
接続は拒否されます。
ftp://
の代わりに 、ftps://
を使用する必要があります 。
デフォルトでは、FTPユーザーは/
に移動します サーバー上のルートディレクトリ。
Filezillaに注意してください デフォルトでは、証明書(自己署名またはCA署名)を信頼しません。ユーザーは自分で証明書を信頼することを選択する必要があります。
FileZilla不明な証明書の警告
また、FTP明示的TLSプロトコル(ftpes://ftp.example.com
)を使用する必要があります )Filezillaで。
TLS証明書の自動更新
Cronジョブを作成して、TLS証明書を自動的に更新できます。 rootユーザーのcrontabファイルを開くだけです。
sudo crontab -e
ファイルの最後に次の行を追加します。
@daily certbot renew --quiet && cd /etc/letsencrypt/live/ftp.example.com/ && cat fullchain.pem privkey.pem | tee /etc/ssl/private/pure-ftpd.pem && systemctl reload pure-ftpd
pure-ftpd
をリロードする必要があります 新しい証明書と秘密鍵を取得するようにします。