【お名前.com】WordPressを共用SDサーバーからVPS(KVM)へ乗り換える その3

CentOS + Nginx でのサーバ構築。1から始める初心者向けです。
なお、筆者もばりばりの初心者です。

<その2>では秘密鍵を使ったリモートコンソールでのSSH接続と、作業用ユーザの新規登録を行いました。
また、登録した作業用ユーザが「sudo」コマンドで「root権限」を使えるようにしました。

<その3>ではログインに使う秘密鍵を改めて自分で用意・登録し、セキュリティに関するSSHの設定を詰めます。


SSH公開鍵と秘密鍵を自分で用意する

「Tera Term」には「root」でログインしている状態を前提とします。

<その2>で、お名前.comのVPSコントロールパネルからダウンロードしてリモートコンソールのログインに使用した秘密鍵ですが、自前で用意したものに変更した方が良いそうです。

理由はともかくセキュリティが高まるのであればやっておいて損は無さそうなので実行してみます。

鍵の作成はフリーソフトで行います。
PuTTYごった煮版」というソフトを使わせてもらいました。

PuTTYごった煮版

リンク先から最新版をインストールします。
Windowsの「すべてのプログラム」から「PuTTYごった煮版」→「PuTTYgen」を起動します。

本体の「PuTTY」では無いのでご注意ください。「PuTTYgen」のほうです。

1. 「公開/秘密鍵ペアの生成」横の生成ボタンを押すと、乱数が作成されます。
2. 「鍵のコメント」欄にはわかりやすい名前を付けておきます。

secretkey

「鍵のコメント」の下の項目「鍵のパスフレーズ」はパスワードのことです。

任意でパスワードを決めて入力し「パスフレーズの確認」にも同じパスワードを入れます。
ここでは仮にパスワードを<keypassword>にしたとします。

秘密鍵のパスワード:keypassword

生成した公開鍵と秘密鍵を「生成した鍵の保存」からそれぞれ保存します。
ここも悩みどころなのですが、保存する際に名前も拡張子も何にも出てきません。

参考にさせて頂いたブログに習って公開鍵の拡張子を「.pub」、秘密鍵の拡張子を「.ppk」としました。
ひとまずデスクトップに保存しました。初めて見る拡張子です。

ここでは仮に公開鍵を「publickey.pub」、秘密鍵を「secretkey.ppk」と保存したことにします。
念のため2つとも保存しましたがローカル側で使用するのは「秘密鍵」の方です。
「公開鍵」はサーバ上を置いておき、2つが合致した時にログインできるという流れです。

「PuTTYgen」は開いたままにしておいて、「Tera Term」に戻ります。



ここで一旦、「Tera Term」にログインしている「root」からログアウトします。

そして、<その2>で作成した作業用ユーザで改めてログインし直します。
作業用ユーザが秘密鍵を使用してログインできるように設定を行うためです。

先ほど作成した作業用ユーザ名とパスワードだけでログインできます。
この段階ではまだ鍵は必要ありません。

ユーザ名:mndangler
パスワード:abc123

公開鍵はVPS内にフォルダを作って置いておくので、そのためのフォルダ作成を行います。

「HOME」ディレクトリの下に「ssh」フォルダを作るということなのでそのまま真似をさせて頂きました。

「TeraTerm」に、

cd $home

このコマンドを入力すると「HOME」ディレクトリに移動します。
画面上には何も変化が起きないので不安になりつつも、続けて

sudo mkdir .ssh

と入力し、「ssh」フォルダを作成します。
ここも画面には作成されたらしき変化は何も起きません。
「mkdir」は「Make directory」のことで、フォルダを作るという意味です。

sudo chmod 700 .ssh

「chmod」コマンドで「.ssh」フォルダのアクセス権=パーミッションを変更します。
パーミッションは700に設定しました。

keyfolder

続けて、先ほど作成した「公開鍵」をVPSに登録します。
以下を入力します。

sudo vi .ssh/authorized_keys

コンソール画面に「vi」によってテキストエディタが開き、左側が「~」でいっぱいの画面になりました。
混乱しがちですが、今の状態はメモ帳を新規で開いた時と同じで中身には何も書かれていません。

「authorized_keys」というファイルは初めからあるのではなく、先ほどのコマンドで作成したのです。
つまり、先に名前をつけてメモ帳を新規で開いた状態です。

ここに「PuTTYgen」で作成した公開鍵(暗号文らしきもの)をコピー&ペーストします。

seckeymozaic

まず上の画像のモザイクで隠してある部分の文字列を丸ごとコピーします。

次に「TeraTerm」に戻って、キーボードの「i」を押します。すると画面下に「挿入」という文字が出ます。 「Insert」と出る人もいるかもしれませんが同じ状態です。

