vpsセキュリティ設定で絶対にやるべき6つのこと【乗っ取り注意】

10月 25, 2018VPS

vpsセキュリティ設定で絶対にやるべきこと
VPS(仮想サーバー)はロリポップやエックスサーバーのような共用レンタルサーバーと違って、サーバー(仮想)の全てを操作できる権限(root権限)があります。

この仕様により、様々なことを出来るのがVPSの魅力です。しかし、その一方でサーバー(仮想)の全てを操作できる権限を持っているので、悪意あるユーザーにVPSへ不正アクセスを許すとサーバーの操作権限を乗っ取られてしまい知らない間に悪事へ加担されられたりします。

また、悪意あるユーザーからVPSへDdoS攻撃を受けることで、みんなで共通して使うネットワーク回線を混雑させて他VPS利用ユーザーに迷惑をかけてしまうこともあります。

Right Caption

さばくん

乗っ取られたVPSが悪事に使われたり、DdoS攻撃を受けたりして、他ユーザーに迷惑かけたりするとVPSサービス提供者から強制退会などの処分が待ってるよ。
Left Caption

くろねこくん

なんで、俺がやったわけじゃないのに責任を取らなきゃならないんだよ。
Right Caption

さばくん

たしかに、自分がやってないのに責任を取らされるのは憤りを感じるけど、それが全ての操作権限を持つことに対する責任でもあるよ。

そこで、今回は自分だけのVPSを作ったら「絶対にやるべきVPSセキュリティ設定6つのこと」を紹介しますので今すぐ実践してください。そうすれば、セキュリティが強固なものとなるので、悪意あるユーザーに不正アクセスを許して乗っ取られることもなくなりますよ。

vpsセキュリティ設定6つの概要紹介

まず、今回紹介する「絶対にやるべきVPSセキュリティ設定6つのこと」を紹介します。

VPSセキュリティ設定6つの概要紹介

  1. VPSのOSをアップデートする
  2. rootユーザーでのログインを禁止する
  3. パスワードでログインできなくする(鍵認証)
  4. ポートを閉じて(変更して)侵入経路をふさぐ
  5. ファイアウォールを設定する
  6. denyhostsを導入して不正アクセスを試みるユーザーをブロックする

自分の端末からVPSへ接続できるようにする (事前準備)

※TeraTermやPuTTYなどのSSH接続をすでに知っている方法を知っている人は、この項目は飛ばしてください。

自分の端末からVPSへリモート接続
セキュリティを設定するためのVPS操作方法についてですが、まず1つにConoha VPSやさくらVPSの専用画面から直接VPSを操作できるコンソール機能があります。

しかし、そんな面倒くさいことをしなくても。「Tera Term」「PuTTY」などのターミナルソフトを自分の端末にインストールしておけば、そのツールを使って即VPSへ接続して自分の端末からリモートでVPSを操作できます。
※「Tera Term」や「PuTTY」は無料で利用できます。

Right Caption

さばくん

ちなみに、「Tera Term」や「PuTTY」などを使って自分の端末からVPSへ接続することを「SSH接続」というんだ。
Right Caption

さばくん

「SSH接続」はVPSに接続した操作するための機能としてよく使われるから覚えておくといいよ。

Tera Termによる自分の端末からVPSへのSSH接続手順

今回は僕がよく使っているTera Termで作ったVPSへ自分の端末からアクセスする方法を紹介します。

Tera Termの公式サイトからインストールファイルをダウンロードします。

Right Caption

さばくん

Tera Term v4.100の方をダウンロードしてね。

ダウンロードしたTera Termのインストールファイルから、Tera Termをインストールします。

Tera Termをインストールしたら、Tera Termを起動します。

TeraTerm接続手順1
上記図のような画面表示されたら、ホストにVPSのIP(v4)アドレスを入力して「OK」ボタンをクリックします。

TeraTerm接続手順2
SSH認証画面が表示されたら各項目を以下のように入力して「OK」ボタンをクリックします。

