AdobeStock_290791443.jpg
2020.01.02

サーバーのSSH接続でパスワード認証を禁止して鍵認証でのみアクセス可能にする【ConoHa VPS】

前回「ConoHaのVPSサーバーでKUSANAGIを使ったWordPress環境を構築する。」という記事を書きましたが、その続きでSSHを使ったサーバーへのアクセスを鍵ファイルを使った認証に限定して、セキュアなアクセスを確立する方法を記事にしてみたいと思います。

前準備

まずパスワードログインを禁止する前にすでに発行されているユーザーの認証鍵をローカルに落としておきます。

KUSANAGIでWordPressやDrupalなどのWEBサイトのプロビジョニングをした時に「kusanagi」というユーザーがそのファイルの所有権を持っています。

なのでSFTPなどでサーバー上のWEBサイトのファイルを変更したりするのに「kusanagi」というユーザーを使います。

KUSANAGIの設定でユーザー「kusanagi」の鍵ファイルを生成している場合kusanagi.pemというファイルを使ってSFTP接続することになります。

root権限でサーバーにSFTP接続してkusanagiの鍵ファイルをダウンロードしておく

サーバーを契約した時に発行されたroot権限を使ってfilezillaなどのftpソフトでサーバーにアクセスします。

rootでsftp接続したらrootディレクトリにあるkusanagi.pemをローカルに落としておきます。

次にユーザーをkusanagiに変えて認証方法を鍵ファイルにし、先ほどローカルに落としておいた鍵ファイル「kusanagi.pem」のパスを通します。

問題なく接続できることを確認したらftpソフトでの作業は終わりです。

次にターミナルを起動してサーバーにSSH接続して作業用のユーザー発行と鍵の生成に移ります。

作業用のユーザーを作る

それではSSHでサーバーに接続し作業用のユーザーを作っていきます。
ここでは仮に「mattsun」としておきます。

作業用ユーザー「mattsun」を追加

# useradd mattsun

「mattsun」のパスワードを設定

# passwd mattsun

「mattsun」をwheelグループに入れる

# usermod -G wheel mattsun

wheelグループではないユーザーがrootに成れないようにする。

wheelグループのユーザーからではないとsu -でrootに成れないようにする。

# vim /etc/pam.d/su

6行目あたりの#auth       required    pam_wheel.so use_uidのコメントアウトを外す。

auth       required    pam_wheel.so use_uid

作業用ユーザーの鍵を作る

作業用ユーザー「mattsun」になります。

# su mattsun

作業用ユーザーのホームディレクトリに移動します。

$ cd ~/

鍵の置き場所「.ssh」を作る。

$ mkdir .ssh

.sshのパーミッションを700にする。

$ chmod 700 .ssh

鍵のペアを作る。パスフレーズを設定するかはご自由に。面倒なら空白で構いません。

$ ssh-keygen -t rsa -b 4096

生成が成功するとプライベートキーの「id_rsa」とパブリックキーの「id_rsa.pub」が生成されます。
生成したパブリックキー「id_rsa.pub」の名前を「authorized_keys」に変更します。

$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

authorized_keysのパーミッションを変更します。

$ chmod 600 ~/.ssh/authorized_keys

次にプライベートキー「id_rsa」の中を表示し内容をコピーします。

$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
この中身をコピーしておきます。
-----END RSA PRIVATE KEY-----

ターミナルの別ウインドウを開きご自身のPCに鍵を作ります。
鍵の置き場所に決まりはありませんが、だいたいユーザー名の直下の.sshにおくことが多いです。

鍵の置き場所に移動

$ cd /Users/ご自身のPCのユーザー名/.ssh

鍵を生成します。ここでは仮に「mattsun.pem」としておきます。

$ vim mattsun.pem

先ほどコピーしておいたBEGIN RSA PRIVATE KEYからEND RSA PRIVATE KEYの内容をここにペースとして:wqで保存します。

パーミッションを変更する。

$ chmod 600 /Users/ご自身のPCのユーザー名/.ssh/mattusn.pem

実際にSSH接続できるか確かめてみましょう。

鍵のペアの設置が完了したので実際にサーバーに鍵でSSH接続してみましょう。

$ ssh -i /鍵ファイルまでのパス/mattusn.pem mattsun@【サーバーのIPアドレス】

また前回SSHのポート番号を変えたのでポート番号の指定も必要な場合は

$ ssh -i /鍵ファイルまでのパス/mattusn.pem -pポート番号 mattsun@【サーバーのIPアドレス】

このようになると思います。

パスワードログインとrootのSSH接続を禁止する。

次はパスワードでのSSH接続と直接rootでログインするのを禁止していきます。

rootでssh接続してsshd_configを編集します

# vim /etc/ssh/sshd_config

rootで直接ログインできないようにする

#PermitRootLogin yes

↓コメントアウトを外して、値をnoに変更する。

PermitRootLogin no

パスワード入力でのSSH接続を禁止する

PasswordAuthentication yes

↓PasswordAuthenticationの値をnoに

PasswordAuthentication no

:wqで編集内容を保存してsshdを再起動

# systemctl restart sshd.service

まとめ

ここまでで、SSHのポート変更、firewallの設定、編集用のユーザーの追加、パスワードログイン禁止、rootのログインを禁止まで作業しました。

最低限これらのセキュリティ対策は必要だと思います。

次の記事でfail2banを使ってDoS攻撃DDos攻撃の対策をしていこうと思います。