「sshのセキュリティを高める方法」の版間の差分
提供: セキュリティ
(→許可すること) |
|||
行20: | 行20: | ||
** 試行回数 | ** 試行回数 | ||
** アクセス元 | ** アクセス元 | ||
− | * [[ファイアーウォール]]と同様にアクセス元の制限を | + | * [[ファイアーウォール]]と同様にアクセス元の制限を hosts.allow でも設定ができます。 |
− | + | ||
== sshd (sshd_config) の設定 == | == sshd (sshd_config) の設定 == | ||
− | |||
[[FreeBSD]]やUbuntuの[[sshd]]の設定ファイルは、以下のファイルです。 | [[FreeBSD]]やUbuntuの[[sshd]]の設定ファイルは、以下のファイルです。 | ||
/etc/ssh/sshd_config | /etc/ssh/sshd_config | ||
行110: | 行108: | ||
$ sudo service sshd reload | $ sudo service sshd reload | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 許可すること == | == 許可すること == | ||
* [[公開鍵認証]]は、許可します。 | * [[公開鍵認証]]は、許可します。 | ||
行128: | 行125: | ||
* ChallengeResponseAuthentication チャレンジレスポンス認証は、許可しません。 | * ChallengeResponseAuthentication チャレンジレスポンス認証は、許可しません。 | ||
* UsePAM [[Pluggable Authentication Modules]](PAM)モジュールは使用しません。 | * UsePAM [[Pluggable Authentication Modules]](PAM)モジュールは使用しません。 | ||
− | |||
== アプリケーションアカウント == | == アプリケーションアカウント == | ||
* authorized_keys でコマンドを限定しましょう。 | * authorized_keys でコマンドを限定しましょう。 | ||
* アプリケーションアカウント専用のシェルを作りましょう。 | * アプリケーションアカウント専用のシェルを作りましょう。 | ||
− | |||
== sftpでchrootの制限を行う == | == sftpでchrootの制限を行う == | ||
* [[sftpのみを許可する方法]] | * [[sftpのみを許可する方法]] |
2015年9月23日 (水) 19:57時点における最新版
sshdのハーデニング(堅牢化)する方法を説明します(Hardening sshd for Security.)。sshサーバ(sshd)のセキュリティを高めるためには、sshdの設定(sshd_config)を適切に行うこと、iptablesやipfwなどのファイアーウォールなどで制限をすることなどが挙げられます。
目次
概要
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