insert

この状態で「TeraTerm」上部バーの「編集」から「貼り付け」を行います。
「挿入モード」にせずに貼り付けを行うと正しくペーストできませんのでご注意を。

「貼り付け」にも<P>と<CR>という二択がなぜかあり悩んだのですが、ショートカット的な問題でどちらも同じことなんだろうと思われます。私は<P>の方で貼り付けました。

貼り付けができたら「Esc」キーで「挿入モード」から出て、「:wq + Enter」で保存して終了します。

sshフォルダのパーミッションは700にしましたが、鍵のファイルは600に設定しておきます。

chmod 600 .ssh/authorized_keys

これで公開鍵の設置は完了しました。

対になる秘密鍵はデスクトップ(かどこか)に保存してあるはずです。
鍵を使って「TeraTerm」にログインできるかどうかを確かめてみましょう。

一度ログアウトしてから「ユーザ名・パスワード・秘密鍵」を指定して再ログインを試みます。

ここで使用するパスワードは「PuTTYgen」で鍵生成時に決めたパスフレーズのことです。

ユーザ名:mndangler
パスワード:keypassword
「RSA/DSA/ECDSA/ED25519鍵を使う」にチェック:秘密鍵(.ppk)のファイルの場所を指定

「OK」を押しましょう。
無事にログインできたでしょうか。

念のため「ユーザ名とパスワードだけ」と「ユーザ名と秘密鍵だけ」も試しましたがこの2通りの入力だけではログインできませんでした。

SSHの設定変更とセキュリティ強化

SSH接続の設定を変更し、セキュリティの強化につなげます。
具体的には下記の項目を変更していきます。

  • Ⅰ. SSH接続に使用するポート番号の変更
  • Ⅱ. rootでのSSHログインを禁止
  • Ⅲ. パスワード認証のみのログイン禁止(鍵とパスを使用した認証のみ許可する)
  • Ⅳ. ファイアウォールの設定
Ⅰ. SSH接続に使うポートの変更

VPSへの接続に使うポートですが、初期設定の”22″のままでは攻撃者に狙われやすいので変更します。

また、SSH接続に使うポートの変更と同時に「rootでのSSHログインの禁止」と「パスワード認証のみのログインの禁止」も行います。

変更後はSSHの再起動を行い設定を反映させるので、ここからの項目はまとめて一気に行います。

まず、下記を入力します。

sudo vi /etc/ssh/sshd_config

念押しのようなメッセージと共にパスワードを聞かれました。
パスワードは聞かれないこともあるそうです。
内容から察するに初回起動時のみ聞かれるような気がします。

sudo

パスワードを入れるとエディタが開き「sshd_config」の内容がずらーっと出てきます。
13行目あたりの「#Port 22」を探して変更していきましょう。

port
#Port 22

頭の「#」を外し、番号を任意の数字に変更します。
1025~65535の間で好きな数字を選べばOKです。

ただし、「10022」という数字は多くのサイトで例として使われているそうなので別の数字にしたほうが良さげです。変えたのに狙われやすいのでは変更した意味が無いので気をつけたいところです。

Port 55555

このような感じで数字を変えてみました。仮に「55555」番として進めます。
もちろん連番も危険なので、ご自身の番号は違うものにして下さい。

ちなみに挿入モードでの数字入力はキーボードの右側にあるテンキーでは打てませんでした。
右側のテンキーを押すと改行が入ったりしてぐちゃぐちゃになり焦ります。
数字は文字キーの上に並んでいるキーで入力します。

「sshd_config」はまだ閉じずに続けて編集します。下に続きます。

Ⅱ. rootでのSSHログインの禁止

ここで行う「rootでのSSHログインの禁止」と次の「パスワード認証の禁止」の2つの項目は私の環境では初期状態ですでに設定されていました。 お名前.comのVPS(KVM)のテンプレートの初期設定ということだと思いますが、確認の意味も込めて見直します。

「sshd_config」の、先ほどのポート番号から30行程下がった辺りに以下の部分を探します。

## PermitRootLogin yes
sshd

この下の行に下記の一文を追記します。

PermitRootLogin without-password

「## PermitRootLogin yes」については何も手を加えません。
むしろ、この行が有効になっていたら「#」を加えて無効にしておきましょう。

「## PermitRootLogin yes」を書き換えずに残しておいて、新しく書き足すという方法です。
元の設定を残しておけるので、エラーが出た時にすぐに戻すことができます。また、どこを変更したのかもわかりやすいためよく使われている方法のようです。

「PermitRootLogin without-password」で「root」のパスワード認証のみでのログインを拒否できます。

