【ゼロから始める】VPSサーバー立ち上げから接続の初期設定まで

環境

CentOS 7
Windows 10(8以前なら、SSHクライアントがあれば問題なし)

※参考
サーバーを借りたところ:カゴヤのVPS

VPSサーバー契約~OS導入

この辺は管理会社の流れに乗って行けばよい

もらえるものの例

  • サーバーのIP(絶対もらえる)
  • ログインID(多分root)
  • ログインパスワード
  • 会員ポータルサイト用、またはサーバー管理画面用ログインID
  • 会員ポータルサイト用、またはサーバー管理画面用パスワード
  • SSH接続用ポート

※レンタル会社によって色々
カゴヤのVPS では、会員登録してからサーバー(インスタンス)を作るタイプで、作るときに公開鍵と秘密鍵を作らされる。

コマンドプロンプト(またはPowerShell)での操作

コマンドプロンプト、またはPowerShellを立ち上げる。
例えばコマンドプロンプトを立ち上げると

Microsoft Windows [Version 10.0.17134.648]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\(どこかのフォルダ名)> _

という画面が出る。PowerShellも同じような画面。
詳しい使い方はそれぞれおググり下さい。
以下、コマンドプロンプト(またはPowerShell)での操作を

> (コマンド)

と表記する。「大なり(>)」記号が頭についているときはコマンドプロンプト。

SSHでサーバーに接続できることを確認する

> ssh root@(IPアドレス)

あるいはSSHクライアントを使っても可。
初接続の時はfingerprintがなんちゃらかんちゃらと聞かれるのでyesと打つ。
次にログインパスワードを聞かれるのでサーバー会社からもらったパスワードを打つ。
もしSSH接続用ポート番号をもらっているなら

> ssh root@(IPアドレス) -p (ポート番号)

と打つと接続できる。
もしカゴヤのVPSのように事前に用意された秘密鍵が必要だったら

> ssh root@(IPアドレス) -i (秘密鍵までのフルパス)

と打つ。
無事ログインできると

[root@(サーバー名) ~]# _

みたいな表示が出る。(多分)
root権限でログインしている状態を表している。
これ以降、root権限でログインしている状態で何かコマンドを打つことを

# (コマンド)

と表記する。

OSのアップデート

rootユーザーで以下のコマンドを打つ。

# yum update

全自動で全ての更新チェックをしてくれます。

dream.jpはアップデートできなかった。
※どうも仕様っぽいので、そういう場合はレンタル会社を変えましょう

ユーザーの作成、パスワード設定

# useradd (ユーザー名)

で、ユーザーが作成される

# passwd (ユーザー名)
Changing password for user (ユーザー名).
New password: <画面にパスワードは表示されません>
Retype new password: <もう一度入力します>
passwd: all authentication tokens updated successfully.

でパスワード設定完了。強度がないと警告される。8文字以上推奨。

作ったユーザーでSSH接続できるかどうか

一旦ログアウトする。

# exit

exitコマンドでログアウトできる。
その後、以下を打つ。

> ssh (ユーザー名)@(IPアドレス)

先ほど作ったパスワードを求められるので入力。

※パスワード入力が出なかったらパスワードログインが初期設定の段階で不許可になっているので、後述のsshd_configを先に開いて、PasswordAuthenticationを一時的にyesに書き換えておく

無事ログインできたら

[ユーザー名@サーバー名 ~]$ _

みたいな表示になるはず。
これは管理者権限を持たないユーザーがログインしている状態を表す。
これ以降、この状態でコマンドを打つことを

$ (コマンド)

と表記する。
先頭の記号に注意して見分けてね。

公開鍵認証を使ったログイン設定と確認

まずはどうにかして公開鍵id_rsa.pubと秘密鍵id_rsaを作成。その後、id_rsa.pubのみをscpでサーバーのユーザーホームディレクトリにアップロード。

