GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS/UbuntuでSSL/TLS(FTPS)を使用するようにvsftpdを構成する方法

FTPの保護

Vsftpdは広く使用されているftpサーバーであり、ファイルを転送するためにサーバーに設定する場合は、セキュリティの問題に注意してください。 ftpプロトコルには、その設計に固有の弱いセキュリティがあります。すべてのデータをプレーンテキスト(暗号化されていない)で転送します。パブリック/安全でないネットワークでは、これはリスクが高すぎます。

この問題を解決するために、FTPSがあります。 SSL/TLSで暗号化することでFTP通信を保護します。そして、この投稿は、vsftpdを使用してSSL暗号化をセットアップする方法を示しています。

vsftpdをインストール

Vsftpdは、debian、ubuntu、centos、fedoraを含むすべての主要なディストリビューションのデフォルトのリポジトリで利用可能であり、面倒なことなくインストールできます。 /etcディレクトリにあるvsftpd.confという名前の構成ファイルは1つだけです。

# ubuntu/debian
$ sudo apt-get install vsftpd
# centos/fedora
# sudo yum install vsftpd

残りは、ftp通信にssl暗号化を使用するようにvsftpdを構成することです。たった2ステップのプロセスです。

SSL証明書を生成する

最初のステップは、vsftpdが暗号化に使用するssl証明書とキーファイルを作成することです。構成パラメータ「rsa_cert_file」は、証明書ファイルへのパスを保持する必要があります。マニュアルページにあるデフォルト値があります。

$ man vsftpd.conf | grep rsa_cert_file -A 5
       rsa_cert_file
              This option specifies the location of the RSA certificate to
              use for SSL encrypted connections.
              Default: /usr/share/ssl/certs/vsftpd.pem

UbuntuとCentOSでは異なります。好きな場所に保存できます。
opensslコマンドでssl証明書を作成します。証明書とキーを1つのファイルにまとめています。

# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

次の質問に答えると、数秒で証明書ファイルの準備が整います。出力は次のようになります

# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Generating a 1024 bit RSA private key
.............++++++
....++++++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:NY
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

SSL用にVsftpdを構成する

次のタスクは、暗号化にこのssl証明書を使用するようにvsftpdを構成することです。 vsftpd.confファイルは次の場所にあります

# Ubuntu/Debian
/etc/vsftpd.conf 

# CentOS/Fedora
/etc/vsftpd/vsftpd.conf

vsftpd.confファイルを開き、以下のように編集します

以下は、vsftpdに使用する証明書/キーファイルの場所を示します。

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

次のオプションを追加して、SSLをオンにします。 SSLを有効にし、データ転送とログインの暗号化を強制します。

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

次の行は、vsftpdに、該当する場合にTLSを使用するように指示します。これは、以前のSSLよりも安全です。

ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

必要なすべての構成ディレクティブが追加されました。ファイルを保存してvsftpdを再起動します

# service vsftpd restart
# or
# sudo /etc/init.d/vsftpd restart

vsftpdでSSLをテストする

セットアップが完了したので、テストします。

最初にプレーンなftpコマンドを使用して接続を試みてください。そうすれば、暗号化の要求に失敗するはずです。

$ ftp 192.168.1.5
Connected to 192.168.1.5.
220 (vsFTPd 2.2.2)
Name (192.168.1.5:enlightened): pal
530 Non-anonymous sessions must use encryption.
Login failed.
ftp>

次に、SSL暗号化が正常に機能していることを確認します。 FileZillaのようなGuiftpクライアントはFTPSを使用できますが、便宜上、curlというコマンドラインツールを使用します。これは、FTPSサーバーに接続してファイルを一覧表示する非常に簡単なコマンドです

$ curl --ftp-ssl --insecure --ftp-port 192.168.1.2:6003 --user pal:pal ftp://192.168.1.5
-rw-r--r--    1 0        0               0 Jan 03 06:10 abcd.txt
-rw-r--r--    1 0        0               0 Jan 03 06:10 cdefg.txt

これらのファイルは、ftpサーバーのユーザーpalのホームディレクトリにあります。サーバーホームにいくつかのファイルがあることを確認して、それらをリストして確認します。そうしないと、curlは空白を返します。
ここでは、使用したcurlオプションについて簡単に説明します。

ftp-ssl : Tells curl to use ftps

insecure : Tells curl not to use any ssl certificate to authenticate and just connect right away.

ftp-port : Tells curl that we are in ACTIVE mode. In ACTIVE mode the client has to tell the server the hostname and port number to connect back to. If you have configured passive mode ftp, then do not use this.

user : Specifies the username and password joined with a colon.

The last thing is the ftp url.

アクティブモードのftp接続でftp-portを指定しないと、「ホストへのルートがありません
」エラーが発生します。

「bind()が失敗した場合、ポートが不足しています!」エラーが発生したら、ポート番号を変更するだけです。

このようなURLを使用することもできます

$ curl ftps://192.168.1.5 ...

ただし、curlはポート990に接続しようとし、そのポートで機能するようにvsftpdを構成していない限り、機能しません。

curlがvsftpdに接続できない場合、またはファイルを適切に一覧表示できない場合は、冗長(-v)オプションを使用して、問題の詳細を確認してから修正してください。

追記

FTPSは、通信チャネルにSSL暗号化を追加することでFTPを保護します。安全な接続を確立するためのもう1つの推奨される方法は、SFTP(SSHファイル転送プロトコル)を使用することです。 sshサービスを提供する人気のあるOpenSSHパッケージは、追加のセットアップや構成を必要とせずに、SFTPも提供します。ただし、すべてのFTPクライアントとWeb開発ツールがSFTPをサポートしているわけではありません。


Cent OS
  1. Ubuntu20.04でSSL/TLSを使用してFTPサーバー(vsftpd)をインストールおよび構成する方法

  2. CentOS6.2でTLSセッションを受け入れるようにPureFTPdを構成する方法

  3. CentOS 7 / Ubuntu 18.04 / 16.04 /Debian9でDHCPサーバーを構成する方法

  1. Centos8でSaltを使用する方法

  2. CentOS7でOpenSSHを構成する方法

  3. SSL / TLS暗号化接続でVSFTPDを構成する方法は?

  1. Ubuntu 18.04 /CentOS7でFreeIPAクライアントを構成する方法

  2. CentOS 7 / Ubuntu 16.04 / Debian 9 /Fedora27/26でAutofsを設定する方法

  3. SSL/TLSでvsFTPdを保護する方法