CentOS 7 で安全にファイルをアップロード、SSLを利用したFTPサーバーを導入する
前回の記事「CentOS 7 への Apacheインストール。最短でウェブサーバーを構築してテストページを表示する。」でウェブサーバー環境が完成しました。続いてウェブサーバーへコンテンツをアップロードするためにFTPサーバーのセットアップ手順を紹介します。SSHが利用できる環境ならSFTP(FTPと付いてますが、SSH通信上でファイル転送を行うための機能になります。)を利用することも可能ですが、現状ではコンテンツのアップロードにFTPを利用することが多いかと思います。
FTPはファイルの転送に利用する通信です。そのままだとスニッファ(盗聴)などでファイルの内容が見えてしまう可能性もありますので、本記事ではセキュアなFTPS(SSLで暗号化されたFTP通信)を利用するように設定を行います。
スポンサーリンク
目次 [非表示]
1.FTPサーバーを導入する環境
FTPサーバーを導入する環境は、以前の記事「CentOS 7 への Apacheインストール。最短でウェブサーバーを構築してテストページを表示する。」で作成したウェブサーバーになります。
以前の記事に詳細な環境は記載していますが、基本的な環境は以下の通りです。
- OSのバージョンはCentOSで最新のバージョン7.4を利用しています。
- CentOS 7系であれば、どのバージョンでも同じ手順で構築が可能です。
- サーバーはインターネットへ接続されており、グローバルIPアドレスが一つ、割り当てられています。
- ウェブサーバーとしてhttpdがインストールされています。
- ファイアウォールとしてfirewalld、若しくはiptablesを設定しています。
この環境を前提に先へ進めて行きます。
2.ftpパッケージの確認
CentOSの標準レポジトリに含まれるftpパッケージを確認します。CentOSでは標準でvsftpdというftpサーバが用意されています。インストール前にパッケージの情報を表示して、想定しているものと合致していることを確認します。
2-1.パッケージ確認
CentOSに含まれるvsftpdと名前の付くパッケージのリストを確認します。パッケージリストの確認は、yumコマンドにオプションのsearchを付けて実行します。
この中でftpサービスに該当するパッケージはvsftpdになりますので、これをインストールします。
インストール前に間違いないか、念のためにvsftpdのパッケージ詳細を確認します。
vsftpdサービスのパッケージであることが確認できましたので、このパッケージをインストールします。
3.vsftpdパッケージのインストール
項目2.で確認したvsftpdパッケージをyumコマンドでインストールする手順を記載していきます。
3-1.yumコマンドによるvsftpのインストール
vsftpdパッケージはyumコマンドに”install”オプションを付けることでインストールすることができます。
上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。コマンドを実行すると、以下のようにインストールが開始されます。
エラーの出力がなく、「完了しました!」と表示されれば、vsftpdのインストールは正常に完了しています。
3-2.vsftpdインストール後の確認
vsftpdがインストールされたことを確認します。インストールされているパッケージはyumコマンドで確認できます。以下のようにyumを実行することで、vsftpdパッケージがインストールされていることを確認します。
出力結果として、以vsftpdパッケージが表示されることを確認します。
続いてvsftpdがインストールされた場所を確認します。インストールされた場所(パス)を確認するためにはwhichコマンドを利用します。以下のように実行することでインストールパスを確認できます。
実行結果は以下のようになります。
この結果から、vsftpdが/usr/sbin以下にインストールされたことが確認できます。
これでvsftpdのインストールが正常に終了したことが確認できました。
3-3.vsftpdの起動と確認
ここまででvsftpdのインストールと確認が完了しましたので、続いてインストールしたvsftpdが起動することを確認します。CentOSでは7系からsystemctlコマンドでサービスの起動・停止を行います。vsftpdは以下のように実行することで起動できます。
エラーが出力されなければ、vsftpdは正常に起動しています。
systemctlコマンドにstatusオプションを付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。以下が実行例です。
上記では分かり難いかもしれませんが、黒丸(●)の部分が正常な起動状態の場合、緑色で表示されます。
また、Activeの項目にrunningと表示されていることから、vsftpdが起動していることが確認できます。
稼働しているプロセスを表示するpsコマンドでもvsftpdが起動していることを確認できます。
以下のように実行します。
以上の結果から、vsftpdが正常に起動することが確認できました。
3-4.vsftpdのスタートアップ設定(自動起動設定)
サーバーの再起動や停止の復旧時に、vsftpdが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。
エラーが出力されなければ、自動起動は設定が完了しています。
続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。
実行結果として “enabled”と表示されればvsftpdの自動起動設定は完了です。
4.vsftpdの設定ファイル変更
項目3.の手順までで、vsftpdパッケージの導入までが完了しました。vsftpdの場合は設定の変更を行わないとFTP接続できない場合(firewallによって拒否されたり、パッシブ接続が有効になっていないなど)があります。本記事ではvsftpdを運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。
- FTPユーザーは、自身のホームディレクトリ以上に移動できない (chroot設定)
- アノニマス(不特定なユーザー)FTPは利用しない
- FTPはSSL通信で行う(FTPS設定)
- .(ドット)の付いた隠しファイルを表示する
- インターネット経由での接続を考え、パッシブFTPの設定を行う(接続ポートは60001から60010に固定)
- その他、基本的に行ったほうが良い設定の変更
この条件に合わせて設定を行っていきます。
4-1.vsftpd.confの変更
vsftpdの設定は/etc/vsftpd以下にあるvsftpd.confで行います。
vsftpd.confの編集前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。
バックアップ(コピー)の完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。
4-1-1.アノニマスFTPの無効化
を
に変更します。
4-1-2.asciiアップロード、ダウンロードの有効化
のコメントを外します。
4-1-3.chroot設定
ユーザーを自身のホームディレクトリ以上に移動できないようにchroot設定を行います。
からコメントを外して
に変更します。
併せてchrootを許可するリストを指定します。
からコメントを外して
に変更します。
4-1-4.ls有効化設定
ls -R を 有効にする設定を行います。
からコメントを外して
に変更します。
4-1-5.SSL通信有効化の設定
SSLでFTP接続ができるように設定を行います。この項目は設定ファイルにはありませんので
項目を追記してください。
以下を追加します。
SSL機能を有効化するための項目と、SSL通信で利用するサーバー証明書ファイルのパスを設定します。
4-1-6.パッシブポートの設定
パッシブFTPが利用できるように、ポートを固定します。
4-1-7.その他の設定
FTPの運用に設定しておいたほうが良い点について、項目を追加します。
この設定は、パッシブポートの設定の下に記載する形にしています。以下を設定ファイルの最下行に追記します。
ここまでの7点で設定ファイルの変更は完了です。変更したファイルを保存してください。
4-2.chroot用ファイルの作成
続いてchrootを行うための空ファイルを作成します。実際にはホームディレクトリ以上に移動できるユーザーを記載するファイルですが、全てのユーザーはホームディレクトリ以上に移動できない設定のため、空のファイルを作成するだけで問題ありません。
空のファイルはtouchコマンドで作成します。作成するファイル名は”chroot_list”になります。
以下のようにコマンドを実行します。
作成後、ファイルを確認します。
作成した chroot_listファイルがlsコマンドで表示されれば、作成は完了です。
5.firewallの許可設定
本記事は、FTPサーバーの導入環境として、記事「CentOS7の基本設定 Linuxのインストール後に設定する9つのポイント」の項目6.で記載したfirewall設定を行っていることを前提としています。
このfirewall設定の場合、FTPのパッシブ接続ポートである60001~60010番をオープンしていないため、インターネット側からFTPでアクセスしても接続できません。(ローカル環境の場合はパッシブFTPを利用しないため、接続できます。)
その為、firewall-cmdコマンドを利用してルールを追加し、パッシブFTP接続できるようします。
※iptablesを利用している場合は、項目5-2.を参照して設定を行って下さい。
5-1.firewall-cmdコマンドによるパッシブFTP接続ポートのオープン
記事「CentOS 7 インストール Linuxを始めるにはインストールからがお勧め」で作成した”manage”というzoneにパッシブ接続用ポートの設定を追加します。
5-1-1.現状の設定確認
先ずは現状の確認を行います。
上記のように 111.8.21.167のIPアドレスからのみ、sshとftpを許可するように設定されていることを確認します。
5-1-2.パッシブ接続用ポートの許可
firewall-cmdコマンドでウェブサーバーの待ち受けポートである80番に外部から接続できるように設定を追加します。コマンドは以下のように実行します。
上記はmanageゾーンに対して、60001-60010のtcpポートを接続用ポートとして追加するというコマンドです。
基本的にはfirewall-cmdは実行結果として”success”と応答があれば、設定は正常に完了しています。(以下も同様です。)
5-1-3.設定の反映
設定した内容を反映するためにreloadを実行します。
5-1-4.設定の確認
設定の確認は以下のコマンドで行います
表示された結果の”ports”項目に”60001-60010/tcp”が追加されていれば、設定の確認は完了です。
5-2.iptablesコマンドによるパッシブFTP接続用ポートのオープン
iptablesコマンドでパッシブFTP接続用ポートある60001-60010番に外部から接続できるように設定を追加します。コマンドは以下のように実行します。
エラーが表示されなければ設定は完了しています。
iptablesコマンドを実行後に設定が追加されていることを確認します。確認は以下のように実行します。
以下が実行結果の例になります。
Chain INPUTの8行目に設定を行った60001-60010番ポートが追加されていることが確認できます。設定を確認後、保存を行います。保存は
で行います。上記のように[OK]が表示されれば正常に設定は保存されています。これでiptablesによるfirewallの設定は完了です。
6.FTPS(FTP通信を暗号化する)設定
続いてFTPの通信を暗号化するためにSSLの設定を行います。SSLを利用するためには、SSL証明書ファイルの作成が必要になります。この手順について記載していきます。
6-1.サーバー証明書の作成
SSL通信を行うために証明書ファイルを作成します。ここで作成したファイルはvsftpd.confの”rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem”で指定しています。証明書ファイルを作成するディレクトリに移動します。
6-1-1.証明書ファイル作成コマンドの実行
makeコマンドで証明書ファイルを作成します。以下が実行例になります。
6-1-2.証明書ファイル用の情報を入力
証明書ファイルを作成するための情報を入力します。入力例は以下のようになります。
※実際にはご利用の環境に合わせて下さい。
上記の情報を入力すると、証明書ファイル(vsftpd.pem)が作成されます。
6-1-3.証明書ファイルの確認
証明書ファイルが作成されていることを確認します。
vsftpd.pemが作成されていることが確認できます。
6-2.vsftpdの再起動
証明書ファイルの作成が完了しました。これで設定は全て終わりましたので、vsftpdを再起動して、設定を反映します。
エラーが出力されなければ、vsftpdは正常に再起動しています。続いてvsftpdの状態を確認します。
Active項目にrunningが表示されていますので、正常にvsftpdが起動していることが確認できました。
これでSSLを利用したFTP、FTPSの導入が完了しました。
7.FTPの接続確認
項目6.まででFTPの導入と設定、FTPSの設定まで完了しました。ここでは実際にFTPクライアントを利用して、FTP接続をテストしてみます。FTPクライアントはWindowsで良く利用される”FFFTP”を使っています。
7-1.ffftpでの接続
ffftpのでユーザー名とパスワード、ホストのIPアドレスを入力して接続をクリックします。
証明書の確認が表示されます。これは項目6.で作成した証明書を信頼するかの確認になります。[OK]をクリックして、先へ進めます。
暗号化の状態を保存するかの確認があります。[はい]をクリックして先へ進めます。
FTPSで接続しています。画面の上部に、「暗号化されています」と表示されていることが確認できます。
これで接続のテストは完了です。
ここまででFTPサーバーの導入は完了です。SFTPの場合、chrootの設定がやや面倒な部分もあり、まだまだFTPSを利用する環境は多いと思います。是非、暗号化された通信でセキュアなFTPSを設定してみて下さい。
システムでお困りのお客様
Facebookでのご購読が便利です。
関連する情報
-
-
Windows Update後に2012 R2 が再起動を繰り返す不具合の原因と対応
先日、弊社で行っていたWindows Storage Server 2012 R2 のセットアッ
-
-
Ubuntu Server 16 LTS版のインストール Linuxシェア NO.1のディストリビューションを使ってみる
以前の記事「CentOS 7 インストール Linuxを始めるにはインストールからがお勧め」でC
-
-
Windows Server 2016でActive Directoryにドメインコントローラーを追加する。故障や障害に強い構成を作成
以前の記事「Windows Server 2016 で Active Directoryを習得す
-
-
Windows Server 2012 R2を利用する前に始める11の作業
以前の記事「Windows Server 2012 R2をインストールする手順」でセットアップし
-
-
CSVを利用してActive Directoryにユーザーを一括登録するコマンド
WindowsのActive Directoryに一括してユーザーを追加したい場合がありますよね
-
-
Solarisサーバを管理することになったとき使う4つの基本操作
Solarisと言えば、Sun。 私は企業としてSunが非常に好きでした。 そんなSunです
-
-
Windows Server 2016をインストール 最新OSの導入手順を確認する
Windowsのサーバー製品であるWindows Serverも2012の購入が難しくなり、メイ
-
-
Active Directoryをインストールした後に、必要なDNSの逆引きを設定する
記事「Windows Server 2012 R2へActive Directoryをインストー
-
-
Windows Server 2016で構成したActive Directoryからドメインコントローラーを削除する手順
先の記事「Windows Server 2016でActive Directoryにドメインコン
-
-
Windows Server 2016でActive Directoryを導入した後に設定する、DNSのお勧め項目
前回の記事「Windows Server 2016でActive Directoryを習得する。