はろー。 は、はろー。まとめノート書いてますよ。

【自宅サーバ作業第8回】SSHログイン制限の設定とSSHポート番号の変更

SSHログイン制限 アイキャッチ画像

前回の記事より引き続き、サーバログインのセキュリティ対策についてのお話です。

自宅サーバ作業第8回では、SSHログイン制限の設定およびSSHポート番号の変更を行なっていきます。

はじめに

OSやSSHのバージョンによっては設定内容に違いがあるかと思われますので、ここで予め断っておきつつバージョン確認しておきます。

CentOSバージョン確認

CentOSのバージョンを確認するには次のコマンドを入力します。

cat /etc/redhat-release

CentOS Linux release 7.6.1810 (Core)」と返されました。

SSHバージョン確認

telnetを用いて確認します。telnetがインストールされていない場合は、

sudo yum -y install telnet

とすることで、インストール可能です。

SSHのバージョンを確認するには次のコマンドを入力します。

telnet "自宅サーバのIPアドレス" 22

SSH-2.0-OpenSSH_7.4」と返されました。

SSHログイン制限の設定

前回記事では、公開鍵認証によるログイン設定の追加と新規ログインユーザの追加を行い、追加したユーザでの公開鍵認証によるサーバログインを行いました。

ですが、この状態ではパスワードのみでのログインやROOT権限でのログインは可能なままです。なので、サーバのssh設定ファイルを変更してログイン制限をしていきたいと思います。

まず、以下のコマンドを入力し設定ファイルを変更します。

sudo vi /etc/ssh/sshd_config
38行目、ROOTログインの無効化
PermitRootLogin no
43行目、公開鍵認証の有効化
PubkeyAuthentication yes
64行目、空パスワードの無効化
PermitEmptyPasswords no
65行目および69行目、パスワード認証の無効化
PasswordAuthentication no
ChallengeResponseAuthentication no
72行目および79行目、シングルサインオン関連無効化
KerberosAuthentication no
GSSAPIAuthentication no
101行目、SSH接続によるGUI転送の無効化
X11Forwarding no

設定を変更した後、sshdを再起動します。

sudo systemctl restart sshd

ログイン制限の確認

ログイン制限が有効になっているか確認するため、一旦ssh接続を切断します。

その後、ROOT権限でのパスワードログインならびに追加ユーザでのパスワードログインを試み、全て拒否されたらログイン制限の成功です。

ポート番号について

これまで、SSH接続する際は以下のコマンドを入力してサーバログインしていました。

ssh root@"サーバのIPアドレス"

これは、ポート番号を省略した記述方法となっており、ssh接続する際にポート番号を省略した場合は一般的に使用されているポート番号(ウェルノウンポート番号)を用いたssh接続を試みます。

このポート番号を他者がわからない番号に変更することによって、不正アクセスによるサーバログインの抑止につながります。

ウェルノウンポート番号

一般的に使用されるポート番号はウェルノウンポート番号と呼ばれていて、例えばhttpであれば80番、httpsなら443番が使われています。SSHはポート22番が使用されています。

SSHポートの変更前準備

既存ポートの確認

ポート番号を変更するにあたり、既存ポート番号と重複しないよう気をつけなければなりません。その際、すでに使用されているポート番号を確認するには、ROOT権限で以下のコマンドを入力します。

sudo lsof -i -nP

lsofコマンドがインストールされていない場合は、

sudo yum -y install lsof

でインストールします。

既存ポートのNAME列より「TCP *:」の隣の数字がポート番号となります。以下の例では、sshdにポート22番が割り当てられていることがわかります。

sshd    2043   root    3u  IPv4  24881      0t0  TCP *:22 (LISTEN)

SELinuxの無効化

SSHポート番号の変更に伴い、SELinuxを無効化しておきます。意図せずプログラムが動作しなくなったり挙動がおかしいなどの問題が起きるのを未然に防いでおこうと思います。

getenforce

「Enforcing」と返された場合は「SELinux有効」、「Permissive」または「disabled」と返された場合は「SELinux無効」を表します。

SELinuxを無効化するには次のコマンドを入力します。

setenforce 0

これで一時的にSELinuxを無効にすることができました。

SELinuxの永続無効化

永続的に無効にする場合は、SELinuxの設定ファイルを編集していきます。

sudo vi /etc/SELinux/config
7行目、SELinux無効化
SELINUX=disabled

変更した後にサーバを再起動することで永続的にSELinuxを無効化できます。

SSHポートの変更

では、実際にポート番号を変更していきます。ここでは例としてポート番号を10022番に設定してみます。

SSH設定ファイルの変更

SSH設定ファイルを開いてポート番号を変更します。

sudo vi /etc/ssh/sshd_config
17行目、ポート番号変更
Port 10022

設定ファイルを変更したのち、sshdを再起動します。

sudo systemctl restart sshd

FirewallのSSHポート番号設定の変更

次に、Firewallで設定されているSSHポート番号を新しいポート番号に変更します。

はじめにFirewallに登録可能なサービス一覧にSSHがあることを確認します。

firewall-cmd --get-services | grep ssh

一覧内に「ssh」を確認できました。

Firewallのssh設定ファイルを変更していきます。

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml
sudo vi /etc/firewalld/services/ssh.xml
5行目
port="22"の箇所をport="10022"に変更

設定ファイルを変更したのち、Firewallを更新します。

sudo firewall-cmd --reload

ポート番号変更確認

もう一度、既存ポートを確認します。

sudo lsof -i -nP

SSHポート表示項目が以下のように「TCP *:10022」に変更されています。

sshd    2160   root    3u  IPv4  26873      0t0  TCP *:10022 (LISTEN)
sshd    2160   root    4u  IPv6  26875      0t0  TCP *:10022 (LISTEN)

変更後のポート番号でSSHログインする

変更後のポート番号でSSHログインしてみます。

ssh -p 10022 -i .ssh/MyKey edward@"サーバのIPアドレス"

無事サーバログインできたら成功です。

さいごに

前回記事と今回記事の2回にわたりサーバログインに関するセキュリティ設定を行なってきました。
まあまあセキュアなサーバができたのではないでしょうか?

次回、自宅サーバ作業第9回ではモデムーゲストOS間のhttpポート解放を行い、自宅サーバを外部に公開する作業を行なっていきます。

スポンサーリンク
back to top