sshのセキュリティを高める方法
提供: セキュリティ
スポンサーリンク
sshdのハーデニング(堅牢化)する方法を説明します(Hardening sshd for Security.)。sshサーバ(sshd)のセキュリティを高めるためには、sshdの設定(sshd_config)を適切に行うこと、iptablesやipfwなどのファイアーウォールなどで制限をすることなどが挙げられます。
目次
概要
sshdのデフォルトの設定は、あまり堅牢とは言えるものではありません。
- パスワード認証を許可しています。
- すべてのユーザがsshアクセス可能です。
我々は、どのような設定をするべきなのでしょうか?
- sshアクセスの必要なユーザだけに許可するべきです。
- パスワード認証を捨て、公開鍵認証のみを許可しましょう。
- 古いプロトコル(Protocol 1)は、もう必要ありません。
- 近年のデフォルトの設定は、2 のみのはずです。
- sftp だけで良いユーザは、sftp だけ許可します。
- chroot して、ユーザを閉じ込めます。
また、sshdの設定ではありませんが、以下の努力が可能です。
- iptables等のファイアーウォールで、アクセスを限定しましょう。
- 試行回数
- アクセス元
- ファイアーウォールと同様にアクセス元の制限を hosts.allow でも設定ができます。
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
関連項目
ツイート
スポンサーリンク