オリジナルアプリをWebサーバーにデプロイするため、さくらのVPSを使用しました。
情報が散乱していて結構手こずったので、サーバー構築から最低限のセキュリティ対策までをまとめます。
※さくらのVPSを契約し、コントロールパネルに接続したところから始めています。
※Macでの手順です。Windowsの方法は記載していません。
OSインストール
①さくらのVPSコントロールパネルにログイン
②各種設定からOSインストールを選択
インストール設定前半
- 標準OSを選択
- CentOS7 x86_64を選択
- パスワードを設定
インストール設定後半
- スタートアップスクリプトを利用しないを選択
(利用すると任意でない言語などが初めにインストールされてしまう) - SSH設定は、とりあえずそのまま。(あとでポート番号を変更する。)
- 公開鍵を登録しないを選択(あとで簡単にできる)
- 設定内容を確認するを押して設定完了
③内容を確認してインストールを実行
これで、数分待てば、サーバーが起動します。
サーバーにMacから接続
①ターミナルを開く
②接続コマンドを入力
$ ssh root@xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxxの部分は、サーバーのIPアドレスorドメインを記入
例1(IPアドレス):$ ssh root@123.456.789.000
例2(ドメイン):$ ssh root@yahoo.co.jp
③パスワードを入力
OSインストールの時に設定したパスワードを入力する。
④接続完了
ターミナルに以下のように表示されたらサーバー接続完了
[root@os2-222-22222 ~]#
※2-222-22222の部分は、サーバーの番号なので変わります。
OSアップデート
①アップデートコマンドを入力
# yum update
いろいろ聞かれるが、全てy(yes)でOK! Complete! で終了
セキュリティ対策(最低限)
初期設定のままでは、セキュリティが甘いので、一般ユーザーでしかアクセスできないように設定していく。
- 一般ユーザーでしかアクセスできないようにする
(初期設定:rootユーザー) - 指定したPort番号でしかアクセスできないようにする
(初期設定:Port番号22) - SSH鍵認証でしかアクセスできないようにする
(初期設定:パスワード認証)
①一般ユーザーでしかアクセスできないようにする
一般ユーザー作成
# adduser vpsuser
ユーザーの名前(vpsuser)は、何でもいいです(覚えやすいものを)
一般ユーザーパスワードを設定する
# passwd vpsuser
New password: と2回聞かれるので、任意のパスワードを2回入力する
設定が反映されているか確認
これで一般ユーザーの作成は終わりですが、初めての方は本当にログインできるのか確かめながら進んだ方がいいです。(必要なければ飛ばしても構いません)
一般ユーザーログイン確認方法
①現在のrootログインからログアウトする
# exit
②一般ユーザー接続コマンドを入力
$ ssh vpsuser@xxx.xxx.xxx.xxx
③パスワードを聞かれるので入力
④ターミナルに以下のように表示されたらサーバー接続完了
[vpsuser@os2-222-22222 ~]$
root → vpsuser # → $ に変わっています!
⑤一般ユーザーログイン状態から、ルートユーザーにログイン
$ su –
パスワードを聞かれるのでrootユーザーのパスワードを入力!
⑥ターミナルに以下のように表示されたらrootユーザーログイン完了
[root@os2-222-22222 ~]#
rootユーザーではログインできないようにする
一般ユーザーではログインできるようになりました。
でもまだ、「rootユーザーでもログインできる状態」なので、設定を変更します。
sshd_configにアクセス
# vim /etc/ssh/sshd_config
インサートモード(書き込みモード)にする
vim の画面で i を押すと、– INSERT — と表示されます。
rootユーザーでのログインを禁止する
38行目あたりに、#PermitRootLogin yes とあるので、PermitRootLogin no に変更する。
#を消して、yesをnoに書き換える!
#PermitRootLogin yes
↓
PermitRootLogin no
INSERTモードを終了
escキーを押す
sshd_config の変更を保存
:wq(vimエディタ上書き保存のコマンド)を入力
:wq
再起動(変更を反映するため)
# systemctl restart sshd
これで、ルートユーザーではログインできなくなりました。
②指定したPort番号でしかアクセスできないようにする
rootユーザーではログインできないように設定しましたが、まだPort番号が初期設定のままです。
Port番号は簡単に言えば「サーバーへの入口」。
初期設定は22番と決まっているので、悪意のあるロボットは無作為にログインを試みます。
だから、変更した方が安全です。
firewalldの設定
firewalledとは、簡単に言えば「監視役」です。
Port番号を変更する前に、firewalldで新しいPort番号を許可しておかないと、Port番号を変更した際に、firewalldから「侵入者」として扱われてしまって、接続を拒否されるので先に設定しておきます。
firewalldの動作確認
# firewall-cmd –state
このコマンドで、runningが出たら、稼働中、not runningが出たら稼働していないので、起動させます。
firewalldを起動
# systemctl start fiwrwalld
新しいPort番号の開放
# firewall-cmd –zone=public –add-port=12345/tcp –permanent
※12345の部分が、新しいポート番号です。さくらのVPSが指定している1024番〜32767番の間で設定しましょう。
設定を保存(リロード)
# firewall-cmd –reload
設定の確認
# firewall-cmd –list-all
このコマンドで表示される内容に、
ports: 12345/tcp
と書かれていれば、Port番号 12345 は開放されているので、新しくPort番号を設定しても接続拒否されることがなくなります。
※以上で終わりますが、firewalldはこれからもいろいろ設定していくことになると思うので、コチラの記事などで概要を知っていおくといいです。
sshd_configにアクセス
firewalldで開放されたPort番号を、sshd設定ファイルでも変更していきます。
# vim /etc/ssh/sshd_config
インサートモード(書き込みモード)にする
vim の画面で i を押すと、– INSERT — と表示されます。
ポート番号を変更する
17行目あたりに、Port 22 という設定があるので、これをfirewalldで開放したPort番号に変える。
Port 22
↓
Port 12345
※ポート番号については、コチラの記事で学習すると良いです。
INSERTモードを終了
escキーを押す
sshc_config の変更を保存
:wq(vimエディタ上書き保存のコマンド)を入力
:wq
再起動(変更を反映するため)
# systemctl restart sshd
これで、Port番号22ではログインできなくなりました。
でもまだ、さくらのVPSでは、独自の接続ポート許可設定があるので変更していきます。
※現在ターミナルでログインしている状態なので、ログアウトせずに接続したままにしておくと安心です。
さくらのVPSコンソール画面へ
Webブラウザから、さくらのVPSコンソールにログインします。
そして、パケットフィルタをクリックしましょう。
パケットフィルタ設定へをクリック
開放ポート番号の設定
- 開放ポートを追加をクリック
- カスタムポート番号を記入
フィルタの用途:カスタム
プロコトル:TCP
ポート番号:12345(sshd_configで設定した番号) - ポート番号22は削除(任意ですが、その方が安全)
設定を保存
これで、Port番号の変更も完了です。
先ほどからログインしているターミナルはそのままにして、新しいターミナルで接続してみましょう。
設定が反映されているか確認
新しいターミナルを立ち上げます。(新規ウインドウ)
新規Port番号での接続方法
①一般ユーザー接続コマンドに、Port番号指定オプションを加えて入力
$ ssh vpsuser@xxx.xxx.xxx.xxx -p 12345
②パスワードを聞かれるので入力
③ターミナルに以下のように表示されたらサーバー接続完了
[vpsuser@os2-222-22222 ~]$
これで接続ができたら、
①初期設定ユーザー root
②初期設定Port 22
の2つが変更されているので、無作為なログインが難しくなっています。
③SSH鍵認証でしかアクセスできないようにする
しかし、これでもまだ安全ではありません。
ユーザー名とパスワードがバレたら乗っ取られてしまいます。
そこで、より強固な秘密鍵・公開鍵の設定を行います。
Macターミナルで鍵を作成する
サーバーには接続していない状態のターミナルを開いて、鍵作成コマンドを入力
$ ssh-keygen
保存先を聞かれるので、そのままエンターキー
Generating public/private rsa key pair. Enter file in which to save the key (/home/username/.ssh/id_rsa):
パスワードを聞かれるので入力してエンターキー
Enter passphrase (empty for no passphrase):
※2回聞かれます。パスワードを設定したくない人は、何も入力せずにエンターキーを押す。
これで、ホームの.sshというフォルダにkeyが作成されました。
2つの鍵が作成されているかfinderで確認
finderのホームで、shift + command + . キーを押すと、隠しフォルダが薄く表示されます。
そこに、.ssh フォルダがあるので中身を確認してみましょう。
- id_rsa(秘密鍵 ※絶対に公開しないもの)
- id_rsa.pub (公開鍵 サーバー側に設置)
2つのファイルがあれば成功。
自分が判別しやすい名称に変更(しなくてもよい)
- id_rsa → id_rsa_〇〇
(何でもいいけど、id_rsaは残した方が良いかも) - id_rsa.pub → 〇〇.pub
(.pubは残す)
公開鍵をサーバーに転送
他人に見られても問題がない公開鍵をサーバーに保存します。
$ ssh-copy-id vpsuser@xxx.xxx.xxx.xxx -p 12345
Macでは、OpenSSHパッケージがあるので、上記のコマンドでサーバーに転送・保存が完了しています。
-p 12345 でポート番号を指定しています!
サーバーに接続
公開鍵は、転送したので鍵のパーミッション(権限)を変更するためにログインします。
$ ssh vpsuser@xxx.xxx.xxx.xxx -p 12345
まだ、パスワードを聞かれると思うので、入力してください。
※一般ユーザーのパスワードです!秘密鍵のパスワードじゃありませんよ!
公開鍵を確認
先ほど転送した鍵が、きちんと登録させれているか確認しましょう。
$ cat ~/.ssh/authorized_keys
このコマンドを実行して、ssh-rsaから始まるランダムな文字列がたくさん表示されたら登録されています。
公開鍵の権限を設定
次に、転送した鍵ファイルの権限を設定します。
①ホームディレクトリの権限を設定
(自分以外の人が「書き込めない」)
$ chmod go-w ~
②.sshディレクトリの権限を設定
(自分以外の人が「書き込めない」)
$ chmod go-w ~/.ssh
③authorized_keysの権限を設定
(自分以外の人が「書き込めない」)
$ chmod go-w ~/.ssh/authorized_keys
パーミッションの設定は以上です。
参考記事
https://qiita.com/StoneDot/items/a38a35baf50e2cba2b67
http://www.damp.tottori-u.ac.jp/~ooshida/unix/chmod.html
パスワード認証ができないようにする
ssh認証の準備は終わりました。最後に、これまで行ってきたパスワード認証でのログインができないように設定していきます。
rootユーザにログインする
$ su –
パスワードを聞かれるので、rootユーザーのパスワードを入力します。
sshd_config設定を変更する
# vim /etc/ssh/sshd_config
i キーを押して、–INSERT– モードにする。
パスワード認証を不可にする
42行目あたり、#PubkeyAuthentication yes の # を消す
#PubkeyAuthentication yes
↓
PubkeyAuthentication yes
65行目あたり、PasswordAuthentication yes を PasswordAuthentication no に変える
PasswordAuthentication yes
↓
PasswordAuthentication no
※2行上に、#PasswordAuthentication yes があるが、まどわされないように。
変更を保存
esc キーで –INSERT– モードを終了。
:wq で上書き保存
:wq
再起動で設定内容を反映
# systemctl restart sshd
以上で、ssh接続の設定は終了です。
現在のログイン状態はそのままにして、新しいターミナルで接続してみましょう!
設定が反映されているか確認
新しいターミナルを立ち上げます。(新規ウインドウ)
ssh鍵認証接続方法
①一般ユーザー接続コマンドに、ssh鍵認証指定オプションと、Port番号指定オプションを追加する
$ ssh -i ~/.ssh/id_rsa vpsuser@xxx.xxx.xxx.xxx -p 12345
②パスワードを聞かれずに、ターミナルに以下の表示が出たらサーバー接続完了
[vpsuser@os2-222-22222 ~]$
※ちょっとコマンドがごちゃごちゃしているので、半角スペースごとに説明します
ssh接続コマンド
ssh
鍵認証ログインオプション
-i
秘密鍵までのパス
~/.ssh/id_rsa
ユーザーと接続先
vpsuser@xxx.xxx.xxx.xxx
ポート番号指定オプション
-p
ポート番号
12345
これで接続ができたら、
①初期設定ユーザー root
②初期設定Port 22
③初期設定パスワード認証ログイン
の3つが変更されているので、無作為なログインがかなり難しくなっています。
以上で、最低限のセキュリティ設定は終わりです。
お疲れ様でした!
↓おまけ↓
SSH接続を簡単にする方法
接続するたびに、
$ ssh -i ~/.ssh/id_rsa vpsuser@xxx.xxx.xxx.xxx -p 12345
と入力するのはめんどくさいので!簡単にします。
ターミナルでconfigファイルを開く
$ vi cd ~/.ssh/config
insertモードにして設定を記入
- iを押してINSERTモードにする
- 設定を書き込む
HOST 任意の名前
HostName IPアドレスorドメイン
User 一般ユーザー名
IdentityFile 秘密鍵ファイルパス
Port 設定したポート番号
例えば以下のような感じになる
HOST sakuvps
HostName xxx.xxx.xxx.xxx
User vpsuser
IdentityFile ~/.ssh/id_rsa
Port 12345
※入れ子になっているので注意!
設定を保存して終了
- escキーでINSERTモードを終了
- :wqコマンドで上書き保存
次回からは、簡単にssh接続できる
ssh 設定したHOSTの名前を入力すればOK!
$ ssh sakuvps
これだけ!簡単!以上!
参考にした記事
ネコでもわかる!さくらのVPS講座 ~第二回「サーバーをさわってみよう!」
Firewalld編~サーバーへ不要な通信はさせない~ – Linuxセキュリティ入門(2)
公開鍵認証編~サーバーへの接続を制限しよう~ – Linuxセキュリティ入門(3)
公開鍵認証方式でのssh接続・設定・トラブルシューティング法