私の環境では初めからこの一文がありましたが、実際は「#PermitRootLogin without-password」のようにコメントアウトされていたり、記述自体が無いのかもしれません。

その時は「#」を外して有効化するか、「## PermitRootLogin yes」の下に追記で加えましょう。

まだ「sshd_config」は閉じずに編集を続けます。

Ⅲ. パスワード認証の禁止

パスワード認証のみでのログインを禁止したので、公開・秘密鍵を使ったログインを設定します。
以下の場所を変更します。先ほどの場所から5行程下がったところにあります。

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile          .ssh/authorized_keys

上から、

■ RSA鍵認証を有効にする
■ 公開鍵認証を有効にする
■ 公開鍵ファイルの場所

ということですので、3つとも先頭の「#」を外して有効化します。
3行目が先ほど作成した「sshフォルダ」内の公開鍵ファイル「authorized_keys」ということになります。
公開鍵の場所が異なる場合、またはファイル名が違う場合はここを任意で書き換える必要があります。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile          .ssh/authorized_keys

↓今までの変更点は以下のような状態です。

sshd

「root」以外のユーザもパスワードのみではログイン不可にするため以下を20行程下に探します。

PasswordAuthentication yes

↓ここを「no」に変更します。

PasswordAuthentication no

また、この「sshd_config」の一番下まで見ていくと

Match User root
           PasswordAuthentication no

という一文があり、ここでも「root」のパスワードでの認証を禁止してあるようです。
正直どれが効いているのか良くわかりません。

rootno


ひとまずここまで変更したらEscキーから「:wq + Enter」で保存して終了します。
設定を反映させるために、SSHを再起動します。

sudo /etc/init.d/sshd restart

パスワードを聞かれたら入力しましょう。一瞬で再起動が完了します。

Ⅳ. ファイアウォールの設定

次に、22番から変更した「SSH接続に使うポート番号」の開放とファイアウォールの設定を行います。

お名前.comは初期状態では「Port22のみが許可になっている」とのことなので、ポート番号変更に伴い「iptables」の番号も変更します。

「sudo権限」が必要になりますので、行頭に「sudo」を付けるのを忘れないように気をつけます。
ちなみに「sudo」を付け忘れると下記のようなエラーが出ます。

W10: 警告: 読込専用ファイルを変更します

現在は作業ユーザでログインしているので怒られるわけです。
下記のように入力しましょう。

sudo vi /etc/sysconfig/iptables

入力すると「iptables」の内容がテキストエディタで開きます。

下記のように22番ポートを開けている行があるので、数字を先ほど指定したポートに変更します。

-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

また、そのついでに他にも指定を行い、ファイアウォールを設定します。

ファイアウォールの構成はネット上でたくさん紹介されていますので読んでみたのですが、はじめはシンプルに「SSH・HTTP・HTTPS・FTP・MySQL」に使うポートを空けて、残りは下記リンクの例をそのまま使わせて頂きました。

初心者でもわかる!さくらVPS | Sakura VPS マニュアルさんのiptablesの例
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH, HTTP, FTP1, FTP2, MySQL, HTTPS
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 変更した番号 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50000:50030 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

変更した番号」の部分には初期のポート番号「22」から変更した数字を必ず入れてください。
今回の例で言うと設定したポート番号「55555」を入れます。
変更後は忘れないように「iptables」の再起動を行い、設定を反映させます。

sudo /etc/rc.d/init.d/iptables restart
firewall

全てOKが出れば完了です。
エラーが出る場合は書き込み内容の文字化けなどが原因かもしれませんので見直しを行って下さい。

iptables」は、ご自身の環境に合わせて次々に強化していって下さい。
検索すると例がたくさん出てきます。

今回はここまでです。


<その4>ではVPSの各種設定を見直し、メールの設定を行います。
この場合のメールとは独自ドメインでのメールではなく、VPS内でエラーやアップデートなどの報告がある際にroot宛へ送られてくるメールのことです。

また、「お試し無料期間」の間はメールに使用するポートに制限がかかっており利用することができません。
すなわち、メール設定は本サービス契約後に行うということになります。

その4 … VPSの設定、メールの設定へ

コメント

 DISQUSコメントシステムとは?
DISQUSコメントシステムFacebook Twitter Google などのアカウントを使用してコメントを残すことができます。
また、それらを使いたくない場合でも メールアドレスのみ でコメントが可能で、その際のアドレスはもちろん非公開です。
YouTubeTweet などはURLを貼ると自動で埋め込み表示されますし、画像をアップすることもできます。
お気軽にコメント頂けると嬉しいです。

New Post



Random


CLOSE