ADFS 2012 R2

Mit der Installation des WAP - Web Application Proxy ist es unumgänglich auch einen ADFS 2012 R2 zu installieren. Diese Seite beschreibt etwas die Zusammenhänge und Konfiguration.

Installation

Wie bei Windows 2012R2 können eingebaute Funktionen über den Wizard installiert werden.

Damit sind die Bits schon am dem Server. Das heißt aber nicht, dass Sie schon aktuell sind.

Nutzen Sie auf jeden Fall Windows Update, um ausstehende Updates zu erhalten. Oft hat ein interner WSUS-Server vielleicht nicht alle Updates.

  • 2964735 Authentication failures and event 422 when AD FS STS servers and AD FS proxy servers are in Windows Server 2012 R2
  • 2976918 You are prompted to re-enter credentials frequently when using Work Folders by using ADFS authentication in Windows 8.1
  • 2971171 ADFS authentication issue für Active Directory users when extranet lockout is enabled
  • 2975719 August 2014 Update rollup für Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2
  • 2962409 Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2 Update rollup: June 2014

ADFS auf Domain Controller ?

Gerade bei kleineren Firmen ist jeder Server mehr ein Kostentreiber, insbesondere wenn man wenige Server hat. Da liegt die Frage in der Luft, ob nicht auch der Domain Controller die ADFS-Rolle betreiben kann. Lange Zeit war dies nicht ratsam, da ADFS den IIS als unterbau benötigt hat und man zur Verwaltung damit auf dem DC auch Administrator sein musste

Because ADFS requires the installation of Internet Information Services (IIS), we strongly recommend that you not install any ADFS components on a domain controller in a production environment."
Quelle: http://technet.microsoft.com/en-us/library/cc778681(WS.10).aspx

Allerdings ist diese Voraussetzung bei Windows 2012R2 nicht mehr gegeben. Die ADFS-Funktion nutzt nicht mehr den IIS sondern bedient sich direkt dem HTTP.SYS-Service

AD FS is no longer dependent on IIS. This offers enhanced performance and redUCEs the foot print of services, especially when AD FS is installed on Active Directory domain controllers
Quelle: https://technet.microsoft.com/en-us/library/hh831502.aspx

Ich würde davon zwar keine Empfehlung ableiten, ADFS nun generell auf DCs zu installieren, wie dies auf einigen Blogs schon genannt wird, aber es ist nun einfacher möglich. Und gerade bei kleinen Firmen mit wenigen Servern eine Funktion, die ein DC durchaus mit ausführen kann. In übertragener Hinsicht ist ADFS ja auch nur eine Art "Webtauglicher Ticketserver" vergleichbar zum KDC, der auch Tickets an authentifizierte Benutzer ausstellt.

Konfiguration per Assistent

ADFS ist so aber noch nicht "fertig". Über den Assistenten sind noch ein paar Basiseinstellungen erforderlich.

  • Neue Farm
  • SSL-Zertifikat
    Der ADFS-Server muss per HTTPS erreichbar werden auswählen. Dazu wird ein Zertifikat angefordert bzw. importiert.
    Beachten Sie dabei folgendes:
    • Kein CNG-Zertifikat. Das wird von ADFS 2012R2 nicht unterstützt
    • Zusätzliche SAN-Namen
      Sind ggfls. für Enterprise Join" weitere Namen (je UPN-Domain) erforderlich.
  • Dienstkonto vorgeben
    Der ADFS-Server benötigt ein Dienstkonto, welches durch den Assistenten auch angelegt werden kann.
  • SQL-Datenbank
    Bei einer Farm muss es ein SQL-Server sein, beim Single Server reicht auch die lokale Windows Internal Database (WID).
  • Installation startet
    Es dauert ein paar Minuten, bis die ADFS-Rolle durch den Assistenten installiert und konfiguriert wurde

Nach der Installation können Sie die MMC für "AD FS Management" starten und z.B. die Zertifikate kontrollieren. Ein Großteil der weiteren Konfiguration ist aber abhängig vom den Einsatzzweck von ADFS. Hier verweise ich auf die entsprechenden Produkte. Beim Einsatz mit WAP - Web Application Proxy wird automatisch ein ADFS-Proxy auf WAP-Server mit installiert und entsprechend eingerichtet

Authentication

Per Default fordert der ADFS-Service den Anwender zur Eingabe von Benutzerdaten in einem Formular an. Das ist aus dem Internet natürlich zweckmäßig, da hier der Client eher keine Verbindung zum Kerberos Server der Domäne hat und NTLM nicht über alle Proxyserver übertragen wird.

