SSH セキュリティ向上

Linux (CentOS、Rocky、Ubuntu)

前回は、sshサーバを公開鍵認証でWindowsからリモートアクセスできるようにしました。

標準設定ではすべての環境に対応しているためもう少しセキュリティ向上をさせる設定に変更しようと思います

rootユーザーのログイン拒否

centOSの標準設定では、rootユーザーのログインが許可されています。
rootユーザーでログイン出来ると、何でもできてしまうので、rootユーザーはリモートからはログインできないように設定します。
sshの設定は、「/etc/ssh/sshd_config」で行います。

$ sudo vi /etc/ssh/sshd_config

 ファイルが開いたら、「permitRootLogin」の項目を探し「no」に設定します。

 permitRootLogin yes ⇒ PermitRootLogin no

鍵認証以外ではログイン拒否

こちらも同様に、「/etc/ssh/sshd_config」を編集します

$ sudo vi /etc/ssh/sshd_config 
     PermitRootLogin と PasswordAuthentication を「no」に設定します
     環境によっては、先頭文字が「#」になっています
   これは、コメント扱いにする設定なので「#」を省いて明示的に「no」にします

  #PermitRootLogin yes ⇒ PermitRootLogin no
  #PasswordAuthentication yes ⇒ PasswordAuthentication no

      設定を上書き保存したら、sshサービスを再起動します

$ sudo systemctl reload sshd.service

再度、「Tera Term」を再起動すると「plain password」ではログインできなくなっています
鍵がないとログインできなくなったので、かなり安心です

ポート番号#22 の変更

ポート番号、0番~1023番号は、予約されているポート番号で、ウェルノウンポートと呼ばれています。
その中の、22番は、sshサービスの標準のポートと決められています。
sshはリモートログイン用のサービスなので、このポートが開いているとアタックは確実に増えてきます。
鍵認証に設定したとはいえ、リスクは高まりますので変更したいと思います
ポート番号の若い番号は予約されているので、50000番以降が良いようです
55522番に変更しようと思います
ポート番号も、「 /etc/ssh/sshd_config 」を編集します
「 /etc/ssh/ssh_config 」ではないので注意してください。

$ sudo vi /etc/ssh/sshd_config
 
#Port 22 ⇒  Port 55522 

#port 22 と先頭に「#」が付いている行は無効になっている意味です
無効なので、デフォルトの「22」が使用されます。
違う番号にしたい場合には、「#」を外して、任意の番号を設定します
編集が終了したら、保存して「sshd」サービスを再起動すれば、sshとしては反映されますが、「ssh」は「centOS7」では標準で動作している「firewalld」の対象サービスとなっています。
ポート番号を変更したため、ファイヤーウォール「firewalld」によって拒否されます
まずは、firewalld の監視状態を確認するには、「firewall-cmd –list-all」コマンドで行います

$ sudo firewall-cmd --list-all
 public (active)
   target: default
   icmp-block-inversion: no
   interfaces: enp9s0f0 wlp8s0
   sources:
   services: ssh dhcpv6-client 
   ports:
   protocols:
   masquerade: no
   forward-ports:
   source-ports:
   icmp-blocks:
   rich rules:

services: ssh で ssh サービスが許可されているのがわかりますが
ssh は標準の22番ポートで許可されていますから、変更する必要があります
firewalld に標準意外の新しいルールを追加するには、「/etc/firewalld/services」にルール設定ファイルを作成します。
最初から作成するのは大変ですが、デフォルトの設定ファイルが 「 /usr/lib/firewalld/services/ 」 内に保存されているので、その中から対象サービスの設定ファイルを探し
「 /etc/firewalld/services /」 にコピー後編集する事で変更が反映されます。
具体的には「 /usr/lib/firewalld/services/ ssh.xml 」に保存されているので、そのファイルを「 /etc/firewalld/services /」にコピーして編集します。
また、「/usr/lib/firewalld/services/」 には、root 以外はアクセスできないので「su」コマンドで、root になって作業します
「cp」コマンドで、「 /usr/lib/firewalld/services/ ssh.xml 」から
「 /etc/firewalld/services /」にコピーし、コピーした「ssh.xml」を編集します

$ su
  パスワード入力
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
# cd /etc/firewalld/services/
# vi ssh.xml

  この中の、「port=」を編集

<port protocol="tcp" port="22"/> ⇒ <port protocol="tcp" port="55522"/>

  保存後、firewall を再起動

# firewall-cmd --reload
 success
  「success」が出れば、OK。

   sshd を再起動

# systemctl restart sshd

これで、sshのポート番号の変更ができました
ローカル上のWindowsPCから、「TeraTerm」でログインできるはずです

ログイン画面で、「TCP port#:」の番号を変更した番号へ変更しログインします
ローカル(自宅)だけのみのアクセスであればこれで完了ですが
外部 のPC (インターネット側)からから自宅内のサーバにアクセスするには、入口のドアを開けておく必要があります
通常は、ネット接続サービスのルータとかゲートウェイとか呼ばれtいる機器の設定をすることになると思います
私の環境は、auひかりなので、Aterm BL900HWという機種のゲートウェイの設定を行います

設定方法は機種によっていろいろですが、だいたい同様だと思います。
通常は、ルータのIPアドレスへアクセスすると、設定画面が表示されます
ポートマッピング設定で、NATエントリのLAN側ホストにサーバのIPを設定
ポート番号に、そのサーバで提供するサービスのポート番号を設定します
具体的には、この設定で、外部からsshd (55522ポート)にアクセスがあれば、ルータはNATエントリに設定されている、アドレスのPCへ誘導します
そこで、鍵の検証など、条件が一致すれば、外部からでもアクセス可能となります。
したがって、内部のPC同士では通信できるのに、外部からできない場合には、ルータの設定がうまくいっていない場合が多いです

グローバルな自分のアドレス

外部から自宅内のサーバーへアクセスする場合、自宅のインターネット上のグローバルIPアドエスを知る必要があります
調べる方法は、検索サイトで検索すればすぐにヒットしますが、たとえば自宅内のPCで下記サイトへアクセスすればすぐにわかります
https://www.cman.jp/network/support/go_access.cgi
ここで表示されたIPアドレスで外部からアクセスできます
ただし、契約しているインターネット接続が必ずしもグローバルIPを提供しているとは限りません。
接続会社内のローカルとして提供している場合もあります
その場合には、残念ながら外部からの接続はできません

自宅でWordPressを動かそう!


1 2 3 4 5 6 7 8 9 10 11

コメント

タイトルとURLをコピーしました