①:ユーザー名
VPSのOSユーザー名を入力します。
※VPSを作ったばかりであればrootと入力してください。

②:パスワード
入力したユーザーに対するパスワードを入力してください。
※rootユーザーのパスワードを入力してください。

TeraTerm接続手順3
上記図のような画面が表示されれば、Tera TermによるVPSへのSSH接続は成功です。

VPSのOSをアップデートする

ubuntuとcentOSのアップデート
いよいよ本題のVPSのセキュリティ設定について話していきましょう。

まず、始めにやってほしいのは、VPS作成したときの細かいOSバージョンまでが最新とは限りません。ですので、OSを最新バージョンしましょう。

OSを最新バージョンにするには以下のコマンドを入力してください。
※OSのアップデートに数分かかり、アップデート作業中はコマンドがずらずらと勝手に流れますが気にしないでください。

#apt-get update
#apt-get upgrade

上記コマンドの途中と表示されたら、yを入力してEnterキーを押してください。これはYESの意味になります。
Do you want to continue? [Y/n]

rootユーザーでのVPSへのログインを禁止する

rootユーザーでのVPSへのログインを禁止する
自分の端末などからVPSへroot(管理者)ユーザーによるsshアクセスを許可していると、もしパスワードを解析されてrootユーザーによる不正sshアクセスを成功された場合。そのVPSの操作権限を全て乗っ取られてしまうことになります。

しかし、rootユーザーによるVPSへのsshアクセスは一切禁止にしておき、重要な操作権限は制限したユーザーを作り、そのユーザーのみVPSへアクセスする許可を与えておけば。最悪VPSへ不正アクセスされても重要な操作ができる権限は乗っ取られることを防ぐことができます。

新しいユーザーを作成する

rootユーザーでのログインを禁止して新たなVPSへのアクセス用ユーザーを作るには、以下のコマンドを入力してください。

#useradd USER_NAME
#useradd USER_NAME
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
・USER_NAME:任意のユーザー名を半角英数字で入力してください。
・Enter new UNIX password:任意のパスワードを入力してください。
・Retype new UNIX password:「Enter new UNIX password」と同じパスワードを入力してください。

作ったユーザーにroot権限でしかコマンドを実行できるようにするsuto権限を付与する

#usermod -aG sudo USER_NAME
このコマンドで作ったユーザーにsudo付きの命令なら、root権限でしか実行できないコマンドも実行させることができます。

例えば、以下のOSアップデートコマンドは通常rootユーザーでしかできませんが、sudoを付ければrootユーザー以外でも可能となります。
$sudo apt-get update
$sudo apt-get upgrade
ただし、sudoコマンド実行時にrootユーザーのパスワードを入力する必要があるため、rootユーザーのパスワードを知らないとsudoは使えません。

作ったユーザーでVPSにsshアクセスできるか確認する

作った新しいユーザーで「TeraTerm」、「PuTTY」などを使い。rootユーザーでログインするときと同じ手順で自分の端末からVPSへssh接続できるか確認しておいてください。

rootユーザーでvpsにssh接続できないようにする

作ったユーザーで、VPSにssh接続できることは確認できたので、次はrootユーザーでssh接続できないようにします。

$sudo vim /etc/ssh/sshd_config

vimコマンドで「/etc/ssh/sshd_config」を編集できるようになったら、以下項目を変更します。
#PermitRootLogin yes
PermitRootLogin no
※vimコマンドによる編集の仕方は以下の記事を参考にしてください。

vi,vim これだけは知っておけコマンドモード操作 10選
– 株式会社ソニックムーブのスタッフブログより参照

そして、以下コマンドを実行することで先ほど編集した設定が反映されます。
$sudo systemctl restart sshd

これで、自分の端末からTeraTermなどを使い、VPSへrootユーザーでのssh接続はできなくなっているので実際に確認してみてください。
VPSへrootユーザーでのssh接続ができない

作ったユーザーでVPSにアクセスした後でrootユーザーになるには

