CentOS 7 で安全にファイルをアップロード、SSLを利用したFTPサーバーを導入する

ftp-top
前回の記事「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アドレスを入力して接続をクリックします。
centos-ftpd-inst-7-1
証明書の確認が表示されます。これは項目6.で作成した証明書を信頼するかの確認になります。[OK]をクリックして、先へ進めます。
centos-ftpd-inst-7-1-2
暗号化の状態を保存するかの確認があります。[はい]をクリックして先へ進めます。
centos-ftpd-inst-7-1-3
FTPSで接続しています。画面の上部に、「暗号化されています」と表示されていることが確認できます。
centos-ftpd-inst-7-1-4
これで接続のテストは完了です。

ここまででFTPサーバーの導入は完了です。SFTPの場合、chrootの設定がやや面倒な部分もあり、まだまだFTPSを利用する環境は多いと思います。是非、暗号化された通信でセキュアなFTPSを設定してみて下さい。

システムでお困りのお客様

もし、貴社で、

  • サポート切れのサーバやネットワーク機器の入れ替えをしたいが、どうしたらよいかわからない
  • サーバやネットワークの管理を行う社員がいないため困っている
  • 業務に利用している機器のセキュリティが大丈夫か心配
  • 機器の障害で、業務への影響が発生している
  • 社内の要望に対して、どのようなシステムを導入したらよいか解らない

など、サーバーやネットワーク、セキュリティでお悩みの方、新規のシステム導入を検討中の方。
多くのシステム構築を行い、成功させてきた実績をもつ弊社が、その問題を解決します。
お気軽にお問い合わせ頂き、貴社の問題解決にお役立てください。

お問い合わせ・ご相談はこちらから

Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

関連する情報

Windows-trobule

Windows Update後に2012 R2 が再起動を繰り返す不具合の原因と対応

先日、弊社で行っていたWindows Storage Server 2012 R2 のセットアッ

ubu-16-inst-top

Ubuntu Server 16 LTS版のインストール Linuxシェア NO.1のディストリビューションを使ってみる

以前の記事「CentOS 7 インストール Linuxを始めるにはインストールからがお勧め」でC

win2016-add-dc-top

Windows Server 2016でActive Directoryにドメインコントローラーを追加する。故障や障害に強い構成を作成

以前の記事「Windows Server 2016 で Active Directoryを習得す

windows2012-settings-11

Windows Server 2012 R2を利用する前に始める11の作業

以前の記事「Windows Server 2012 R2をインストールする手順」でセットアップし

ad-dsadd

CSVを利用してActive Directoryにユーザーを一括登録するコマンド

WindowsのActive Directoryに一括してユーザーを追加したい場合がありますよね

solaris-4commands

Solarisサーバを管理することになったとき使う4つの基本操作

Solarisと言えば、Sun。 私は企業としてSunが非常に好きでした。 そんなSunです

win2016-top

Windows Server 2016をインストール 最新OSの導入手順を確認する

Windowsのサーバー製品であるWindows Serverも2012の購入が難しくなり、メイ

dns-reverse

Active Directoryをインストールした後に、必要なDNSの逆引きを設定する

記事「Windows Server 2012 R2へActive Directoryをインストー

win2016-dc-del-top

Windows Server 2016で構成したActive Directoryからドメインコントローラーを削除する手順

先の記事「Windows Server 2016でActive Directoryにドメインコン

win2016-dns-top

Windows Server 2016でActive Directoryを導入した後に設定する、DNSのお勧め項目

前回の記事「Windows Server 2016でActive Directoryを習得する。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク




S