序章


警告:FTPは安全ではありません! FTPの代わりにSFTPを使用するを検討してください。

FTP(ファイル転送プロトコル)は、ローカルサーバーとリモートサーバー間でファイルを転送する方法です。 非常に人気があり、どこにでもあるものの、このファイル転送方法の使用は、その設計に固有のセキュリティが欠如しているため、支持されなくなりました。

上記のように、非常に有能な代替手段はSFTPです。 このプロトコルは、SSHを介したファイル共有を実装します。 FTPを必要使用する場合は、少なくともSSL/TLS証明書を使用して接続を保護する必要があります。

このガイドでは、CentOS6.4VPSでTLS/SSL証明書を使用するようにvsftpdを構成します。

vsftpdをインストールします


vsftpdサーバーは、CentOSのデフォルトのリポジトリで利用できます。 次のように入力してインストールできます。

sudo yum install vsftpd

これで、vsftpdサーバーがVPSにインストールされました。 次のセクションでいくつかの接続オプションを構成できます。

vsftpdの基本設定を構成する


CentOS上のvsftpdのメイン設定ファイルは /etc/vsftpd/ ディレクトリ。 いわゆる vsftpd.conf.

このファイルをroot権限でエディターで開きます。

sudo nano /etc/vsftpd/vsftpd.conf

セキュリティを強化し、接続オプションを確立するには、このファイルのいくつかの基本的なパラメータを調整する必要があります。

最初に行うことは、匿名ユーザーを無効にすることです。 このオプションは、(パブリックソフトウェアリポジトリのような)大規模な公開ファイルダンプには意味があるかもしれませんが、個人用FTPサーバーの場合、これはほとんど良い考えではありません。

anonymous_enable=NO

匿名ユーザーを無効にしているため、システムがユーザーを認証する方法を提供する必要があります。 ローカルユーザーを許可します。つまり、vsftpdはLinuxシステムユーザーと認証を使用して、誰がサインインできるかを決定します。

これを有効にするには、次のオプションが設定されていることを確認してください。

local_enable=YES

また、書き込みアクセスを許可して、資料をアップロードしたり、コンテンツを変更したりできるようにします。

write_enable=YES

また、ユーザーをそれぞれのホームディレクトリに限定したいと考えています。 そのためのオプションは次のとおりです。

chroot_local_user=YES

これは、基本的な(非SSL)FTP構成には十分です。 SSL機能は後で追加します。

ファイルを保存して閉じます。

FTPユーザーを作成する


ローカルユーザーを使用し、chroot環境でホームディレクトリに限定することを選択しました。

次のコマンドで新しいユーザーを作成します。

sudo adduser ftpuser

次のように入力して、新しいユーザーにパスワードを割り当てます。

sudo passwd ftpuser

CentOS 6.4のvsftpdのバージョンは古いため、セットアップのこの部分はいくつかの新しいバージョンよりも簡単です。

vsftpdでSSLを構成する


vsftpdをSSLで動作させるための最初のステップは、SSL証明書を作成することです。 実際には、SSLの後継でより安全なプロトコルであるTLSを使用します。

SSLディレクトリ内にサブディレクトリを作成してファイルを保存します。

sudo mkdir /etc/ssl/private

証明書とキーを1つのファイルに作成するには、次のコマンドを使用できます。

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

それが尋ねる質問に記入してください。 最も重要なのはサーバーの「共通名」です。これは、接続に使用するIPアドレスまたはドメイン名になります。

SSLの詳細をvsftpd構成ファイルに追加します


次に、新しいキーを指すように構成を変更し、安全な接続を構成する必要があります。

vsftpd構成ファイルをrootとして再度開きます。

sudo nano /etc/vsftpd/vsftpd.conf

ファイルの一番下までスクロールします。 ここにSSL/TLS情報を追加します。

証明書とキーファイルの場所を指定する必要があります。 実際には、両方の情報を1つのファイルにまとめたので、両方のオプションを同じファイルにポイントします。

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

次に、これらのファイルの使用を有効にし、匿名ユーザーを無効にする必要があります。 また、データ転送とログインルーチンの両方にSSLの使用を強制する必要があります。 これにより、セキュリティが必須になります。

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

次に、SSLよりも安全なTLSへの接続の種類を制限します。 これを行うには、TLSを明示的に許可し、SSLの使用を拒否します。

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

終了する前に、さらにいくつかの構成オプションを追加します。

require_ssl_reuse=NO
ssl_ciphers=HIGH

ファイルを保存して閉じます。

変更を有効にするには、vsftpdを再起動する必要があります。

sudo /etc/init.d/vsftpd restart

また、再起動するたびに自動的に起動するように構成します。

sudo chkconfig vsftpd on

FileZillaでvsftpdサーバーに接続する方法


SSLおよびTLS接続は、ほとんどの最新のFTPクライアントで可能です。 クロスプラットフォームの互換性があるため、セキュリティで保護された接続を使用するようにFileZillaを設定する方法を説明します。 コンピュータに適切なインストール手順を使用して、クライアントがすでにインストールされていることを前提としています。

FileZillaプログラムを開きます。 インターフェイスで、アイコンをクリックして「サイトマネージャー」を開くことができます。 この写真の左端にあるアイコンのように見えるはずです。

ポップアップ表示される新しいインターフェイスで、左下隅にある[新しいサイト]ボタンをクリックする必要があります。 後で簡単に識別できるように、サーバー接続に名前を付けます

「ホスト」フィールドにIPアドレスを入力し、「プロトコル」ドロップダウンメニューから「FTP-ファイル転送プロトコル」を選択します。 [暗号化]ドロップダウンで、[TLSを介した明示的なFTPが必要]を選択します。

ログインタイプメニューから「パスワードを尋ねる」を選択します。 「ユーザー」フィールド用に作成したFTPユーザーを入力します。

これで、パネルの下部にある[接続]をクリックできます。 FTPユーザーのパスワードを入力するように求められます。

次のステップは、TLSを使用してリモートサーバーに接続していることを示す最初の兆候です。 使用中の証明書を受け入れるように求められます。

実際に正しい場所に接続していることを確認するために、証明書を作成したときに入力した情報を確認できるはずです。

証明書を受け入れて接続を確立します。

結論


この構成は正しい方向への一歩ですが、接続を確立する前にセキュリティの問題が発生します。 これらの懸念があるため、インターネットに公開されているほとんどのセットアップでは回避する必要があります。 SFTPは、使い慣れた同じツールのいくつかを使用できるようにしたい場合に最適な代替手段ですが、セキュリティがあれば信頼できます。

ジャスティン・エリングウッド