Intern hingegen könnte man den Anwendern die Anmeldung durchaus vereinfachen, wenn ADFS hier keine gesonderte Anmeldemaske zum Ausfüllen anzeigt. Das kann recht einfach in der GUI von ADFS konfiguriert werden:

Natürlich gibt es auch hierfür einen PowerShell.

Get-AdfsGlobalAuthenticationPolicy

AdditionalAuthenticationProvider      : {}
DeviceAuthenticationEnabled           : False primäryIntranetAuthenticationProvider : {FormsAuthentication, WindowsAuthentication} primäryExtranetAuthenticationProvider : {FormsAuthentication}
WindowsIntegratedFallbackEnabled      : True

Set-AdfsGlobalAuthenticationPolicy `
   -PrimaryExtranetAuthenticationProvider {FormsAuthentication} `
   -PrimaryIntranetAuthenticationProvider {FormsAuthentication}

Beachten Sie aber, dass die Wahl der Authentifizierung auch unterschiedliche Effekte bewirken kann. Nicht alle Clients unterstützen jede Authentifizierung und wenn sie intern, z.B.: statt der "Windows Integrierte Authentifizierung" nur auf Formbased setzen, dann ist es mit dem schönen "Single Sign on" auch vorbei. Die Anwender müssen dann ihre Anmeldedaten manuell im Formular eingeben

Extranet Lockout

Die ADFS-Dienste sind universeller "Token-Lieferanten" und damit natürlich ein lohnendes Ziel für mögliche Angreifer. Wenn es mir gelänge über den Weg einen Zugang zu einer Firma zu erhalten, die z.B. ADFS für Office 365 oder WAP - Web Application Proxy den ADFS-Server installiert hat.

Aber selbst wenn der Zugriff nicht gelingt, weil das Kennwort sicher genug ist oder das Konto gesperrt wird, enthält der ADFS- 2012R2-Server mittlerweile eine Funktion, um zu viele externe Anmeldungen zu verhindern ohne das interne Konto zu sperren. Allerdings ist diese Funktion per Default nicht aktiv.

Get-AdfsProperties | fl ex*

ExtendedProtectionTokenCheck : Allow
ExtranetLockoutThreshold     : 2147483647
ExtranetLockoutEnabled       : False
ExtranetObservationWindow    : 00:30:00

Mein Ratschlag
Aktivieren Sie diese nützliche Funktion und blockieren Sie den Zugang für Konten über DFS , ehe das Konto intern gesperrt wird.

Die Werte für die Zeitdauer und die Anzahl kann einfach gesetzt werden. Der Parameter für die Aktivierung hingegen lautet etwas anders.

Set-AdfsProperties `
   -ExtranetLockoutThreshold 2 `
   -ExtranetObservationWindow 00:01:00 `
   -EnableExtranetLockout $true

Hier wird nach zwei Versuchen jeder weitere Versuch für weitere 1 Minute unterbunden.

Im Eventlog werden zwar die falschen Anmeldungen protokolliert aber es gibt keinen Eintrag, der ein so gesperrtes Konto identifiziert und damit weitere Anmeldeversuche protokolliert. Auch der Anwender bekommt keinen Hinweis darauf, dass sein Konto für ADFs aktuell gesperrt ist. Als Administrator könnte ich nur die Anzahl der "Failed Login" pro User auf dem ADFS-Server ermitteln und sehen, ob schon so viele fehlerhafte Anmeldungen erfolgt sind, wie im ExtranetLockoutThreshold konfiguriert sind.

Troubleshooting

ADFS 2012R2 nutzt nicht mehr den IIS, sondern basiert einfach auf HTTP.SYS. Damit entfallen natürlich schon einmal die üblichen Optionen im IISlog oder mit FREB (Siehe auch IISDebugging).). Aber Windows 2012R2 ADFS protokolliert mittlerweile viel mehr Fehler im Eventlog. Diese Funktion ist per Default eingeschaltet aber kann über die Eigenschaften des Service per GUI konfiguriert werden:

Alternativ können Sie dies auch per PowerShell setzen, wobei die Option" Verbose" nicht über die GUI erreichbar ist.

Set-AdfsProperties -LogLevel Errors,FailureAudits,Information,Verbose,None,SuccessAudits,Warnings

Die Meldungen laufen dann im "Application and Services Log" auf. Hier ein Beispiel:

Wenn Sie also auf der ADFS-Seite eine Fehlermeldung mit einer "Activity ID" finden, dann suchen Sie diese einfach im Eventlog.

Wenn auch das noch keine Antworten liefert, können Sie ein erweitertes Logging im Eventlog aktivieren. Dazu muss zuerst im Eventviewer die Option aktiviert werden. Danach erscheint im Baum auch noch ein ADFS Tracing, das hier dann auch angeschaltet werden kann.

  

Das gleiche ist wohl auch per Kommandozeile möglich:

WEVTUTIL sl "AD FS Tracing/Debug" /l:5

ADFS Debug Eventlog

Es gibt aber noch eine zweite tiefere Möglichkeit dem ADFS-Service auf die Finger zu schauen. Über das Eventlog können Sie auch ein "Debug"-Log anzeigen lassen.

Sie sehen dann einen neuen Eintrag im EventlogViewer

Damit hier aber Details aufgelistet werden, müssen Sie mit WEVTUTIL die entsprechenden Diagnosefunktionen aktivieren:

REM Zuerst einmal muss der Debug Trace gestoppt werden
WEVTUTIL sl "AD FS Tracing/Debug" /e:false

REM Dann stellen Sie den DebugLevel wischen 0 und 5 ein, 5 ist maximum
WEVTUTIL sl "AD FS Tracing/Debug" /l:5

REM um dann wieder das Tracing zu startenb
WEVTUTIL sl "AD FS Tracing/Debug" /e:true

REM Am Ende sollten Sie das Debugging aber wieder abschalten
WEVTUTIL sl "AD FS Tracing/Debug" /e:false

Leider ist das aus meiner Sicht nicht so elegant, wie das im IIS z.B. mit IISDebugging möglich ist. Vergessen Sie nicht nach der Fehlersuche dieses erweiterte Logging wieder abzuschalten.

ADFS Performance Counter

Eine weitere Option ist das Windows Performance Counter System, wo ADFS natürlich auch entsprechende Werte hinterlegt.

Sie sind aber weniger für ein konkretes Debugging denn mehr zur Überwachung der Funktion.

Das vermutlich leistungsfähigste Tool auf dem Client ist natürlich Fiddler. Jeder, der ADFS installiert und auf dem Client nach einem Fehler sucht, sollte Fiddler können und nutzen können. Alle Anfragen des Clients können über Fiddler als Proxy geleitet werden, der sogar SSL inspizieren kann. Entsprechend können Sie dann jede Anfrage und Antwort sehen, analysieren und ggfls. Konfigurationsfehler erkennen.

Troubleshooting Active Directory Federation Services (AD FS) and the Web Application Proxy
http://channel9.msdn.com/events/TechEd/NorthAmerica/2014/PCIT-B411

Loadbalancing und Monitoring

Siehe dazu auch ADFS Monitoring

Ein ADFS-Server ist ja noch einfach zu verwalten, aber wer auf ADFS seine Authentifizierung gegen Dienste in der Cloud aufbaut, handelt sich so einen "Single Point of Failure" ein. Also müssen wir uns Gedanken über die Verfügbarkeit machen. Das muss nicht gleich eine ADFS-Farm oder Cluster sein, Der erste Ansatz sollte die Überwachung des Systems sein, denn nur wenn Sie einen Fehler erkennen, können Sie Gegenmaßnahmen einleiten. Natürlich werden sich früher oder später auch die Anwender melden, aber besser ist es, wenn Sie regelmäßig den ADFS-Dienst abprüfen und dabei z.B. auch gleich die Antwortzeit mit erfassen. So erkennen Sie Ausfälle aber auch Verschlechterungen in der Performance.

Hier zwei URLs, welche Sie z.B. nutzen können, um per HTTPS-Anfrage zu prüfen, ob der ADFS-Service erreichbar ist.

Wenn Sie ADFS nicht nur intern sondern auch extern erreichbar machen, dann benötigen Sie natürlich für beide Stationen eine Strategie für die Verfügbarkeit. Das kann durchaus ein "Single Server" sein, der z.B. mit Snapshots und HyperV-Mirroring für ihre Anforderungen ausreichend verfügbar gemacht werden kann. Wenn Sie aber mehrere Server als Proxy platzieren, dann brauchen Sie einen Loadbalancer davor. Das gleiche gilt auch für einen Pool von internen ADFS-Server.

Weitere Links