セキュアFTPサーバの構築(ProFTPD+SSL/TLS:CentOS編)
サーバに置いたファイルを外部から扱う方法には、SSHやWebDAV等のいろいろな方法がありますが、特に難しいオペレーションを必要しないFTPを使用する方法も考えられます。しかし、外部から使用するとなるとセキュリティの問題がありますので、今回は、おやじが使用しているProFTPDをSSL/TLS化してみました。ProFTPDでは、1.2.7RC1以降でmod_sslに対応しています。
[重要]
SSLでアクセスすると、インターネット側からはActiveモードが使えなくなります。これは、SSL化による暗号化のためクライアント側のルータが通信の内容をモニタしても内容がわからないので、PORTコマンド内のクライアントのアドレスを変換できなくなり、サーバにクライアントのプライベートアドレスがそのまま中継されてしまうからです。クライアントがNATルータ環境下にいる場合は対処方法はありません。
■ProFTPDのRPMのダウンロードとインストール
ProFTPDのSSL/TLS対応のRPM作成方法については、
こちらを参照願います。ここでは、おやじが作成したRPMを
ダウンロードして、inetdモードで動作させるものとして説明します。
インストールは、任意の場所(ここでは、/usr/local/src)にRPMを置いて、インストールします。
# cd /usr/local/src # rpm -ivh
proftpd-1.3.0rc1-1.i386.rpm proftpd-inetd-1.3.0rc1-1.i386.rpm # mkdir /var/proftpd
← mod_delay用ディレクトリの作成 # mkdir /var/log/proftpd
← 詳細ログ用ディレクトリの作成(詳細ログが必要なければ不要) |
■ProFTPDの設定
ProFTPDの設定は、/etc/proftpd.confを編集します。基本的な設定は、
こちらを参照してください。ここでは、SSL化に関する設定のみをあげて置きます。修正した部分のみ記載しています。(
青字は削除、
赤字は追加、
緑字は変更したものです。)
下記をProftpd.confの適当なところに追加する。
<IfModule mod_tls.c>
TLSEngine on TLSLog
/var/log/proftpd/tls.log TLSProtocol
SSLv23
# Are clients required to use FTP over TLS when talking to this
server? TLSRequired off
# Server's certificate TLSRSACertificateFile
/usr/local/certs/server.crt
TLSRSACertificateKeyFile
/usr/local/certs/server.key
# Authenticate
clients that want to use FTP over TLS?
TLSVerifyClient off </IfModule> |
- TLSLog
TLS関係のログファイルを指定する。通常のログと分けて置くことで異常なアクセスも見つけやすい。
- TLSPortocol
SSL/TLSプロトコル・バージョンを指定する。ここでは、SSLv3およびTLSv1の両方を許可する互換性モード(SSLv23)を指定。
- TLSCipherSuite
利用可能な暗号を指定する。デフォルトのままで問題はないはずであるが、ここでは、ディレクティブの説明の中にある例に合わせ、ADHキー交換を含まないすべての利用可能な暗号を指定した。
- TLSRequired
制御/データの各コネクションでSSL/TLSの要否を指定する。通常接続も必要なので、ここはoffとしクライアントの接続に任せる。指定すると、クライアントは指定コネクションでのSSL/TLS使用を強制される。
- TLSRSACertificateFile/TLSRSACertificateKeyFile
サーバ証明書とキーを指定する。Apache用に作成したサーバ証明書とキーを指定すればよい。サーバ証明書の作成は、こちらを参考にしてください。
- TLSVerifyClient
クライアント証明書の要否を指定する。サーバとクライアントとの相性でうまくいかないこともあると、ProFTPDにもクライアントにもあるので、取り敢えず暗号化ができれば良しということで、ここはoffとした。
■接続試験
FTPクライアントとしては、GetIt
FTPとSmartFTPで動作確認しました。なお、ProFTPDは、Explicitのみサポート(Implicitは未サポート)しているので、SmartFTPではImplicitも選択できますが動作しません。以下に両者のSSL関係だけの設定方法を示します。
◆GetIt FTPのSSL関係の設定
GetIt FTPのSSL関係の設定を以下に示します。なお、ついでと言ってはなんですが、日本語化しましたので、
ソフトダウンロードにパッチを置いておきます。
- サイトアイコンを押し、「Site manager」を開く。
- 「新規サイト」又は「サイトの編集」を押し、「Site propaties」を開く。
- 「セキュリティ」タブを選択し、「プロパティ」の「タイプ」で「FTP with
SSL」を選択する。このとき、「データ・チャネルでSSLを使用しない」が選択できるようになるので、必要に応じてチェックする。通常はデータも含めて保護するはずなので、未チェックとすること。
◆SmartFTPのSSL関係の設定
SmartFTPのSSL関係の設定を以下に示します。このクライアントは、日本語化パッチも用意されています。
- 「お気に入り」から「お気に入りの編集」を選択し、「お気に入り」を開く。
- 右ウインドウで右クリックして「新規作成」から「お気に入り」を選択して、適当な名前を付与してサイトを登録する。
- 登録したサイト名の上で右クリックし、「プロパティ」から「基本設定」を開く。
- 「全般」の「サーバー」の「プロトコル」の「プルダウンメニュー」から、「FTP over SSL Explisit」を選択する。
- 「接続」->「SSL」は「グローバルを使用」のままでよい。
Top Pageへ