Left Caption

くろねこくん

作ったユーザーでしかVPSへssh接続できないとしたら、rootユーザーで操作したい場合はどうすればいいんだ?
Right Caption

さばくん

その場合は作ったユーザーでVPSにアクセスしてから、rootユーザーへ操作ユーザーを変更すればいいだけの話だよ。

$su
Password:
Password:rootユーザーのパスワードを入力してください。

Right Caption

さばくん

このコマンドで他ユーザーで操作していても、rootユーザーになれるよ。
Left Caption

くろねこくん

なるほど、作ったユーザーでVPSにssh接続した後でもrootユーザーになれるってわけか。
Right Caption

さばくん

そういうことだよ。

パスワードでログインできなくする(鍵認証)

鍵
これまでのセキュリティ設定により、rootユーザーでのssh接続は禁止しました。

しかし、VPSへ接続するときにパスワードを入力しての認証形式ですと、パスワードさえ分かれば誰でも侵入できることには変わりがありません。

ですので、SSH接続するときにパスワードを入力するのではなく、自分しか持っていない鍵ファイルを作り、その鍵ファイルを持って認証する形式へと設定変更しましょう。

パスワードでログインできなくする(鍵認証) 手順

作業は全てrootユーザーで行ってください。

#cd /
#mkdir .ssh
#chmod 700 .ssh
#cd ~/.ssh
#ssh-keygen -t rsa

それぞれ表示されたときはEnterキーをおしてください。
これで公開鍵と公開鍵を認証させる秘密鍵が作成されます。
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

秘密鍵を配置します
#mv id_rsa.pub .ssh/authorized_keys
#chmod 600 .ssh/authorized_keys

公開鍵については「Tera Term」や「Putty」のファイル転送機能を使って自分の端末にダウンロードしてください。

これで、Tera Term」や「Putty」で秘密鍵を使って接続できますので、接続できるか確認してください。
TeraTerm公開鍵での接続

公開鍵で接続できることを確認したら、最後にパスワード入力によるSSH接続を禁止します。
$sudo vim /etc/ssh/sshd_config
#PasswordAuthentication yes
PasswordAuthentication no

パスワード入力によるSSH接続を禁止の設定を反映
$sudo systemctl restart sshd

これで、パスワード入力形式によるSSH接続はできなくなります。

ポートを閉じて(変更して)侵入経路をふさぐ

ネットワークポート
ポートという言葉をご存知でしょうか?

ポートとは
ネットワークからパソコンさんにお邪魔するときに通るドアのこと。
例えば、特定の端末・サーバー(VPS)などに自分の端末からssh接続するためには対象のIPアドレス・ユーザ・パスワード、そしてポートを知る必要があります。

VPSで作ったsshのポートは「22番」と固定で設定されていますが、当然これは不正侵入を試みる悪意あるユーザーも知っています。ですので、このsshポート番号を変更しておけば、さらに自分のVPSへ不正侵入されるリスクを減らすことができます。

ssh接続のポートを変更する手順

以下記載のコマンドを入力すればOKです。

$sudo vim /etc/ssh/sshd_config

vimコマンドで「/etc/ssh/sshd_config」を編集できるようになったら、以下項目を変更します。
#Port 22
Port [任意の番号]

Right Caption

さばくん

[任意の番号]には10001~65535の番号の間で入力するのがおすすめだよ。

そして、以下コマンドを実行することで先ほど編集した設定が反映されます。
$sudo systemctl restart sshd

これで、自分の端末からTeraTermなどでVPSへ接続するとき22番ポートでの接続はできなくなってるので確認してください。
VPSで22番ポートでのssh接続ができない

不要なポートを閉じる手順

ssh接続に使うポートを変更したら、次は使わないポートは閉じておくことで不正侵入を許すリスクを下げることができます。

ただ、SSHで使うポート変更する手順とは別の手順でやる必要があるので、ここではその手順を紹介します。

