Linux
SSH
sshd
sshd_config

セキュアなSSHサーバの設定

概要

 前回の「Amazon Linux 2のsshサーバをよりセキュアに!」に続き、SSHサーバ全体の設定を残したいと思います

 以下の項目値がsshd_configに設定されていない場合はデフォルト値で動作するので、項目値を追加することで動作を制限することができます。なお、OpenSSHのバージョンによっては設定できないものもありますので、マニュアルを確認してから設定してください
 また、設定したことによって、古いSSHクライアントが接続できなくなったり、SSHサーバに接続できなくなることもありますので、事前に確認してから設定を行ってください!

プロトコルのバージョン(必須)

Protocol 1は中間者攻撃に問題があるため、Protocol 2を使用しましょう
OpenSSH 7.6以上はデフォルトで2になっています(Protocol 1はサポートされていない

/etc/ssh/sshd_config
Protocol 2

パスワード認証を無効(必須)

どうしてもパスワード認証しなければならない場合は、安全なパスワードを設定してください
IPAのチョコっとプラスパスワードや日本語パスワードなどが参考になります

/etc/ssh/sshd_config
PasswordAuthentication no

チャレンジ/レスポンス認証を無効(必須)

チャレンジ/レスポンス認証

パスワード認証を安全に行えるようにするための仕組みですが、パスワード認証を無効にするのが前提なので、こちらも無効とする

ChallengeResponseAuthentication no

空パスワードを無効(必須)

開発中はいいが、本番環境はNG

/etc/ssh/sshd_config
PermitEmptyPasswords no

rootユーザのログインを禁止(必須)

基本rootユーザで操作しないのが原則なので、rootユーザのログインから禁止

/etc/ssh/sshd_config
PermitRootLogin no

ログレベル(必須)

ログインに関するログ(成功、失敗)が出力されるようにする
問題が発生した時に状況をトレースしやすくするため

/etc/ssh/sshd_config
SyslogFacility AUTHPRIV
LogLevel VERBOSE

※あわせてrsyslogのログテンプレートを設定しておくと情報が過不足にならずに済みます

接続できるユーザを制限する(任意)

/etc/ssh/sshd_config
AllowUsers work_user

特定のユーザからの接続を拒否する(任意)

AWS EC2のようにデフォルトユーザ(ec2-user)が知れ渡っているような場合は、
デフォルトユーザを削除したり、接続禁止設定しとくと安全でしょう

/etc/ssh/sshd_config
DenyUsers ec2-user

SSH接続ポートの変更(任意)

デフォルト22番ポート以外の任意のポートに割り当てることで攻撃を遅らせることができます
※割り当て予定のポートを事前にファイアウオールで許可するようにしてください!

/etc/ssh/sshd_config
Port 1022

SSHポートフォワードの禁止(任意)

SSH接続を経由して、他のサーバに転送通信(トンネリング)をできなくする

/etc/ssh/sshd_config
AllowTcpForwarding no
AllowStreamLocalForwarding no
GatewayPorts no
PermitTunnel no

参考

https://www.ssh.com/ssh/sshd_config/