「sshのセキュリティを高める方法」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の1版が非表示)
行20: 行20:
 
** 試行回数
 
** 試行回数
 
** アクセス元
 
** アクセス元
* [[ファイアーウォール]]と同様にアクセス元の制限を [[hosts.allow]] でも設定ができます。
+
* [[ファイアーウォール]]と同様にアクセス元の制限を 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>
 
 
== 許可すること ==
 
== 許可すること ==
 
* [[公開鍵認証]]は、許可します。
 
* [[公開鍵認証]]は、許可します。
 
* Protocol 2 のみ許可します。
 
* Protocol 2 のみ許可します。
 
* [[ssh]]を許可すべきユーザ、もしくは、グループのみを許可します。
 
* [[ssh]]を許可すべきユーザ、もしくは、グループのみを許可します。
 +
* 証明書を使用した認証を導入します。
 +
** [[OpenSSHのユーザ認証で証明書を使う方法]]
  
 
== 禁止すること ==
 
== 禁止すること ==
行126: 行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)を適切に行うこと、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

関連項目