sshd設計メモ
sshd_configの各設定値についての備忘録です。
認証方式に関する設計項目
PubkeyAuthentication
- 意味:公開鍵認証の有効/無効
-
メモ:
鍵ファイルの配置と権限設定が必要。
PasswordAuthentication
- 意味:パスワード認証の有効/無効
-
メモ:
運用によるが、基本は鍵認証を使うのがよい。
AuthenticationMethods
- 意味:要求する認証方式の組合せ
-
メモ:
多要素認証するときに使う。
記述した順序ですべての認証に成功する必要がある。
途中で失敗するとログイン不可。
例:公開鍵 + パスワード、公開鍵 + keyboard-interactive。
UsePAM / KbdInteractiveAuthentication
- 意味:PAM 連携/キーボードインタラクティブ認証の可否
-
メモ:
多要素認証やアカウントポリシー連携時に関係する。
Debian 系では UsePAM は yes が一般的。
PermitEmptyPasswords
- 意味:空パスワードアカウントの許可可否
-
メモ:
基本 no。
有効化する理由が思いつかない。
公開鍵・認証情報管理
AuthorizedKeysFile
- 意味:公開鍵ファイルの探索パス
-
メモ:
ユーザホーム配下の authorized_keys を利用するのが一般的。
StrictModes
- 意味:ファイル権限の厳格チェック
-
メモ:
鍵やホームディレクトリの危険な権限を検出しログインを拒否。
通常 yes。
root/特権操作に関する設計
PermitRootLogin
- 意味:root ユーザの直接ログイン可否
-
メモ:
yes にすると root への直接ログインが可能になる。
セキュリティリスクが高いため原則 no。
必要な場合でも一般ユーザでログイン後 sudo する方がよい。
ホストベース・旧式認証
HostbasedAuthentication
- 意味:ホストベース認証の有効/無効
-
メモ:
接続元ホストの正当性+ユーザ名の一致に基づく認証方式。
ユーザ認証を完全に省略するわけではない。
運用・セキュリティ面から現在ではほぼ使われない。
IgnoreRhosts
- 意味:rhosts / shosts ファイルを無視するか
-
メモ:
yes の場合、rhosts / shosts を無視する(通常はこちら)。
no にすると参照する。
暗号・アルゴリズム設計
PubkeyAcceptedAlgorithms
- 意味:許可する公開鍵アルゴリズム
-
メモ:
OpenSSH 8.8 以降、ssh-rsa(SHA-1)は無効化。
rsa-sha2-256 / rsa-sha2-512、ed25519 を使用する。
HostKey / HostKeyAlgorithms
- 意味:サーバホスト鍵と許可アルゴリズム
-
メモ:
ED25519 / RSA-SHA2 系を軸にする。
古い ssh-rsa は基本使わない。
Ciphers
- 意味:許可する暗号化方式
-
メモ:
使用する暗号方式を制御する。
KexAlgorithms
- 意味:鍵交換アルゴリズム
-
メモ:
接続初期の鍵交換方式を制御する。
MACs
- 意味:メッセージ認証コードの許可方式
-
メモ:
hmac-sha2-256 / hmac-sha2-512 など安全な方式のみ許可。
認可(アクセス制御)に関する設計項目
AllowUsers
- 意味:ログインを許可するユーザの指定
-
メモ:
指定したユーザ以外はログイン不可。
AllowGroups
- 意味:ログインを許可するグループの指定
-
メモ:
指定グループに所属するユーザのみログイン可能。
DenyUsers
- 意味:ログインを拒否するユーザの指定
-
メモ:
一時的なアクセス遮断などに使用。
Deny → Allow の順で評価。
原則 Allow 系のみの設計が分かりやすい。
DenyGroups
- 意味:ログインを拒否するグループの指定
-
メモ:
Allow / Deny 併用時は評価順に注意。
Match
- 意味:条件に応じた設定適用ブロック
-
メモ:
ユーザ/グループ/接続元ごとの設定切替に使用。
ネットワーク機能・転送制御
AllowTcpForwarding
- 意味:TCP ポートフォワーディング可否
-
メモ:
SSH トンネルが使用可能になる。
意図しない踏み台になる可能性があるため必要時のみ有効化。
AllowStreamLocalForwarding / StreamLocalBindUnlink
- 意味:UNIX ドメインソケット転送制御
-
メモ:
利用要件がある場合のみ明示。
PermitTunnel
- 意味:tun デバイス利用可否
-
メモ:
明確な要件がなければ不要。
GatewayPorts
- 意味:フォワードポートのバインド範囲制御
-
メモ:
clientspecified などで外部公開範囲が変わる。
要件がなければ不要。
X11Forwarding
- 意味:X11 フォワード可否
-
メモ:
GUI アプリが必要な場合のみ検討。
セッション管理・接続制御
LoginGraceTime
- 意味:認証完了までの猶予時間
-
メモ:
長すぎると認証前セッションが溜まりやすい。
通常 30〜60 秒程度。
MaxAuthTries
- 意味:認証試行回数の上限
-
メモ:
総当たり防止のため低めに設定(例:3)。
MaxSessions
- 意味:1 接続内で許可される多重セッション数
-
メモ:
過剰な多重利用の抑制に使える。
MaxStartups
- 意味:同時ハーフオープン接続の上限
-
メモ:
DoS 耐性向上のための制御。
ClientAliveInterval / ClientAliveCountMax
- 意味:無応答クライアント切断判定
-
メモ:
切断までの時間は
Interval + (Interval × CountMax)。
例:15 と 3 なら約 60 秒。
AllowAgentForwarding
- 意味:SSH エージェント転送可否
-
メモ:
踏み台利用時に便利だが、必要時のみ有効化。
ログ・監査に関する設計項目
SyslogFacility
- 意味:sshd が使用する syslog ファシリティ
-
メモ:
OS のログ設計と合わせて決める。
LogLevel
- 意味:ログ出力の詳細度
-
メモ:
運用時のノイズと監査性のバランスから INFO が妥当。
Banner
- 意味:接続時に表示される警告文ファイル
-
メモ:
必要があれば。
ファイル転送・サブシステム
Subsystem sftp
- 意味:SFTP サーバ指定
-
メモ:
明示しておくと運用・監査で参照しやすい。
ネットワーク待受・構成管理(任意)
Port
- 意味:待受ポート番号
-
メモ:
スキャンノイズ軽減にはなるが本質的な防御ではない。
AddressFamily / ListenAddress
- 意味:IPv4/IPv6 の使用方針、待受アドレス制御
-
メモ:
FW や経路設計と合わせて決める。
Compression / RekeyLimit
- 意味:圧縮・鍵再生成制御
-
メモ:
帯域と安全性のバランスで判断。
PermitUserEnvironment
- 意味:ユーザ環境変数による設定上書き
-
メモ:
原則 no。誤用時の影響が大きい。