3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SSHに秘密鍵・公開鍵でログインする - 乗っ取られ無いために・・・

Last updated at Posted at 2020-06-10

今までにも、この手の記事は、多いですが自分用の備忘録です。
ただ、VPSサーバーや専用サーバーを借りたら、セキュリティ対策として一番最初にやっておきたいし、やってない人は、今からでも遅くないので、やっておいた方がいい・・・。

やること

  • SSHのポートを変える
  • SSHに秘密鍵でログインできるようにし、通常のパスワードでログインできないようにする。
  • rootで直接ログインできないようにする。

環境

クライアントOS:Windows10
SSHクライアント:TeraTerm
サーバーOS:CentOS 7

SSHのポートを変える

ポートの変更はセキュリティの基本!ということで、SSHのポートを変更してみます。

まず最初に、使う予定のポートを開放しておきます。
例では2222に変更していますが、適宜、読み替えてください。

firewall-cmd --add-port=2222/tcp --zone=public --permanent

設定が終わったら、設定を忘れずに読み込ませます。

firewall-cmd --reload
/etc/ssh/sshd_config
:
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
Port 2222 <-追記
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
:

SSHを再起動させます。

systemctl restart sshd

念のため接続中のターミナル(TeraTerm)は閉じずに、別のターミナルで新しいポートで接続できるか確認します。

接続ができることを確認したら、最後にSSHのデフォルトのポートは閉めてしまいます。

firewall-cmd --remove-service=ssh --zone=public --permanent
firewall-cmd --reload

TeraTermで、秘密鍵・公開鍵を作る

TeraTermを起動し[設定] -> [SSH鍵生成]をクリック
デフォルトでは、RSA-2048になってますが、RSA-4096をに変更します。
ECDSA-521を使った方がセキュリティ的には高いかもしれませんが、この記事では取りあえずRSA-4096を利用します。)
image.png

何か計算が終わったら、鍵のパスフレーズ等の入力ができるようになります。
鍵のパスフレーズを入力せずに鍵を保存すると、秘密鍵だけでログインができるようになります。

image.png

セキュリティ的には、パスフレーズを入れるべきです。
パスフレーズを入れなければ、秘密鍵の保存時に警告がでます。

image.png

終わったら、TeraTermを一旦閉じます。

公開鍵:id_rsa.pub
秘密鍵:id_rsa
ができている事を確認しておきます。
秘密鍵は、絶対に無くしてはいけませんし、流出させてはいけません

公開鍵をサーバーに設置する

公開鍵を設置する場所は、以下のファイル内です。
/home/{ユーザー名}/.ssh/authorized_keys

フォルダ・ファイルが無い場合は、作ります。

mkdir /home/{ユーザー名}/.ssh/
cd /home/{ユーザー名}/.ssh/
vi authorized_keys

authorized_keysの中に公開鍵(id_rsa.pub)を貼り付けます。

/home/{ユーザー名}/.ssh/authorized_keys
ssh-rsa ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG....
chown -R {ユーザー名} /home/{ユーザー名}/.ssh/

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

chmod 700 /home/{ユーザー名}/.ssh/
chmod 600 /home/{ユーザー名}/.ssh/authorized_keys

これまでの作業を{ユーザー名}以外で行っていた場合は、
これらのディレクトリ・ファイルの所有者を{ユーザー名}に変更しましょう。

秘密鍵でログインできるかテストする

TeraTermを起動して、ログインを試します。
(portを変更してない場合はTCPポートは22です。)
image.png

ユーザー名と認証方式を入力します。認証方式は、「RSA/DAS/ECDSA/ED25519鍵を使う」を選択します。
(上記の公開鍵・秘密鍵を作成時に「鍵のパスフレーズ」を入力して鍵を作成した場合は、ここで「パスフレーズ」も入力します)
image.png

無事にログインできれば、大丈夫です。
ログインできない場合は、公開鍵のコピーがうまくいっているか・・・、フォルダ・ファイルのパーミッションや所有者が間違っていないか・・・を確認しましょう。

ここでログインできない場合は、ここから下に書いてある『パスワード認証の制限』や『rootログインの制限』は、行わないでください。
二度とログインできなくなる可能性があります。

SSHのパスワード認証をできないようにする

/etc/ssh/sshd_config 内の「PasswordAuthentication」を「no」に書き換えます。

/etc/ssh/sshd_config
:
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no <-追記
:

SSHを再起動してます。

systemctl restart sshd

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

秘密鍵がないとログインできなくはなっていますが、念のためrootに直接ログインできないようにしておきます。
/etc/ssh/sshd_config 内の「PermitRootLogin」を「no」に書き換えます。

/etc/ssh/sshd_config
:
#LoginGraceTime 2m
#PermitRootLogin yes
PermitRootLogin no <-追記
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
:

SSHを再起動します。

systemctl restart sshd

これで、作業は以上です。

enjoy!

(おまけ)アタックによく使われるユーザー名は・・・

サーバーを立ち上げた直後からSSHに侵入しようと試みてくる不届き者は多数います!
立ち上げ後1時間で、私のサーバーにアタックしてきたユーザー名をご紹介します。

admin / user / git / oracle / gituser / odoo / ansible / ec2-user / test / ubuntu / demo / spark / jenkins / debian / ftpadmin / webadmin / svn / student / www / weblogic / db2inst1 / usuario / support / pi / ubnt

などです。これらのユーザー名は早々に狙われますので、できるだけ使わないようにしましょう。
pi とか・・・ラズパイで使われるユーザーですから・・・ラズパイを外部公開している人は要注意ですよ!
意外とrootでのアクセスは居なかった・・・。

では、今度こそ!
enjoy!!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?