【レンタルサーバー】 ファイルをアップロードする時は FTP より SCP や SFTP を使う

普段レンタルサーバーにファイルをアップロードをするときにどのプロトコルを使っているでしょうか?

「FTP」プロトコルを使っているとセキュリティ的によくありません。

 

 

FTPは通信の内容が全部丸見えになってしまう

 

その理由ですが「FTP」プロトコルは通信の内容が丸見えになってしまうからです。

 

タマちゃん
通信の内容が丸見えになると何が困るの?
山ちゃん
WordPressの設定ファイルの内容がバレてしまうよ。
アカウント名とかパスワードとか。

 

そうですね。

たとえば、「wp-config.php」には重要な情報がたくさん記載されています。

このように重要な情報が乗っています。

  • データベース名
  • データベースのユーザー名
  • データベースのパスワード
  • データベースのホスト名

など

 

このように他の人には見せてはいけない情報がたくさん記載されています。

 

 

SFTPで通信内容を暗号化してレンタルサーバーにアップロードする

どうすればファイルの中身がバレないのか?

答えは「通信を暗号化」することです。

 

どうやって「通信を暗号化」するのか?

「FTP」ではなく「SFTP」で通信を暗号化します。

 

FTPとSFTPの違いは?

まずは大まかな違いを。

  • FTP → 暗号化しないファイル送受信用プロトコル
  • SFTP → 暗号化されたファイル送受信用プロトコル

 

SFTPとは?

SFTPの正式名称は「SSH File Transfer Protocol」です。

SSHという用語から分かるように SFTP は SSH で暗号化しています。

 

下図のように暗号化された SSH の通信路の中でファイルのやり取り(送受信)をします。

 

プロトコルですが以下のように SFTP は FTP のポート番号(TCP/20,TCP/21)を利用していません。

SFTP は SSHのポート番号(TCP/22)を利用しています。

 

 

SSHは基本的に「公開鍵暗号方式」を使って「共通鍵」を交換し、「共通鍵」を使ってデータを暗号化します。

※パスワード認証も可能ですが繰り返しパスワードクラッキングをされる対象となるため推奨はされていません。

 

レンタルサーバーで運用している大切なホームページの情報や WordPress の情報を守るために WinSCP で SFTP 通信でファイルをアップロードをしてセキュリティを確保しましょう。

 

 

WinSCP で SFTP 通信をするための設定手順

WinSCP で SFTP で通信するための設定手順は簡単です。

レンタルサーバー初心者の方を念頭に分かりやすく手順を説明します。

 

細かい概念は後ほど解説します。

ここでは例として「エックスサーバー」に接続するための手順を説明しますが、他のレンタルサーバーでも同様です。

 

もしまだ WinSCP をインストールしていない場合は、こちらより WinSCP をダウンロードしてインストールしてください。

 

窓の杜からダウンロード

http://forest.watch.impress.co.jp/library/software/winscp/

 

 

最初に手順の概要を記載します。

※エックスサーバーの場合は、若干手間がかかりますが手順通りに実行すれば今後は WinSCP でデータが暗号化されて状態でアップロードできるようになりますので最初にひと手間掛けておきましょう。

 

  1. エックスサーバーで「公開鍵認証用ペア」のカギを作成する
  2. WinSCPにレンタルサーバーの設定を入れる
  3. WinSCP用の鍵を作成する
  4. 鍵をWinSCPに登録する
  5. WinSCPでレンタルサーバーに接続する

 

 

 

1.エックスサーバーで「公開鍵認証用ペア」のカギを作成する

まずはエックスサーバーでカギを作成します。

 

1.エックスサーバーにログインします。

 

 

2.「ServerPanel」にログインしたら「SSH設定」をクリックします。

 

 

 

3.「公開鍵認証用鍵ペアの生成」タブをクリックします。

 

 

 

4.パスフレーズを入力して「公開鍵認証用の鍵ペア生成(確認)」ボタンをクリックします。

※パスフレーズとは簡単に言うとパスワードのようなものです。

 

 

 

 

5.「公開鍵認証用の鍵ペア生成(確定)」ボタンをクリックします。

 

 

 

