第 16a 章 クライアント、グループウェアと CLI 管理画面: #pIdentity

Kerberos SSO: ドメイン PC、Outlook、メール アプリでパスワードなしのサインイン

Kerberos を使うと、社内ネットワーク上の Windows PC はパスワード入力なしでサインインできます: Webmail と管理画面は SPNEGO ("Windows でサインイン")、Outlook は Negotiate による MAPI、EWS、ActiveSync、Autodiscover、Thunderbird などのメール アプリは SASL GSSAPI による IMAP、SMTP、POP3、ManageSieve を使用します。nextxch はアップロードされた keytab でチケットを自ら検証します。これは Linux でも、ドメインに参加していない Windows サーバーでも動作します。nextxch がドメイン メンバー上で動作している場合は、keytab の代わりにマシン アカウントを使用できます。NTLM は意図的にサポートしていません。

運用のヒントとアーキテクチャに関する注記

SPN のホスト名は、クライアントが使用する名前 (例: mail.example.com) と完全に一致し、A レコードで解決される必要があります。サービス アカウントのパスワードを変更するたびに、keytab を再作成してアップロードしてください。"Kerberos を確認" で各 SPN のキー バージョンと暗号化方式が表示されます。

Active Directory: サービス アカウント、SPN、keytab

ドメイン管理者として PowerShell を使用します。最初の SPN に対して ktpass を 1 回実行します。同じアカウントのそれ以降の SPN はすべてキーを共有するため、setspn だけで済みます。

リファレンス / 構成
# 1. Service account (password never expires, AES only)
New-ADUser -Name svc-nextxch -AccountPassword (Read-Host -AsSecureString) `
  -Enabled $true -PasswordNeverExpires $true -KerberosEncryptionType AES256

# 2. Register the service principals (host name = name clients use)
setspn -S HTTP/mail.example.com  CORP\svc-nextxch
setspn -S imap/mail.example.com  CORP\svc-nextxch
setspn -S smtp/mail.example.com  CORP\svc-nextxch
setspn -S pop/mail.example.com   CORP\svc-nextxch
setspn -S sieve/mail.example.com CORP\svc-nextxch

# 3. Create the keytab (resets the account password)
ktpass -princ HTTP/mail.example.com@CORP.LOCAL -mapuser CORP\svc-nextxch `
  -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL -pass * -out nextxch.keytab

# 4. nextxch Admin > Identity sources > Kerberos
#    realm CORP.LOCAL, SPNs as above, upload the keytab, "Check Kerberos"

# Machine account mode (nextxch on domain member MAILSRV, no keytab):
setspn -S HTTP/mail.example.com CORP\MAILSRV$
setspn -S imap/mail.example.com CORP\MAILSRV$

MIT Kerberos、Heimdal、FreeIPA

プリンシパルを作成し、そのキーを keytab にエクスポートします。FreeIPA の場合: ipa service-add と ipa-getkeytab。

リファレンス / 構成
# MIT / Heimdal
kadmin -q "addprinc -randkey HTTP/mail.firma.de@FIRMA.LOCAL"
kadmin -q "addprinc -randkey imap/mail.firma.de@FIRMA.LOCAL"
kadmin -q "addprinc -randkey smtp/mail.firma.de@FIRMA.LOCAL"
kadmin -q "ktadd -k /tmp/nextxch.keytab HTTP/mail.firma.de imap/mail.firma.de smtp/mail.firma.de"

# FreeIPA
ipa service-add HTTP/mail.firma.de
ipa service-add imap/mail.firma.de
ipa-getkeytab -s ipa.firma.local -p HTTP/mail.firma.de -k /tmp/nextxch.keytab
ipa-getkeytab -s ipa.firma.local -p imap/mail.firma.de -k /tmp/nextxch.keytab

# Test vom Client:
kinit anna && curl --negotiate -u : https://mail.firma.de/api/auth/kerberos

実際の AD を使用した手動テスト

自動テストでは、生成された keytab からチケットを検証します。実際のドメイン コントローラーでは、次のようにもテストしてください:

リファレンス / 構成
# Auf einem Domänen-PC als normaler Benutzer:
klist purge
Invoke-WebRequest https://mail.firma.de/api/auth/kerberos -UseDefaultCredentials
klist                     # zeigt Ticket für HTTP/mail.firma.de
# Erwartet: 200 {"ok":true,"email":"anna@firma.de"}

# IMAP mit GSSAPI (Linux-Client in der Domäne):
kinit anna@FIRMA.LOCAL
curl -v --login-options AUTH=GSSAPI --negotiate -u : imaps://mail.firma.de/INBOX

設定、既定値 & ベスト プラクティス

設定 / 場所 説明 既定値 本番環境のベスト プラクティス
Keytab ktpass、ktutil、kadmin が書き出す MIT 形式。サーバーのキーリングで暗号化して保存され、二度と表示されません。管理ページにはプリンシパル、kvno、暗号化方式のみが一覧表示されます。 Keytab-Modus AES256 を使用してください。RC4 キーも動作しますが、"Kerberos を確認" で警告が表示されます。
Benutzerzuordnung Kerberos プリンシパル (anna@CORP.LOCAL) は、ID ソースを通じて userPrincipalName、sAMAccountName、またはメール アドレスにマッピングされます。受け付けるのは構成済みのレルム (および追加で許可したレルム) のみです。 Realm Pflicht まず AD ID ソースをセットアップして同期し、その後 Kerberos を有効にしてください。
Browser ブラウザーは、信頼済みのイントラネット アドレスにのみ Kerberos チケットを送信します。そうでない場合は、通常のサインイン ページが表示されます。 Automatischer Versuch aus GPO "サイトとゾーンの割り当て一覧": https://mail.example.com = 1 (イントラネット)。Chrome/Edge: AuthServerAllowlist、Firefox: network.negotiate-auth.trusted-uris。
Outlook und ActiveSync MAPI、EWS、Autodiscover、ActiveSync は、Basic に加えて "WWW-Authenticate: Negotiate" を提示します。これにより、ドメイン参加 PC 上の Outlook はサインイン中のユーザーのチケットを使用します。 Negotiate + Basic Outlook の [アカウント設定] > [詳細設定] > [セキュリティ] で、"ログオン ユーザー情報を常に確認する" をオフにしてください。
Mail-Programme (GSSAPI) IMAP、SMTP 送信、POP3、ManageSieve は SASL GSSAPI (相互認証付き、RFC 4752) に対応しています。Thunderbird: アカウント設定 > サーバー > 認証方式 "Kerberos / GSSAPI"。 imap/, smtp/, pop/, sieve/ Linux クライアントでは最初に kinit を実行します。その後 klist で imap/mail.example.com のチケットが表示されます。