CentOS7で安全なファイル転送のためにSSL / TLSを使用してFTPサーバーを保護する方法


元の設計では、FTP(ファイル転送プロトコル)は安全ではありません。つまり、2台のマシン間で送信されるデータとユーザーの資格情報は暗号化されません。これは、サーバーのセキュリティだけでなく、データにも大きな脅威をもたらします。

このチュートリアルでは、CentOS/RHEL7およびFedoraのFTPサーバーでデータ暗号化サービスを手動で有効にする方法について説明します。 SSL/TLS証明書を使用してVSFTPD(Very Secure FTP Daemon)サービスを保護するさまざまな手順を実行します。

  1. You must have installed and configured a FTP server in CentOS 7

開始する前に、このチュートリアルのすべてのコマンドがrootとして実行されることに注意してください。そうでない場合は、rootアカウントを使用してサーバーを制御していない場合は、sudoコマンドを使用してroot権限を取得してください。

手順1.SSL / TLS証明書と秘密鍵の生成

1. /etc/ssl/の下にサブディレクトリを作成することから始める必要があります。ここにSSL/TLS証明書とキーファイルを保存します。

# mkdir /etc/ssl/private

2.次に、以下のコマンドを実行して、vsftpdの証明書とキーを単一のファイルに作成します。使用される各フラグの説明は次のとおりです。

  1. req – is a command for X.509 Certificate Signing Request (CSR) management.
  2. x509 – means X.509 certificate data management.
  3. days – defines number of days certificate is valid for.
  4. newkey – specifies certificate key processor.
  5. rsa:2048 – RSA key processor, will generate a 2048 bit private key.
  6. keyout – sets the key storage file.
  7. out – sets the certificate storage file, note that both certificate and key are stored in the same file: /etc/ssl/private/vsftpd.pem.
# openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048

上記のコマンドは、以下の質問に答えるように求めます。シナリオに適用される値を使用することを忘れないでください。

Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Lower Parel
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:tecmint
Email Address []:[email protected]

ステップ2.SSL / TLSを使用するようにVSFTPDを構成する

3. VSFTPD構成を実行する前に、ポート990と40000-50000を開いて、TLS接続とパッシブポートのポート範囲をそれぞれVSFTPD構成ファイルで定義できるようにします。

# firewall-cmd --zone=public --permanent --add-port=990/tcp
# firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
# firewall-cmd --reload

4.次に、VSFTPD構成ファイルを開き、SSLの詳細を指定します。

# vi /etc/vsftpd/vsftpd.conf

オプションssl_enableを探し、その値を YES に設定して、SSLの使用をアクティブにします。さらに、TSLはSSLよりも安全であるため、ssl_tlsv1_2オプションを使用して、代わりにTLSを使用するようにVSFTPDを制限します。

ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO

5.次に、以下の行を追加して、SSL証明書とキーファイルの場所を定義します。

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

6.次に、匿名ユーザーがSSLを使用できないようにし、すべての非匿名ログインにデータ転送に安全なSSL接続を使用させ、ログイン中にパスワードを送信するように強制する必要があります。

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

7.さらに、以下のオプションを追加して、FTPサーバーのセキュリティを強化できます。オプションrequire_ssl_reuseが YES に設定されている場合、SSLセッションの再利用を示すためにすべてのSSLデータ接続が必要です。制御チャネルと同じマスターシークレットを知っていることを証明します。

したがって、オフにする必要があります。

require_ssl_reuse=NO

ここでも、ssl_ciphersオプションを使用して、VSFTPDが暗号化されたSSL接続に許可するSSL暗号を選択する必要があります。これにより、次の脆弱性を発見した可能性のある特定の暗号を強制しようとする攻撃者の努力が大幅に制限される可能性があります。

ssl_ciphers=HIGH

8.次に、パッシブポートのポート範囲(最小ポートと最大ポート)を設定します。

pasv_min_port=40000
pasv_max_port=50000

9.オプションで、SSLデバッグを許可します。これは、openSSL接続診断がdebug_sslオプションを使用してVSFTPDログファイルに記録されることを意味します。

debug_ssl=YES

すべての変更を保存して、ファイルを閉じます。次に、VSFTPDサービスを再起動しましょう。

# systemctl restart vsftpd

ステップ3:SSL / TLS接続を使用したFTPサーバーのテスト

10.上記のすべての構成を行った後、次のようにコマンドラインからFTPを使用して、VSFTPDがSSL/TLS接続を使用しているかどうかをテストします。

# ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>

上のスクリーンショットから、VSFTPDは暗号化サービスをサポートするクライアントからのログインのみをユーザーに許可できることを通知するエラーがあることがわかります。

コマンドラインは暗号化サービスを提供しないため、エラーが発生します。したがって、サーバーに安全に接続するには、FileZillaなどのSSL/TLS接続をサポートするFTPクライアントが必要です。

ステップ4:FTPサーバーに安全に接続するためにFileZillaをインストールする

11. FileZillaは、デフォルトでSSL/TLS接続をサポートする、最新の人気のある重要なクロスプラットフォームFTPクライアントです。

LinuxにFileZillaをインストールするには、以下のコマンドを実行します。

--------- On CentOS/RHEL/Fedora --------- 
# yum install epel-release filezilla

--------- On Debian/Ubuntu ---------
$ sudo apt-get install  filezilla   

12.インストールが完了したら(またはすでにインストールしている場合)、それを開いて[ファイル] u003d> [サイトマネージャー]に移動するか、( Ctrl + S を押して)以下のサイトマネージャーインターフェイスを取得します。

[新しいサイト]ボタンをクリックして、新しいサイト/ホスト接続の詳細を追加します。

13.次に、以下のスクリーンショットのように、ホスト/サイト名を設定し、IPアドレスを追加し、使用するプロトコル、暗号化、およびログオンの種類を定義します(シナリオに適用される値を使用します)。

Host:  192.168.56.10
Protocol:  FTP – File Transfer Protocol
Encryption:  Require explicit FTP over   #recommended 
Logon Type: Ask for password	        #recommended 
User: username

14.次に、[接続]をクリックしてパスワードをもう一度入力し、SSL/TLS接続に使用されている証明書を確認し、もう一度 OK をクリックしてFTPサーバーに接続します。

この段階では、TLS接続を介してFTPサーバーに正常にログインしているはずです。以下のインターフェイスの詳細については、接続ステータスのセクションを確認してください。

15.最後になりましたが、ファイルをローカルマシンからファイルフォルダー内のFTPサーバーに転送してみてください。ファイル転送に関するレポートを表示するには、FileZillaインターフェイスの下端を確認してください。

それで全部です!このチュートリアルで示したようにSSL/TLS接続を使用するように構成しない限り、FTPはデフォルトでは安全ではないことに常に注意してください。以下のフィードバックフォームを介して、このチュートリアル/トピックについての考えを共有してください。