不要なポートについては、VPSでやりたことによっても変わります。今回はWebサーバー(サイト・ブログ)の運用する前提を例にssh・http・ftp・httpsの接続のみを許可するように変更してみます。

不要なポートを閉じるためツール「ufw」を有効化する
$sudo ufw enable

このような文字列が出たらyキーを押した後、Enterキーを押してください
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

全てのポートを閉じる設定をする
$sudo ufw default deny

必要なポートだけは例外として通信を許可させる設定をする
$sudo ufw allow https/tcp
$sudo ufw allow http/tcp
$sudo ufw allow ftp
$sudo ufw allow [ssh接続で新たに設定したポート番号]

必要なポートだけは例外として通信を許可させる設定が正しくできているか確認します
$sudo ufw status verbose

結果がこのように表示されていればOKです。
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
443/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
21/tcp ALLOW IN Anywhere
[ssh接続で新たに設定したポート番号] ALLOW IN Anywhere
443/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
21/tcp (v6) ALLOW IN Anywhere (v6)
[ssh接続で新たに設定したポート番号] (v6) ALLOW IN Anywhere (v6)

最後に今までやった設定を反映させます。
$sudo ufw reload

このように表示されれば設定は完了です。
Firewall reloaded

Right Caption

さばくん

ちなみに、他によく使うポートとしては、メールの送受信に使う「SMTP」・「POP」・「IMAP」やSFTP接続に使う「SFTP」などがあるよ。

fail2banを導入して不正アクセスを試みるユーザーをブロックする

fail2ban
fail2banは同じIPアドレスでVPSへSSH接続を連続で失敗すると、しばらくの間そのIPアドレスからのアクセスを禁止させるツールです。

fail2banを導入することで、自動攻撃ツールによる何千回にも渡るSSH接続を試行しての突破(不正侵入)、大量のアクセスを意図的に送りこむことで無理やりサーバー機能を停止に追い込むDDoS攻撃の対策となります。

Right Caption

さばくん

大量アクセスが起因する攻撃関連にfail2banは効果を発揮するよ。

ただし、fail2ban導入後は自分も連続で失敗するとしばらくの間接続を禁止されますので、その点だけは注意してください。

※fail2banの初期設定では、10分間にUbuntuでは5回、CentOSでは6回SSH接続失敗すると、そのIPアドレスでの接続を10分間禁止するよう設定されています。

fail2banを導入手順

以下記載のコマンドを入力すればOKです。

fail2banを導入する
$sudo apt-get install fail2ban

fail2banを起動する
$sudo /etc/init.d/fail2ban start

この文字列が出ていればfail2banは起動成功です。
[ ok ] Starting fail2ban (via systemctl): fail2ban.service.

これでfail2banは起動して、10分間に5回(CentOsは6回)連続で失敗すると10分間接続禁止となります。

まとめ

せっかく時間をかけてVPSでやりたいことを実現できた矢先、悪意あるユーザーから不正侵入を受けてVPSを乗っ取られたり、DDoS攻撃を受けたことで公式からVPSを強制停止されたり、サービスからの強制退会となってしまうことほど勿体ないことはありません。

しかし、今回紹介した6つのセキュリティ設定をやっておけば。悪意ユーザーからの不正侵入やDDoS攻撃による被害確率を100%とまではいきませんが、かなり下げることができます。(被害に合う確率は数%程度)

Left Caption

くろねこくん

しかし、来るか分からない悪意あるユーザーからの対策としてセキュリティ設定するのは面倒くさいな。
Right Caption

さばくん

そう思って、セキュリティ設定をしていないVPSが攻撃を受けて、最終的に自分にも被害が来るから慢心は絶対にダメだよ。
Right Caption

さばくん

それに、自分が作ったVPSを守ることも、VPSサービスを使うものとしての責任だからやっておこうね。
Left Caption

くろねこくん

わかったよ。俺も自分で作ったVPSを悪意あるユーザーのせいで無茶苦茶にされるのは勘弁だから、セキュリティ設定はやっておくぜ。