6.以下のように「ファイルを保存する」にチェックを入れて「OK」ボタンをクリックして鍵を保存します。

※後で鍵を使うので、無くさないような場所に保存しましょう。

 

以上で、エックスサーバー上での鍵の作成は環境です。

現在の状況は、エックスサーバー上に公開鍵が保存されている状態です。

 

 

 

2.WinSCPにレンタルサーバーの設定を入れる

次にWinSCPの設定をします。

 

1.メニューより「WinSCP」をクリックして「WinSCP」を起動する。

 

 

 

2.「新しいサイト」をクリックします。

 

 

 

 

3.レンタルサーバー会社から通知された FTP 情報を入力して「保存」ボタンをクリックします。

  • 転送プロトコル:SFTP
  • ホスト名   :レンタルサーバーのホスト名
  • ポート番号  :22(※SSH通信なので通常 22番ポートですが、エックスサーバーは 10022 番ポートを利用します)
  • ユーザー名  :FTP用アカウント(通常はレンタルサーバーのアカウント)
  • パスワード  :先ほど鍵を作成した際に設定したパスフレーズ

 

 

※補足

先ほどエックスサーバーで鍵を作った時に以下の注意書きがありました。

エックスサーバーの場合は、SFTP のポート番号は10022番を使用しています。(通常は22番)

 

 

 

 

4.「セッションの保存名」ウィンドウが表示されるので、分かりやすい名前を付けて、「デスクトップにショートカットを作成」にチェックを入れて「OK」ボタンをクリックします。

 

 

 

 

5.下図のように新しく設定が追加されたことを確認します。

 

 

 

3.WinSCP用の鍵を作成する

1.続けて鍵を設定します。「編集」ボタンをクリックします。

 

 

 

 

2.「設定」ボタンをクリックします。

 

 

 

 

3.「認証」をクリックします。

 

 

 

 

4.赤い枠で囲まれているアイコンをクリックします。

 

 

 

 

 

5.以下のように選択するファイルを「すべてのファイル(*.*)」に設定します。

 

 

 

 

 

6.先ほど作成した秘密鍵を選択して「開く」ボタンをクリックします。

 

 

 

 

7.「この秘密鍵 OpenSSH SSH-2 を PuTTYgen で PuTTY 形式の秘密鍵に交換しますか?」のメッセージが表示されるので「OK」ボタンをクリックします。

 

 

 

 

8.パスフレーズを入力する画面が表示されるのでパスフレーズを入力して「OK」ボタンをクリックします。

 

 

 

 

9.「OK」ボタンをクリックします。

 

 

 

 

 

10.「Save private key」ボタンをクリックして WinSCP の SFTP 用の秘密鍵を保存します。

 

 

 

 

11.秘密鍵に名前を付けて保存します。

 

 

 

 

12.右上の「X」をクリックして「PuTTY Key Generator」の画面を閉じます。

 

 

 

 

4.鍵をWinSCPに登録する

1.再度「高度なサイトの設定」画面から「認証」をクリックして、赤い枠で囲まれたアイコンをクリックします。

 

 

 

 

2.秘密鍵を選択して「開く」ボタンをクリックします。

 

 

 

 

 

3.秘密鍵が登録されていることを確認して、「OK」ボタンをクリックします。

 

 

 

 

4.「保存」ボタンをクリックします。

」」

 

 

 

5.WinSCPでレンタルサーバーに接続する

1.「ログイン」ボタンをクリックします。

 

 

 

 

 

2.パスフレーズの入力画面が表示されたら、秘密鍵のパスフレーズを入力して「OK」ボタンをクリックします。

 

 

 

 

 

3.以下のように WinSCP でレンタルサーバーにログインできれば設定完了です。

 

以上が WinSCP で SFTP を使えるようにする手順でした。

レンタルサーバー初心者、ホームページ初心者の方は早めにセキュリティ対策をやっておくのが吉です。

 

 

 

レンタルサーバーでファイルをアップロードをする時に SFTP を使うメリット

