Linuxを日常的に使う実験ブログ

VPSをレンタルした際に行うSSHの設定まとめ

 2018-12-12

 Linux全般

こんにちは。今回のテーマは「VPSをレンタルした際に行うSSH設定」です。今回の記事はこれから個人でVPSを借りてサーバーを構築しようと考えている方を想定して書きました。既にサーバーを運用している方には特に目新しい情報はないだろうと思います。 なんとなくVPS借りてサーバーの勉強しようと思ったけど、気がついたらroot権限乗っ取られてやりたい放題やられてた…なんてことが無いように最低限の設定について触れたいと思います。企業では踏み台サーバーによる安全化対策等も当然検討されると思いますが、そこには触れず、今回はあくまでお金がない個人向けということでご理解いただければと思います。 [adsense02] 【目次】 rootでのログインを無効化 認証鍵によるログインへ変更 rootパスワードの無効化 sshポートの変更

rootでのログインを無効化

セキュリティの観点からroot権限でパスワードでログイン出来る状態は好ましくないです。もし、このような状態でサーバーを運用している場合は(特殊な事情を除き)すぐに対応すべきです。権限が制限されたログイン用のアカウントを作成してそのアカウントのみでログインするように変更することでよりセキュアな状態になります。

sshdの設定修正

VPSにログインした状態で以下のコマンドでsshの設定ファイルを開きます。ローカル側の設定ではないので要注意です。

$ sudo vim /etc/ssh/sshd_config

以下の様に修正します。+が追加、-が削除です。

- PermitRootLogin yes

  • PermitRootLogin no

sshdの再起動

サービス管理の方法によってコマンドが異なります。 CentOS 6の場合

$ sudo service sshd restart

CentOS7, Ubuntu, Debian9等のSystemd導入の場合

$ sudo systemctl restart sshd

ログイン方式を公開鍵認証のみへ変更

そもそもパスワードによるログインを許可せず、公開鍵認証によってのみログインする方式が安全です。公開鍵を予め登録したユーザーしかログインできないという不便さはありますが、パスワード式のログインに比べて安全度が高まります。

公開鍵の作成

公開鍵の作成はローカル側のマシンで行います。 以下は公開鍵の作成例です。

$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/[ユーザー名]/.ssh/id_rsa): エンターキー押下 Created directory ‘/home/[ユーザー名]/.ssh’. ~/.ssh がない場合のみ表示される(dir作成される) Enter passphrase (empty for no passphrase): 何も入力せずエンター押下 Enter same passphrase again: 何も押さずエンター押下 Your identification has been saved in /home/[ユーザー名]/.ssh/id_rsa. Your public key has been saved in /home/[ユーザー名]/.ssh/id_rsa.pub.

今回は認証鍵自体にはパスワードを設定しませんでしたが、秘密鍵が盗難にあった場合にも安全性を担保したいと言う場合には「Enter passphrase」の部分でパスワードを設定して下さい。

公開鍵をサーバー側に設置

上記の鍵作成で秘密鍵(id_rsa)と公開鍵(id_rsa.pub)のセットが作成されました。秘密鍵は決して外部に出ないよう注意して下さい。公開鍵のみをscpコマンドでサーバー側に送りましょう。

$ scp /.ssh/id_rsa.pub [サーバーログインユーザー]@[サーバーのIP]:/

これでサーバーにログインするユーザーのホームディレクトリに公開鍵が送付されました。ではログインして鍵を設定していきましょう。

$ ssh [サーバーログインユーザー]@[サーバーのIP] $ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys $ rm ~/id_rsa.pub

sshdの設定と再起動

$ sudo vim /etc/ssh/sshd_config

以下の様になるように修正します。

PasswordAuthentication no PubkeyAuthentication yes

sshdの再起動はrootでのログインを無効化で触れた通りです。一点注意ですが、sshd再起動後はパスワードログインができなくなり、秘密鍵と公開鍵の認証によってしかログインできなくなります。そのため、ログインするメンバーが増える場合にはその都度公開鍵の登録が必要になる等の手間が生じる点を考慮しておいて下さい。

~/.ssh/configの設定

ログインの度に秘密鍵を指定してログインするのは面倒なのでconfigを設定してしまいましょう。

$ vim ~/.ssh/config

設定例

Host vps HostName サーバーのIP User サーバー側のユーザー名 port サーバー側のsshのポート番号 IdentityFile ~/.ssh/id_rsa

こうしておけば以下のようなコマンドでログイン出来ます。(今回は「vps」というHost名をつけています。)

$ ssh vps

rootパスワードの無効化

万が一ログインされた場合、rootパスワードを無効化しておくと悪意あるユーザーがroot権限になることを防ぐことが出来ます。(sudo権限のあるユーザーアカウントを乗っ取られると無意味ですが・・・)ログイン用アカウントでログインされても何も悪事を働けない状態を作っておくことが重要です。 sudo権限のあるユーザーで以下を実行します。

$ sudo passwd -l root

ちなみにrootパスワードのロックを解除する場合は以下コマンドです。

$ sudo passwd -u root

sshポートの変更

ポート番号の変更については意見の分かれる所だとは思います。ポート変更してもポートスキャンされると割り出されるので、もっと他のセキュリティに気を配るべきという意見もあります。筆者はポート変更の手間ぐらいで無用な攻撃の機会が減るのであれば変更しても良いのでは?と考えてポート番号はデフォルトの22番から変更しています。22番で運用していた時に比べて格段に攻撃の痕跡(ログ)が減りました。攻撃者はrootでのログインを狙うものが圧倒的ですが、test,guest,postgres等の想定される様々なユーザー名でログインを試みていて、正直見ていて気持ちの良いものではありません。これは多くのサーバー運用者が経験していることだと思います。 portの変更についてはUbuntu 18.04TLSのSSHポートを変更するを参考になれば幸いです。

最後に

非常に初歩的な内容でしたが、最低限このくらいは対策しないと危ないのでは?という内容で書きました。多くのサーバーでは上記以外にもログイン失敗毎に時間制限を設ける等の合わせ技で対応が取られていると思います。ただ、建物のセキュリティと同じでネットワーク上のセキュリティも「完璧」というものは存在しないと考えています。自宅の玄関にピッキング対策キーと指紋、虹彩の生体認証キーをそれぞれ設置していいる方が滅多にいないのと同様に現実には「コストに見合った出来る範囲の」セキュリティで対応せざるを得ません。今回紹介した対応はどれも手軽に出来るセキュリティだと思いますで、もし目新しい情報があった方は参考にしていただければ幸いです。 【関連記事】 Ubuntu 18.04TLSのSSHポートを変更する [adsense]