「sshのセキュリティを高める方法」の版間の差分
提供: セキュリティ
(同じ利用者による、間の3版が非表示) | |||
行1: | 行1: | ||
− | [[ssh]]サーバ([[sshd]])のセキュリティを高めるためには、[[sshd]]の設定([[sshd_config]])を適切に行うこと、[[iptables]]や[[ipfw]]などの[[ | + | [[sshd]]のハーデニング(堅牢化)する方法を説明します(Hardening sshd for Security.)。[[ssh]]サーバ([[sshd]])のセキュリティを高めるためには、[[sshd]]の設定([[sshd_config]])を適切に行うこと、[[iptables]]や[[ipfw]]などの[[ファイアーウォール]]などで制限をすることなどが挙げられます。 |
__TOC__ | __TOC__ | ||
行8: | 行8: | ||
* すべてのユーザがsshアクセス可能です。 | * すべてのユーザがsshアクセス可能です。 | ||
+ | 我々は、どのような設定をするべきなのでしょうか? | ||
+ | * sshアクセスの必要なユーザだけに許可するべきです。 | ||
+ | * パスワード認証を捨て、[[公開鍵認証]]のみを許可しましょう。 | ||
+ | * 古いプロトコル(Protocol 1)は、もう必要ありません。 | ||
+ | ** 近年のデフォルトの設定は、2 のみのはずです。 | ||
+ | * sftp だけで良いユーザは、sftp だけ許可します。 | ||
+ | ** [[chroot]] して、ユーザを閉じ込めます。 | ||
+ | |||
+ | また、[[sshd]]の設定ではありませんが、以下の努力が可能です。 | ||
+ | * [[iptables]]等の[[ファイアーウォール]]で、アクセスを限定しましょう。 | ||
+ | ** 試行回数 | ||
+ | ** アクセス元 | ||
+ | * [[ファイアーウォール]]と同様にアクセス元の制限を hosts.allow でも設定ができます。 | ||
== sshd (sshd_config) の設定 == | == sshd (sshd_config) の設定 == | ||
− | /etc/ssh/sshd_config | + | [[FreeBSD]]やUbuntuの[[sshd]]の設定ファイルは、以下のファイルです。 |
+ | /etc/ssh/sshd_config | ||
+ | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
+ | # Port 22 は、デフォルトポートであるため、ブルートフォースの格好のターゲットです。 | ||
+ | # Port xxxx | ||
+ | # 0-65535 の範囲で設定します。 | ||
+ | # このサーバが標的となっている場合、65535回試行されれば、ポートはわかってしまうため、クロール避け的な意味しかありません。 | ||
+ | |||
# sshプロトコルの選択 | # sshプロトコルの選択 | ||
# Protocol 1 は、許可しません。 | # Protocol 1 は、許可しません。 | ||
Protocol 2 | Protocol 2 | ||
+ | |||
+ | # サーバ鍵のビット長 | ||
+ | ServerKeyBits 2048 | ||
+ | |||
# デフォルトは6 | # デフォルトは6 | ||
行21: | 行45: | ||
# 0は、無制限です。 | # 0は、無制限です。 | ||
LoginGraceTime 60 | LoginGraceTime 60 | ||
+ | |||
+ | # sshdが受け付ける「認証されていない段階の接続」の設定です。 | ||
+ | # 5 を超えたら、50% の確立で拒否します。 | ||
+ | # 10に達した時点で、総て拒否します。 | ||
+ | # start:rate:full | ||
+ | MaxStartups 5:50:10 | ||
+ | |||
+ | # アイドルタイムインターバルの時間を過ぎるとアイドル状態のユーザをログアウトします | ||
+ | ClientAliveInterval 300 | ||
+ | |||
+ | ClientAliveCountMax 0 | ||
# ログイン前に、ユーザのホームディレクトリのオーナとパーミッションをチェックします。 | # ログイン前に、ユーザのホームディレクトリのオーナとパーミッションをチェックします。 | ||
行31: | 行66: | ||
# 公開鍵認証を許します | # 公開鍵認証を許します | ||
PubkeyAuthentication yes | PubkeyAuthentication yes | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
# パスワード認証は許しません | # パスワード認証は許しません | ||
行48: | 行74: | ||
# チャレンジレスポンス認証は許可しません | # チャレンジレスポンス認証は許可しません | ||
ChallengeResponseAuthentication no | ChallengeResponseAuthentication no | ||
+ | |||
+ | # ホストベース認証を無効化します | ||
+ | HostbasedAuthentication no | ||
+ | |||
+ | # .rhosts, .shosts ファイルを無視します。 | ||
+ | IgnoreRhosts yes | ||
+ | |||
+ | # 特権を分離します | ||
+ | UsePrivilegeSeparation yes | ||
+ | |||
# PAM モジュールは使用しません | # PAM モジュールは使用しません | ||
行55: | 行91: | ||
AllowUsers cd-user | AllowUsers cd-user | ||
# AllowGroups devops | # AllowGroups devops | ||
+ | |||
+ | # TCP ポートフォワーディング | ||
+ | # 必要なければ、切ります。 | ||
+ | AllowTcpForwarding no | ||
+ | |||
+ | # Xが不要なら切ります。 | ||
+ | X11Forwarding no | ||
+ | |||
+ | |||
+ | # Protocol 1 only | ||
+ | RSAAuthentication no | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== sshd (sshd_config) の設定の反映 == | == sshd (sshd_config) の設定の反映 == | ||
行60: | 行108: | ||
$ sudo service sshd reload | $ sudo service sshd reload | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 許可すること == | == 許可すること == | ||
* [[公開鍵認証]]は、許可します。 | * [[公開鍵認証]]は、許可します。 | ||
* Protocol 2 のみ許可します。 | * Protocol 2 のみ許可します。 | ||
* [[ssh]]を許可すべきユーザ、もしくは、グループのみを許可します。 | * [[ssh]]を許可すべきユーザ、もしくは、グループのみを許可します。 | ||
+ | * 証明書を使用した認証を導入します。 | ||
+ | ** [[OpenSSHのユーザ認証で証明書を使う方法]] | ||
== 禁止すること == | == 禁止すること == | ||
行76: | 行125: | ||
* ChallengeResponseAuthentication チャレンジレスポンス認証は、許可しません。 | * ChallengeResponseAuthentication チャレンジレスポンス認証は、許可しません。 | ||
* UsePAM [[Pluggable Authentication Modules]](PAM)モジュールは使用しません。 | * UsePAM [[Pluggable Authentication Modules]](PAM)モジュールは使用しません。 | ||
− | + | == アプリケーションアカウント == | |
+ | * authorized_keys でコマンドを限定しましょう。 | ||
+ | * アプリケーションアカウント専用のシェルを作りましょう。 | ||
+ | == sftpでchrootの制限を行う == | ||
+ | * [[sftpのみを許可する方法]] | ||
+ | * [[sftpでchrootする設定]] | ||
+ | == iptablesによる制限 == | ||
+ | * [[iptables アクセス回数を制限する]] | ||
+ | == hosts.allow による制限 == | ||
+ | * TBD | ||
== 関連項目 == | == 関連項目 == | ||
* [[sshd]] | * [[sshd]] | ||
* [[Secure Shell]] | * [[Secure Shell]] | ||
− | * [[ | + | * [[ファイアーウォール]] |
<!-- vim: filetype=mediawiki | <!-- vim: filetype=mediawiki | ||
--> | --> |
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