もっと詳しく

FTPまたはファイル転送プロトコルは、クライアントとサーバー間でファイルを転送するための非常に古いよく知られたプロトコルです。 また、TLSなしで使用された場合にのみ、安全でないプロトコルです。 このチュートリアルでは、FTPを安全に使用できるようにするTLS用にvsftpdを構成します。 最近では、FTPはSFTPやSCPなどのより安全なプロトコルに置き換えられることがよくあります。

ただし、サーバーでFTPを使用する必要がある場合は、vsftpd(Very Secure FTP Daemon)が最適です。

このチュートリアルでは、Ubuntu20.04ベースのサーバーでvsftpdを使用してFTPサーバーをインストールおよび構成する方法を学習します。 また、SSL/TLSプロトコルを使用して接続を保護する方法についても学習します。

前提条件

  • sudo権限を持つroot以外のユーザーがいるUbuntu20.04サーバー。

ステップ1-vsftpdをインストールします

最初のステップは、vsftpdをインストールすることです。

$ sudo apt update
$ sudo apt install vsftpd

次に、元の構成ファイルをバックアップして、新しい構成から開始できるようにする必要があります。

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

ステップ2-ファイアウォールを構成する

このステップでは、FTPポートへのアクセスを許可するようにUFWファイアウォールを構成します。

まず、ファイアウォールの状態を確認しましょう。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

可能な限り、これまでに許可されているのはSSHポートのみです。 TLSを使用する場合はポート20(FTPコマンドポート)、21(FTPデータポート)、990を開き、将来必要になる可能性のあるパッシブポートの範囲にはポート35000〜40000を開きます。

$ sudo ufw allow 20:21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 35000:40000/tcp
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
20:21/tcp                  ALLOW       Anywhere
35000:40000/tcp            ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
20:21/tcp (v6)             ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
35000:40000/tcp (v6)       ALLOW       Anywhere (v6)

ステップ3-vsftpdを構成する

ここで、vsftpdが機能するために、いくつかの重要な設定について説明します。

構成ファイルを開くことから始めます。

$ sudo nano /etc/vsftpd.conf

1.FTPアクセス

このチュートリアルでは、ローカルユーザーにのみFTPアクセスを許可し、匿名アクセスを無効にします。 これを行うには、次の行が存在し、次のようになっていることを確認します。

anonymous_enable=NO
local_enable=YES

2.ファイルアップロードの有効化

ここでのFTPの唯一の最も重要な目的は、サーバーに書き込めることです。 次の行のコメントを解除して、ファイルのアップロードを有効にします。 # その前に。

write_enable=YES

3. ChrootJail

FTPは、ユーザーが特定のディレクトリに制限されている場合に最適に機能します。 vsftpdは、chrootjailを使用してこれを実現します。 ローカルユーザーに対してchrootが有効になっている場合、デフォルトではホームディレクトリに制限されます。 これを実現するには、次の行のコメントを解除します。

chroot_local_user=YES

セキュリティの脆弱性を防ぐために、有効にした場合のchrootは、ユーザーが書き込み可能に制限されているディレクトリである限り機能しません。

この制限を回避するために、chrootが有効になっているときにファイルのアップロードを許可する2つの方法があります。

  1. 方法1 -この方法は、FTPアップロードに別のディレクトリを使用することで機能します。 このチュートリアルでは、 ftp chrootとして機能するユーザーのホーム内のディレクトリと2番目の書き込み可能なディレクトリ upload ファイルをアップロードするため。 これを実現するには、ファイルの最後に次の行を追加します。

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. 方法2 -2番目の方法は、ホームディレクトリ全体への書き込み可能なアクセスを許可することです。 これを実現するには、次の行を追加します。

    allow_writeable_chroot=YES
    

4.パッシブFTP

vsftpdは、パッシブFTP接続に任意のポートを使用できます。 vsftpdが使用できる最小および最大ポート番号の範囲を指定できます。 これらは、以前にUFWファイアウォールで構成したポートです。

次の行を追加して、パッシブFTP接続を許可します。

pasv_min_port=35000
pasv_max_port=40000

5.ユーザーの制限

特定のユーザーのみがFTPサーバーにログインできるようにするには、下部に次の行を追加します。

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

このオプションを有効にすると、FTPの使用を許可するユーザーを指定し、ユーザー名をに追加する必要があります。 /etc/vsftpd.userlist ファイル。

vsftpdを再起動して、構成を有効にします。

$ sudo systemctl restart vsftpd

ステップ4-ユーザーディレクトリの設定

このチュートリアルでは、FTPトランザクション用の新しいユーザーアカウントを作成します。 この目的のユーザーアカウントを既にお持ちの場合は、手順1をスキップできます。また、 allow_writeable_chroot=YES 前の構成ファイルでは、ステップ3をスキップできます。

ステップ1-新しいユーザーを追加します。

$ sudo adduser testuser

強力なパスワードを設定し、他のすべてのプロンプトをスキップします。

ステップ2-許可されたFTPユーザーリストにユーザーを追加します。

$ echo "testuser" | sudo tee -a /etc/vsftpd.userlist

ステップ3-FTPとファイルディレクトリを作成する

この手順は、FTPルートとして別のディレクトリと、chrootjailの制限を回避するためにファイルをアップロードするための別のディレクトリが必要な場合です。

FTPフォルダを作成します。

$ sudo mkdir /home/testuser/ftp

その所有権を設定します。広告

$ sudo chown nobody:nogroup /home/testuser/ftp

書き込み権限を削除します。

$ sudo chmod a-w /home/testuser/ftp

続行する前に、権限を確認してください。