> scp (ローカルにあるid_rsa.pubのパス) (ユーザーID)@(サーバーのIP):~/

鍵の作り方、およびscpコマンドの詳しい使い方はおググり下さい。

そして、先ほど作ったユーザーでログインした後

$ cd                                    # 確実にホームディレクトリに移動  
$ mkdir .ssh                            # ディレクトリ作成  
$ chmod 700 .ssh                       # 自分以外のアクセスを禁止  
$ mv id_rsa.pub .ssh/authorized_keys    # 公開鍵リスト作成  
$ chmod 600 .ssh/authorized_keys        # 自分以外の読み書きを禁止

を順番に打つ。
※自分はこのときなぜかchmod 700 .sshがちゃんと実行されなかったみたいで、後からハマりました。

一般ユーザーでsudoコマンドが使えるようにする

$ su
Password: <rootのパスワードを入力>

これで、一般ユーザーからrootユーザーに変身できるので、

# usermod -G wheel (ユーザー名)         # ユーザを wheel グループに追加

を打つ。
次にwheelグループにsudo権限を与えるために設定ファイルを開く。

# visudo

これはviエディタを使って特殊な設定ファイルを開くことになる。
viエディタの使い方はおググり下さい。
※先にviエディタの使い方を調べないとハマるよ!

開いたら

## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

%wheelの前の#を削除する。
これでsudo権限が与えられる。
※最初から#が無い場合もある。

確認は一旦変身を解除して一般ユーザーに戻って

# exit
$

以下を打つ。

$ sudo id
[sudo] password for (ユーザー名): (一般ユーザーのパスワード)  
uid=0(root) gid=0(root) groups=0(root)

idコマンドは今ログイン中のユーザーのID、所属グループのIDなどが表示される。(らしい)
これをsudo idとするとrootのIDが表示される。

rootアカウントでのログインを不許可&パスワード認証を不許可など

まずはバックアップ用に/etc/ssh/sshd_configをどこかにコピー。
そして、以下のコマンドを打って、viエディタでsshd_configファイルを開く。

$ sudo vi /etc/ssh/sshd_config

その後、

#PermitRootLogin yes         # root でのログインを許可するかどうか
PermitRootLogin no           # yes を「no」(許可しない)に

#PasswordAuthentication yes  # パスワード認証を許可するかどうか
PasswordAuthentication no    # yes を「no」に

#ChallengeResponseAuthentication yes  # チャレンジレスポンス型の認証をするかどうか
ChallengeResponseAuthentication no   # yesを「no」に

#MaxStartups 10:30:100       # SSHでの同時接続数に関する設定
MaxStartups 5:80:8           # 5つの同時接続を許可、それを超えると80%の確率で拒否、8を超えると全部拒否

Port 22
Port ****         # ssh接続のときに使用するポートを追加(後述)

としてファイルを保存。
rootログイン不許可、パスワード認証不許可と、開いたついでに他の設定も色々と変更。
編集が終わったら保存終了して

$ sudo systemctl restart sshd

として、sshdを再起動。
(SELinuxの設定が終わるまでは再起動できないかも)
sshdがちゃんと起動しているかどうかの確認は

$ sudo systemctl status sshd

で、Active: active (running)が表示されているかどうかを確認。
また、変更したポートがちゃんと空いてるかどうかは以下の通り。

$ ssh root@localhost -p ****
The authenticity of host '[localhost]:**** ([::1]:****)' can't be established.
ECDSA key fingerprint is ****.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:****' (ECDSA) to the list of known hosts.
Permission denied (publickey).

rootではログインできない設定をしているのでログインできません。

また、新しくコマンドプロンプト画面を立ち上げて、再度一般ユーザーでSSH接続を試みてみる。
このとき、今まで開いていたウィンドウは絶対閉じてはいけない。

> ssh (ユーザー名)@(IPアドレス)

