今までにも、この手の記事は、多いですが自分用の備忘録です。
ただ、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
:
# 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を利用します。)
何か計算が終わったら、鍵のパスフレーズ等の入力ができるようになります。
鍵のパスフレーズを入力せずに鍵を保存すると、秘密鍵だけでログインができるようになります。
セキュリティ的には、パスフレーズを入れるべきです。
パスフレーズを入れなければ、秘密鍵の保存時に警告がでます。
終わったら、TeraTermを一旦閉じます。
公開鍵:id_rsa.pub
秘密鍵:id_rsa
ができている事を確認しておきます。
秘密鍵は、絶対に無くしてはいけませんし、流出させてはいけません
公開鍵をサーバーに設置する
公開鍵を設置する場所は、以下のファイル内です。
/home/{ユーザー名}/.ssh/authorized_keys
フォルダ・ファイルが無い場合は、作ります。
mkdir /home/{ユーザー名}/.ssh/
cd /home/{ユーザー名}/.ssh/
vi authorized_keys
authorized_keysの中に公開鍵(id_rsa.pub)を貼り付けます。
ssh-rsa ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG....
chown -R {ユーザー名} /home/{ユーザー名}/.ssh/
パーミッションを変更します
chmod 700 /home/{ユーザー名}/.ssh/
chmod 600 /home/{ユーザー名}/.ssh/authorized_keys
これまでの作業を{ユーザー名}以外で行っていた場合は、
これらのディレクトリ・ファイルの所有者を{ユーザー名}に変更しましょう。
秘密鍵でログインできるかテストする
TeraTermを起動して、ログインを試します。
(portを変更してない場合はTCPポートは22です。)
ユーザー名と認証方式を入力します。認証方式は、「RSA/DAS/ECDSA/ED25519鍵を使う」を選択します。
(上記の公開鍵・秘密鍵を作成時に「鍵のパスフレーズ」を入力して鍵を作成した場合は、ここで「パスフレーズ」も入力します)
無事にログインできれば、大丈夫です。
ログインできない場合は、公開鍵のコピーがうまくいっているか・・・、フォルダ・ファイルのパーミッションや所有者が間違っていないか・・・を確認しましょう。
ここでログインできない場合は、ここから下に書いてある『パスワード認証の制限』や『rootログインの制限』は、行わないでください。
二度とログインできなくなる可能性があります。
SSHのパスワード認証をできないようにする
/etc/ssh/sshd_config 内の「PasswordAuthentication」を「no」に書き換えます。
:
# 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」に書き換えます。
:
#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!!