$ sudo ls -al /home/testuser/ftp
total 8
dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..

次に、ファイルの実際の書き込み可能なディレクトリを作成しましょう。

$ sudo mkdir /home/testuser/ftp/upload
$ sudo chown testuser:testuser /home/testuser/ftp/upload

権限をテストします。

$ sudo ls -al /home/testuser/ftp
total 12
dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
drwxr-xr-x 2 testuser testuser 4096 Jun  7 13:10 upload

最後に、を追加しましょう test.txt テストに使用するファイル。

$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt

ステップ5-FTPアクセスをテストする

この時点で、FTPサーバーは完全に機能しています。 先に進む前に、少しテストを行うことができます。

匿名ユーザーとしてログインしてみましょう。

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>

接続を閉じます。

ftp> bye

意図したとおりに機能します。つまり、匿名ユーザーは許可されません。

他のsudoユーザーと同じように接続してみましょう。 同様に接続するべきではありません。

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>

接続を閉じます。

ftp> bye

最後に接続してみましょう testuser FTP用に作成しました。

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): testuser
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

に切り替えましょう upload ディレクトリを使用し、 get テストファイルをローカルマシンに転送するコマンド。

ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>

次に、を使用して新しい名前でファイルをアップロードしましょう put 書き込み権限をテストするコマンド。

ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)

接続を閉じます。

ftp> bye

ステップ6-SSL/TLSを使用した送信の保護

FTP送信を暗号化するには、SSL証明書を取得し、それを使用するようにvsftpdを構成する必要があります。

FTPサーバーを指すドメインまたはサブドメインがすでにある場合は、無料のLet’sEncryptSSL証明書を作成して使用できます。

チュートリアルでは、自己署名SSL証明書を使用します。 作成するには、 openssl 指図。

次のコマンドは、2048ビットの秘密鍵と1年間有効な証明書を作成します。 証明書とキーの両方が同じファイルに保存されます。

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

次のプロンプトをスキップするか、好みに応じて値を入力することができます。

証明書が作成されたので、vsftpd構成ファイルを再度開きます。

$ sudo nano /etc/vsftpd.conf

次の行を見つけて、次のようにそれらの前にハッシュを付けてコメントアウトします。

# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

ここで、次の行を追加します。

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

また、の値を変更します ssl_enableYES

ssl_enable=YES

SSLセキュリティを向上させるために、さらにいくつかの設定を追加しましょう。

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

これらの設定のほとんどは自明です。 これらは匿名ユーザーのSSLを無効にし、データ転送とログインの両方にSSLを要求します。 また、安全でないSSLプロトコルを無効にし、TLSv1.0に固執します。 そして最後に、SSLの再利用を無効にし、高暗号化暗号スイートを必要としています。

設定を有効にするためにサーバーを再起動します。

$ sudo systemctl restart vsftpd

これで、コマンドラインからFTPを使用できなくなります。 TLSをサポートするクライアントを使用して接続する必要があります。

ステップ7-FileZillaを使用したTLSのテスト

このチュートリアルでは、Filezillaを使用してTLS機能をテストします。

Filezillaを開いたら、単語のすぐ上にあるサイトマネージャーアイコンをクリックします ホスト 一番上の行。

新しいウィンドウが開きます。 クリック 新しいサイト 右下のボタン。

新しいサイトを作成する-FileZilla

名前の付いた新しいアイコンが表示されます 新しいサイト。 を使用して名前を変更できます 名前を変更 ボタン。

[ホスト]フィールドにサーバーのIPアドレスを入力します。 FTPポートは21であるため、FTPのデフォルトポートであるため、 ポート フィールドが空です。[暗号化]オプションで、[TLSを介した明示的なFTPが必要 ドロップダウンメニューから。

FTPのユーザー名とパスワードを上記で作成したものと入力します。 クリック 接続 ボタンをクリックして続行します。

接続に成功すると、次のようなサーバー証明書が表示されます。

FTPSSL証明書-FileZilla

オプションを確認できます 今後のセッションでは、この証明書を常に信頼してください。 ログイン時に毎回質問されないようにします。をクリックします。 Ok 続行します。

成功した接続-FileZilla

これで、通常のFTP操作を実行できます。

ステップ8-シェルアクセスを無効にする

このステップは完全にオプションです。 デフォルトでは、FTPユーザーを作成するときに、明示的に指定されていない場合、ユーザーはサーバーへのSSHアクセスを持ちます。

セキュリティを向上させるために、FTPユーザーへのシェルアクセスを無効にする必要があります。 これを無効にするには、ユーザーアカウントがFTPアクセスのみに制限されていることを示すメッセージを出力する新しいシェルを作成する必要があります。

を作成します /bin/ftponly シェルを作成して実行可能にします。

$ echo -e '#!/bin/shnecho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
$ sudo chmod a+x /bin/ftponly

新しいシェルを有効なシェルのリストに追加します /etc/shells ファイル。

$ echo "/bin/ftponly" | sudo tee -a /etc/shells

ユーザーシェルをに変更します /bin/ftponly

$ sudo usermod newftpuser -s /bin/ftponly

同じコマンドを使用して、FTPアクセスを許可するすべてのユーザーのシェルを変更できます。

結論

これで、Ubuntu20.04ベースのサーバーにFTPサーバーをインストールするようにvsftpdをインストールして構成したチュートリアルは終了です。 また、SSL/TLSを使用して機能するようにFTP接続を構成しました。

ご不明な点がございましたら、下のコメント欄でお尋ねください。

The post Ubuntu20.04でSSL/TLSを使用してFTPサーバー(vsftpd)をインストールおよび構成する方法 appeared first on Gamingsym Japan.