ConoHaでVPSを建てたら最初にやること。

こんにちは。前回はブログを立ち上げるために学割を使ってConoHaのVPSを契約してみました。

【学割】ConoHaのVPSで爆速WordPress

が、このままではまだブログを公開することはできません。
今回は、不正アクセスを防ぐために、適切なセキュリティ設定を行っていきます。
前回の記事で掲載した手順のSTEP.6にあたります。

そこまで重要なのか?

前回の記事でも今回の記事でもこのセキュリティ設定に関しては口を酸っぱくして言っています。
「そこまで焦る必要があるのか?」と思う人もいるかもしれません。

VPSは”狙われている”

この画像を見てください。

これは、VPSを作成してから、セキュリティの設定を行わずにVPSの設定で接続許可ポートを「全て許可」のまま3日間放置した後にrootユーザーでログインしたときの出力です。
下線部を訳すと、

最後のログイン成功以降、39920回の失敗したログイン試行がありました。

という意味になります。(ちなみに連続ログイン試行を行っていたIPが2つあり、両方とも中国IPでした。)
rootユーザーはこのサーバーの全権限を持っています。このまま放置し、万が一ログインされてしまうと、このサーバーは攻撃者によって乗っ取られてしまいます
そして、自分が被害を被るだけでなく、新たな攻撃の踏み台にされてしまい、結果的に攻撃者に加担してしまうことになります。

このようなことを防ぐためにも、セキュリティ設定は必ず行いましょう。

エディタのお話

この記事・・・というかこのブログではCUIでサーバーのファイルを編集する機会が多くなります。
この世の中には様々なエディタ派閥がありますが、私はVimを前提に執筆します。
その他のエディタで編集される場合はコマンド等を適宜読み替えてください。

また、エディタの基本的な操作の解説は省略させていただきますのでご了承ください。

参考 Vim 基本操作まとめArchiva

 

セキュリティ設定

秘密鍵、公開鍵の生成(クライアント側)

標準のユーザー認証方法はパスワード認証ですが、より安全とされている「公開鍵認証」を使うための鍵を生成します。

参考 「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2)さくらのナレッジ

この作業では「公開鍵」と「秘密鍵」という2つの鍵を生成します。
「難しくてよくわからない!」という人は以下の2点を頭に入れておいておくと良いです。

鍵のポイント
  1. 「公開鍵」は他人に見られても大丈夫(というか見せる)
  2. 「秘密鍵」は絶対に他人に見られちゃダメ!!

他所の記事などではサーバー側で鍵の生成を行っている場合が多く見られますが、鍵の生成はサーバーではなく、クライアントのPCで行うことをおすすめします。
この後生成した鍵をサーバーとクライアントでやり取りするのですが、サーバーで鍵を生成した場合は、秘密鍵をクライアントに転送する必要があります。
先程挙げたとおり、秘密鍵は絶対に他人に見られてはいけません。
SSH経由などの場合、通信が暗号化されているとは言え、秘密鍵がインターネット上を流れるのはあまり望ましくありません。
気にしすぎかもしれませんが、念には念をというやつです。

Windowsの場合

Tera Termをダウンロードしてインストールします。(インストールができない環境の場合はポータブル版でも構いません)

起動すると上のようなウィンドウが立ち上がるので「キャンセル」をクリックします。

 

「設定」→「SSH鍵生成」をクリックします。

 

鍵の種類を選んで「生成」をクリックします。
鍵の種類は「ECDSA-256」以上を選べば問題ないでしょう。

 

「鍵を生成しました。」と表示され、パスフレーズの入力が可能になります。
コメントは任意で入力します。
パスフレーズを入力し、公開鍵・秘密鍵をそれぞれ保存します。
(パスフレーズなしでも保存できますが、設定することをおすすめします。)

 

このように鍵が生成されればOKです。
公開鍵の拡張子が.pubなので、Publisherのアイコンになっちゃってますが、中身はちゃんと鍵です。

 

Macの場合

上記の場合と同条件で生成するには、以下のコマンドを実行します。
{パスフレーズ}は自分の設定したいパスフレーズに置き換えてください。

ターミナル
$ ssh-keygen -t ecdsa -b 521 -C "[email protected]" -f ~/.ssh/id_ecdsa -P "{パスフレーズ}"

鍵が出力されているか確認します。
「.pub」がついている方が公開鍵、ついていないほうが秘密鍵になります。

ターミナル
$ ls ~/.ssh
id_ecdsa  id_ecdsa.pub

今後この鍵を用いてログインしますが、毎回パスフレーズの入力をするのが面倒という方は秘密鍵をキーチェーンに登録しておきましょう。

注意
ただし、Macが乗っ取られたとき、パスフレーズなしでサーバーにアクセスされてしまう点に注意しましょう。
ターミナル
$ ssh-add -K ~/.ssh/id_ecdsa

公開鍵の設置(サーバー側)

先程生成した鍵のうち、公開鍵をサーバーに登録します。

ConoHaコントロールパネルを開きます。

 

サーバーの「コンソール」をクリックします。

 

 

コンソールが立ち上がり、「〇〇〇(ホスト名) login: 」と表示されたら「root」と入力してEnter.
「Password:」と表示されたらrootユーザーのパスワードを入力してEnter.

補足
このとき、入力中の文字は画面に表示されません。

 

kusanagiユーザーの.sshディレクトリに鍵のファイルを作成します。

コンソール
# vim ~kusanagi/.ssh/id_ecdsa.pub

前節で生成した公開鍵をコピー

コンソールで「i」キーを入力して挿入モードにする

上部の「テキスト送信」をクリック

公開鍵をペースト

「送信」をクリック

公開鍵のコピー方法
Windowsの場合はメモ帳等で開く。
Macの場合はエディタで開くか、$ cat ~/.ssh/id_edcsa.pub

 

 

正しく入力されたら保存します。

 

SSHで使用する「認可された鍵リスト」に今作成した公開鍵を追記します。

コンソール
# cat ~kusanagi/.ssh/id_ecdsa.pub >> ~kusanagi/.ssh/authorized_keys

SSHの設定

SSHの設定ファイルを編集します。

コンソール
# vim /etc/ssh/sshd_config

コメントアウトを外し、SSHで使用するポートを指定します。

sshd_config
#Port 22
↓
Port 10022 //例
ポート番号選びのポイント
ウェルノウンポート番号(0~1023番)は避けましょう。

 

その他の設定を変更します。

sshd_config
#Protocol 2
↓
Protocol 2

#LoginGraceTime 2m
↓
LoginGraceTime 1m

PermitRootLogin yes
↓
PermitRootLogin no

#PubkeyAuthentication yes
↓
PubkeyAuthentication yes

#PermitEmptyPasswords no
↓
PermitEmptyPasswords no

この段階ではまだパスワード認証が有効です。

  • Protocol
    SSHのプロトコルバージョン
  • LoginGraceTime
    sshコマンドが実行されてから認証ができる制限時間
  • PermitRootLogin
    SSHから直接rootログインを許可するか
  • PubkeyAuthentication
    公開鍵認証を有効化するか
  • PermitEmptyPasswords
    空パスワードログインを許可するか

ファイルを保存し、コンフィグの書式が間違っていないかテストします。

コンソール
# sshd -t

何も表示が出ずにプロンプトに戻ってきたら書式ミスはありません。

 

SSHサーバーを再起動します。

コンソール
# systemctl restart sshd

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

ConoHaのコントロールパネルからでもポートのアクセスコントロールはできるのですが、設定できるポートが限られているため、
ConoHa側では全てのポートへのアクセスを許可し、サーバー側のファイアーウォールでアクセス制御を行うようにします。

SSHのポート番号を変更したので、firewalld用のサービス設定を置き換えます。

コンソール
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml
サービスの設定ファイル
通常は/usr/lib/firewalld/services/<サービス名>.xmlが読み込まれますが、
/etc/firewalld/services/<サービス名>.xmlが存在する場合は後者のファイルが読み込まれます。

設定ファイルを編集します。

コンソール
# vim /etc/firewalld/services/ssh.xml

ポート番号をsshd_configで設定したものと同じ番号にします。

ssh.xml
<port protocol="tcp" port="22"/>
↓
<port protocol="tcp" port="[ポート番号]"/> <!-- 変更したポート番号と同じ番号にする -->

firewalldを起動します。
また、サーバー起動時に自動起動するようにします。

コンソール
# systemctl start firewalld
# systemctl enable firewalld

WordPressを構築した際にアクセスできるよう、httpとhttpsサービスを恒久的に許可します。

コンソール
# firewall-cmd --add-service=http --permanent
# firewall-cmd --add-service=https --permanent
# firewall-cmd --reload

ConoHa側のポートを開ける

前回の記事でサーバーを追加した際は、接続許可ポートを「全て拒否」にしていました。
ここでようやく最低限のセキュリティ設定ができたので、ConoHa側のポートを「全て許可」にします。

ConoHaコントロールパネルを開きます。

 

「詳細設定」をクリックします。

 

「接続許可ポート」の「全て許可」にチェックを入れます。

 

ダイアログが表示されれば完了です。

接続テスト

これで公開鍵認証を用いたSSH接続の準備が整いました。
接続テストを行ってみましょう。

「IPアドレス」欄や、上部のホスト名の横などにIPアドレスが表示されています。
「IPアドレス」欄の右側にあるアイコンをクリックするとIPアドレスをコピーできます。

Windowsの場合

Tera Termを起動します。

 

「ホスト」にサーバーのIPアドレスを、「TCPポート#」に変更したポート番号を入力して「OK」をクリックします。

 

ログインウィンドウが表示されたら、
「RSA/DSA/ECDSA/ED25519鍵を使う」を選択

「秘密鍵」をクリックして秘密鍵を選択

ユーザー名と秘密鍵のパスフレーズを入力

「OK」をクリック。

注意
「パスフレーズ」は、kusanagiユーザーの「パスワード」ではなく、クライアントPC鍵を保存するときに入力した「パスフレーズ」なので注意!

 

ログインに成功したら公開鍵認証の設定は完了です。

Macの場合

sshコマンドで接続します。

ターミナル
$ ssh -p {ポート番号} [email protected]{IPアドレス}

IPアドレス:128.10.78.200
ポート番号:20022番

ターミナル
$ ssh -p 20022 [email protected]

キーチェーンへ秘密鍵を登録している場合、ユーザーとホストの入力のみでログインできればOK.

キーチェーンへ登録をしていない場合は

ターミナル
$ ssh -p {ポート番号} -i ~/.ssh/id_ecdsa [email protected]{IPアドレス}

を実行し、パスフレーズを入力してログインできれば成功です。

パスワード認証の無効化

公開鍵認証でログインできることが確認できたら、パスワード認証を無効化しましょう。

まずrootに昇格します。

シェル
$ su

rootユーザーのパスワードを入力すると、rootに昇格できます。

SSHの設定ファイルを編集します。

シェル
# vim /etc/ssh/sshd_config
sshd_config
PasswordAuthentication yes
↓
PasswordAuthentication no
補足
執筆日時点(Version 8.4.2-1)でPasswordAuthentication yesの行が2行記述されていました。
片方は不要なので行ごと削除して構いません。

ファイルを保存し、書式をテストします。

シェル
# sshd -t

SSHサーバーを再起動します。

シェル
# systemctl restart sshd

 

これでセキュリティ設定は完了です。

 

【次回】WordPress構築

お疲れ様でした。とりあえずこれで一段落です。

次回以降、いよいよWordPressの構築に入っていこうと思います。
このブログではCloudflareのCDNを使っているので、「ConoHa VPS × KUSANAGI × Cloudflare」って感じになります。

【ConoHa × KUSANAGI × Cloudflare】セキュアで高速なWordPressを作ろう

ただもうcardias.netのドメインは登録しちゃってるので、ドメインの登録方法は他のサイトを見ていただけたらと・・・。
もし新しいドメインを取得したらそのときは記事にするかもしれません。

コメントを残す

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