sshのセキュリティを高める方法

提供: セキュリティ
移動: 案内検索
スポンサーリンク

sshdのハーデニング(堅牢化)する方法を説明します(Hardening sshd for Security.)。sshサーバ(sshd)のセキュリティを高めるためには、sshdの設定(sshd_config)を適切に行うこと、iptablesipfwなどのファイアーウォールなどで制限をすることなどが挙げられます。

概要

sshdのデフォルトの設定は、あまり堅牢とは言えるものではありません。

  • パスワード認証を許可しています。
  • すべてのユーザがsshアクセス可能です。

我々は、どのような設定をするべきなのでしょうか?

  • sshアクセスの必要なユーザだけに許可するべきです。
  • パスワード認証を捨て、公開鍵認証のみを許可しましょう。
  • 古いプロトコル(Protocol 1)は、もう必要ありません。
    • 近年のデフォルトの設定は、2 のみのはずです。
  • sftp だけで良いユーザは、sftp だけ許可します。
    • chroot して、ユーザを閉じ込めます。

また、sshdの設定ではありませんが、以下の努力が可能です。

sshd (sshd_config) の設定

FreeBSDやUbuntuのsshdの設定ファイルは、以下のファイルです。

/etc/ssh/sshd_config
# Port 22 は、デフォルトポートであるため、ブルートフォースの格好のターゲットです。
# Port xxxx
# 0-65535 の範囲で設定します。
# このサーバが標的となっている場合、65535回試行されれば、ポートはわかってしまうため、クロール避け的な意味しかありません。
 
# sshプロトコルの選択
# Protocol 1 は、許可しません。
Protocol 2
 
# サーバ鍵のビット長
ServerKeyBits 2048
 
 
# デフォルトは6
MaxAuthTries 3
 
# ログインに成功するまでの制限時間です。
# 0は、無制限です。
LoginGraceTime 60
 
# sshdが受け付ける「認証されていない段階の接続」の設定です。
# 5 を超えたら、50% の確立で拒否します。
# 10に達した時点で、総て拒否します。
# start:rate:full
MaxStartups 5:50:10
 
# アイドルタイムインターバルの時間を過ぎるとアイドル状態のユーザをログアウトします
ClientAliveInterval 300
 
ClientAliveCountMax 0
 
# ログイン前に、ユーザのホームディレクトリのオーナとパーミッションをチェックします。
StrictModes yes
 
# root のログインは、認めません。
PermitRootLogin no
 
# Protocol 2 only
# 公開鍵認証を許します
PubkeyAuthentication yes
 
# パスワード認証は許しません
PasswordAuthentication no
# デフォルトは、no
# パスワード認証をそもそも許してないので不要
PermitEmptyPasswords no
# チャレンジレスポンス認証は許可しません
ChallengeResponseAuthentication no
 
# ホストベース認証を無効化します
HostbasedAuthentication no
 
# .rhosts, .shosts ファイルを無視します。
IgnoreRhosts yes
 
# 特権を分離します
UsePrivilegeSeparation yes
 
 
# PAM モジュールは使用しません
UsePAM no
 
# sshを許可するユーザ、もしくは、ユーザグループを指定します。
AllowUsers cd-user
# AllowGroups devops
 
# TCP ポートフォワーディング
# 必要なければ、切ります。
AllowTcpForwarding no
 
# Xが不要なら切ります。
X11Forwarding no
 
 
# Protocol 1 only
RSAAuthentication no

sshd (sshd_config) の設定の反映

$ sudo service sshd reload

許可すること

禁止すること

  • PermitRootLogin rootのログインは許可しません。
  • Protocol 1 は、脆弱性があるので使用しません。
  • RSAAuthentication は Protocol 1 のみなので許す必要がありません。
  • PasswordAuthentication パスワード認証は、許可しません。
  • PermitEmptyPasswords 空パスワードは許可しません。
    • そもそもパスワード認証を許可しません。
  • ChallengeResponseAuthentication チャレンジレスポンス認証は、許可しません。
  • UsePAM Pluggable Authentication Modules(PAM)モジュールは使用しません。

アプリケーションアカウント

  • authorized_keys でコマンドを限定しましょう。
  • アプリケーションアカウント専用のシェルを作りましょう。

sftpでchrootの制限を行う

iptablesによる制限

hosts.allow による制限

  • TBD

関連項目




スポンサーリンク