ちゃんと設定できていたら、パスワードも聞かれずに(あるいはrsa鍵使用のためのパスフレーズだけ聞かれて)ログインできる。
ログインできない場合は設定がちゃんとできていないので、もう一度上から手順を見直す。
ちなみに今まで開いていたウィンドウを閉じてしまい、かつ設定ミスからログインできなくなってしまった場合、そのサーバーには誰もSSHでログインできない。
こういう場合はサーバー会社のサーバー管理画面からサーバーのコンソールを開くとパスワードでログインできるようになっている(詳しくはサーバー会社に問い合わせること)ので、設定を一から見直す。
どうしてもダメならサーバーを初期化して一からやり直そう。まだ傷は浅いはず。

SSH接続のときのポートを追加(SELinuxの設定)

※以下はSSH接続用ポートの変更手順です。
dream.jpは最初からポートを変更しているので以下の手順は全て不要。

SELinuxの状態を確認するために以下のコマンドを打つ。

# getenforce

結果、Enforcingと出ればSELinuxが有効になっている。無ければ無しでファイアーウォールの設定に進もう。

SELinuxの設定を変更するためのsemanageというコマンドを使うためpolicycoreutils-pythonが入っているかどうかの確認。

$ rpm -q policycoreutils-python

このコマンドが何も返さなければインストールされていないので、以下のコマンドでインストールする。

# yum install policycoreutils-python

sshdの待ち受けポートとしてTCPの番号を許可

# semanage port -a -t ssh_port_t -p tcp ****

ちゃんとできているか確認するためには

# semanage port -l| grep ssh
ssh_port_t tcp ****, 22

この段階でsshdを再起動すれば、多分ちゃんと起動する。

# systemctl restart sshd

無事再起動されたかどうかは以下のコマンドで確認。

$ ps axuww | grep sshd

/usr/sbin/sshd -Dという行があれば大丈夫。
TCPのポート番号でちゃんと待ち受けてるかどうかの確認を念のため。

$ ss -t -l -n

SSH接続のときのポートを追加(firewalldの設定)

状態確認。

# systemctl status firewalld

active (runnning)があればfirewalldが動いている。
※なお、VPSによってはfirewalldが起動できないものもある。(open VZとかKVMとかのコンテナ型のVPSはkernelを共有してるからそうなるらしい。ここの受け売り。)
※起動できない場合はfirewalld関連の設定は全スルー
※open VZについてはここを参考。
※コンテナ型についてはここを参考。
※KVMについてはここを参考。

公開されているサービス(ポート)を確認。

# firewall-cmd --list-services --zone=public --permanent

これでsshが出てきたらOK。

次に設定ファイルssh.xmlを、ssh-alt.xmlという名前でコピーして、

# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-alt.xml

それを開いて編集。

# vi /etc/firewalld/services/ssh-alt.xml

具体的には

<port protocol="tcp" port="22"/> #これを削除
<port protocol="tcp" port="****"/> # これを追加

という変更。
そして、設定ファイルを読み込ませて、firewalldを再起動。

# firewall-cmd --permanent --add-service=ssh-alt
# firewall-cmd --reload

確認は

# firewall-cmd –list-all

これで、servicesのところにssh-altが追加されているはず。

それぞれの設定から既存のポートを取り除く

SELinuxから

# semanage port --delete --type ssh_port_t --proto tcp 22

できなければ無理にしなくてもよい。

確認は

# semanage port --list | grep ssh

次にfirewalld。

# firewall-cmd --permanent --remove-service=ssh
# firewall-cmd --reload

最後にsshd。

$ sudo vi /etc/ssh/sshd_config

してからPort 22を削除。
そして再びsshdを再起動。

# systemctl reload sshd

お疲れ様でした。

1 thought on “【ゼロから始める】VPSサーバー立ち上げから接続の初期設定まで

  1. ピンバック: 【ラズパイ】初期セキュリティについて | Takeshi's Blog

コメントを残す

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