レンタルサーバーでファイルをアップデートする際に、FTP (File Transfer Protocol) を使うより SFTP (SSH File Transfer Protocolを使った方が良いです。

そのメリットを以下に挙げてみます。

 

メリット1.通信データが暗号化される

今やインターネットの世界でデータを暗号化して通信をするのは当たり前になってきています。

きちんと暗号化してセキュリティを確保することの安心感は、非常に大きなメリットです。

サイト全体も https で暗号化してしまうのが一般的になっています。

 

このサイトもエックスサーバーの「無料独自SSL」を導入して「無料」でサイト全体を https 化しています。

具体的な手順は以下をご覧ください。

【レンタルサーバー初心者向け】 エックスサーバーで「無料独自SSL」を導入してサイトを「https化」してみた

 

 

メリット2.ファイアウォールの管理が簡単

FTPは複数のポートを利用します。

 

  • アクティブモードの場合
    制御用ポート 21番ポート
    データ転送用ポート 20番ポート

 

  • パッシブモードの場合
    制御用ポート 21番ポート
    データ転送用ポート 可変番ポート

 

このように複数のポートを使うため、ファイアウォールの設定が煩雑になります。

ネットワークの知識がないと、「よく分からないし面倒だから適当にポートを開けておこう」と思い、その結果クラッカーの標的になる危険性があります。

 

しかし SFTP は単純に SSH の通信路を利用するだけなので22番ポートだけあけておけば大丈夫。

だからファイアウォールに管理がシンプルになります。

 

 

 

FTPだとデータの中身が丸見えになっていることを検証

「FTPプロトコルだと暗号化されていないのでデータの中身が丸見えになっています」と言っても具体的に見てみないと実感しないと思います。

そこで実際にパケットの中身を確認してみましょう。

 

データ通信の中身を盗み見る手順概要

  1. インターネット上のさくらVPSサーバにFTPテスト用のアカウントを作成
  2. tcpdumpでパケットを採取
  3. FTPでWordPressのデータ(wp-config-sample.php)をアップロード
  4. Wiresharkでパケットの中身を調査して「アカウント」「パスワード」「ファイル名」「ファイルの中身」を盗む
  5. テスト用アカウントを削除

 

以上です。

 

1.FTPテスト用のアカウントを作成します。

 

以下のアカウントを作成します。

  • アカウント名:ftptestuser
  • パスワード:1ftp_password01

 

# useradd ftptestuser
# passwd ftptestuser
ユーザー ftptestuser のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

 

 

 

2.tcpdumpコマンドでFTP通信のパケットを取得します。

 

まず、「確認くん」にアクセスして自宅のグローバルIPを調べます。

理由は、自宅IPでパケット搾取をフィルタリングするためです。

(フィルタリングしないと膨大な情報量になってしまい、目的のパケットを探すことが難しくなります)

http://www.ugtop.com/spill.shtml

 

下図のように現在のIPアドレスが分かります。

 

さくらのVPS(Linuxサーバ)にログインし、tcpdumpコマンドを実行します。

# tcpdump -n -vvv src host 126.xxx.xxx.xxx and not 22 -w test001.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
264 packets received by filter
0 packets dropped by kernel

 

この tcpdumpコマンドの意味ですが、

  • 送信元を先ほど「確認くん」で確認した自宅IPアドレスを指定してフィルタリングしています。
  • -n オプションでIPアドレスやポート番号を変換せずにそのまま数字で表示します。
  • -vvv オプションで詳細にパケットの中身を採取します。
  • 「not ssh」で Teraterm で接続しながら作業をしているので、ssh の情報を除外します。
    (sshまで含めると膨大な情報量になってしまいます)
  • 「-w test001.cap」オプションで、カレントディレクトリに「test001.cap」というファイル名でデータを出力します。

です。

 

 

 

 

 

3.WinSCPでFTP接続をして「wp-config-sample.php」ファイルをアップロードします。

 

さくらインターネットのVPSへ接続します。

  • プロトコル : FTP
  • 暗号化 : なし
  • ポート番号 : 21
  • アカウント : ftptestuser

 

ログイン後、「wp-config-sample.php」ファイルをアップロードします。

 

 

 

 

 

 

4.Wiresharkでパケットの中身を調査して「アカウント」「パスワード」「ファイル名」「ファイルの中身」を盗む

Wiresharkでパケットの中身を調査します。

まずは「アカウント名」「パスワード」ですが、下図のようにハッキリと確認できます。

 

 

 

 

ファイル名「wp-config-sample.php」も確認できます。

 

 

ファイルの中身も丸見えです。

普通に「wp-config-sample.php」を開くと・・・

<?php
/**
 * WordPress の基本設定
 *
 * このファイルは、インストール時に wp-config.php 作成ウィザードが利用します。
 * ウィザードを介さずにこのファイルを “wp-config.php” という名前でコピーして
 * 直接編集して値を入力してもかまいません。
 *
 * このファイルは、以下の設定を含みます。
 *
 * * MySQL 設定
 * * 秘密鍵
 * * データベーステーブル接頭辞
 * * ABSPATH
 *
 * @link http://wpdocs.sourceforge.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86
 *
 * @package WordPress
 */

// 注意:
// Windows の “メモ帳” でこのファイルを編集しないでください !
// 問題なく使えるテキストエディタ
// (http://wpdocs.sourceforge.jp/Codex:%E8%AB%87%E8%A9%B1%E5%AE%A4 参照)
// を使用し、必ず UTF-8 の BOM なし (UTF-8N) で保存してください。

// ** MySQL 設定 – この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define(‘DB_NAME’, ‘database_name_here’);

/** MySQL データベースのユーザー名 */
define(‘DB_USER’, ‘username_here’);

/** MySQL データベースのパスワード */
define(‘DB_PASSWORD’, ‘password_here’);

/** MySQL のホスト名 */
define(‘DB_HOST’, ‘localhost’);

/** データベースのテーブルを作成する際のデータベースの文字セット */
define(‘DB_CHARSET’, ‘utf8’);

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define(‘DB_COLLATE’, ”);

/**#@+
 * 認証用ユニークキー
 *
 * それぞれを異なるユニーク (一意) な文字列に変更してください。
 * {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org の秘密鍵サービス} で自動生成することもできます。
 * 後でいつでも変更して、既存のすべての cookie を無効にできます。これにより、すべてのユーザーを強制的に再ログインさせることになります。
 *
 * @since 2.6.0
 */
define(‘AUTH_KEY’,         ‘put your unique phrase here’);
define(‘SECURE_AUTH_KEY’,  ‘put your unique phrase here’);
define(‘LOGGED_IN_KEY’,    ‘put your unique phrase here’);
define(‘NONCE_KEY’,        ‘put your unique phrase here’);
define(‘AUTH_SALT’,        ‘put your unique phrase here’);
define(‘SECURE_AUTH_SALT’, ‘put your unique phrase here’);
define(‘LOGGED_IN_SALT’,   ‘put your unique phrase here’);
define(‘NONCE_SALT’,       ‘put your unique phrase here’);

/**#@-*/

/**
 * WordPress データベーステーブルの接頭辞
 *
 * それぞれにユニーク (一意) な接頭辞を与えることで一つのデータベースに複数の WordPress を
 * インストールすることができます。半角英数字と下線のみを使用してください。
 */
$table_prefix  = ‘wp_’;

/**
 * 開発者へ: WordPress デバッグモード
 *
 * この値を true にすると、開発中に注意 (notice) を表示します。
 * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
 *
 * その他のデバッグに利用できる定数については Codex をご覧ください。
 *
 * @link http://wpdocs.osdn.jp/WordPress%E3%81%A7%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0
 */
define(‘WP_DEBUG’, false);

/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

/** Absolute path to the WordPress directory. */
if ( !defined(‘ABSPATH’) )
    define(‘ABSPATH’, dirname(__FILE__) . ‘/’);

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . ‘wp-settings.php’);

 

Wiresharkで解析すると、このようにファイルの中身まで見えてしまいます。

  

 

 

 

 

5.テスト用アカウントを削除

最後に今回使用したアカウントを削除します。

# userdel ftptestuser
# grep ftptestuser /etc/passwd
#

 

 

結論

FTPはセキュリティ的に安全ではないので SFTP など暗号化をしてデータをアップロードをする方法に切り替えましょう。

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください