Bezpieczny LDAPS na FortiGate w 5 minut: konfiguracja TLS dla Active Directory bez AD CS

LDAP na porcie 389 nadal jest obecny w wielu małych i średnich środowiskach. Szpitale powiatowe, urzędy, firmy z jednym administratorem IT – wszędzie tam wdrożenie pełnego Microsoft PKI bywa odkładane na później. Efekt? Firewall komunikuje się z Active Directory jawnym protokołem, a dane uwierzytelniające i zapytania katalogowe mogą być podatne na podsłuch.

Nie musi to jednak oznaczać budowania rozbudowanej infrastruktury AD CS, kupowania dodatkowych licencji ani uruchamiania kolejnej roli serwerowej. Można przygotować lokalny Root CA i certyfikat serwerowy LDAPS z poziomu PowerShell, zaufać temu urzędowi na FortiGate i skonfigurować bezpieczne połączenie na porcie 636.

Najważniejsze zastrzeżenie: zielony status Successful w FortiGate nie jest jeszcze dowodem pełnego bezpieczeństwa. Szyfrowanie TLS to dopiero połowa zadania. Trzeba także wymusić weryfikację tożsamości serwera.

Spis treści:

Dlaczego LDAP na porcie 389 to problem

Klasyczny LDAP działa standardowo na porcie 389 i bez dodatkowej ochrony przesyła komunikację w sposób podatny na podsłuch. Gdy FortiGate korzysta z Active Directory na potrzeby uwierzytelniania VPN, polityk opartych o grupy lub innych mechanizmów kontroli dostępu, integracja z katalogiem nie powinna pozostawać w postaci jawnego połączenia.

W praktyce przeszkodą często nie jest brak świadomości ryzyka, lecz skala zadania. Pełnoprawny urząd certyfikacji Microsoft AD CS oznacza dodatkową rolę, projektowanie cyklu życia certyfikatów oraz późniejsze utrzymanie. Dla niewielkiego środowiska może to być nieproporcjonalne do potrzeby zabezpieczenia jednego połączenia FortiGate-Active Directory.

LDAPS rozwiązuje ten problem, ponieważ używa TLS i domyślnie działa na porcie 636. Aby połączenie było faktycznie odporne na podszycie się pod serwer, FortiGate musi jednak nie tylko zestawić TLS, ale też rozpoznać i zweryfikować certyfikat kontrolera domeny.

Co jest potrzebne do bezpiecznego LDAPS

Pełna walidacja opiera się na dwóch elementach:

  • certyfikacie serwerowym na kontrolerze domeny, używanym przez usługę LDAPS;
  • certyfikacie Root CA, który podpisał certyfikat serwera i zostanie zaimportowany do FortiGate jako zaufany urząd certyfikacji.

Klucz prywatny Root CA powinien pozostać w bezpiecznym magazynie certyfikatów na kontrolerze domeny. Do FortiGate eksportowany jest wyłącznie publiczny certyfikat urzędu w pliku .cer. To właśnie on pozwala firewallowi potwierdzić, że certyfikat przedstawiony przez kontroler domeny został podpisany przez zaufane źródło.

Generowanie Root CA i certyfikatu LDAPS w PowerShell

Pierwszy krok wykonaj bezpośrednio na kontrolerze domeny. Uruchom PowerShell z uprawnieniami administratora, a następnie wygeneruj lokalny Root CA, dodaj go do magazynu zaufanych urzędów systemu Windows, utwórz podpisany nim certyfikat serwerowy i wyeksportuj certyfikat CA na pulpit.

				
					$fqdn=([System.Net.Dns]::GetHostEntry("localhost").HostName); $domain=$env:USERDNSDOMAIN; $root=New-SelfSignedCertificate -Subject "CN=Lokalny Root CA dla LDAPS" -CertStoreLocation cert:\LocalMachine\My -KeyAlgorithm RSA -KeyLength 4096 -HashAlgorithm SHA256 -KeyUsage CertSign,CRLSign -Type Custom -TextExtension @("2.5.29.19={text}ca=true") -FriendlyName "AD-RootCA" -NotAfter (Get-Date).AddYears(10); $s=New-Object System.Security.Cryptography.X509Certificates.X509Store("Root","LocalMachine"); $s.Open("ReadWrite"); $s.Add($root); $s.Close(); New-SelfSignedCertificate -DnsName $fqdn,$env:COMPUTERNAME,$domain -CertStoreLocation cert:\LocalMachine\My -KeyAlgorithm RSA -KeyLength 4096 -HashAlgorithm SHA256 -NotAfter (Get-Date).AddYears(5) -FriendlyName "LDAPS-ServerCert" -Type SSLServerAuthentication -Signer $root; Export-Certificate -Cert $root -FilePath "$HOME\Desktop\ad_root_ca.cer"
				
			

Polecenie automatycznie odczytuje pełną nazwę serwera oraz nazwę domeny. Root CA otrzymuje klucz RSA 4096 bitów, SHA-256 i 10-letnią ważność. Certyfikat serwerowy LDAPS jest ważny przez 5 lat i zawiera nazwy DNS wykryte dla kontrolera domeny.

Po wykonaniu skryptu certyfikat Root CA jest gotowy do importu na FortiGate, a klucz prywatny pozostaje na kontrolerze domeny.

Efektem pracy powinien być plik ad_root_ca.cer na pulpicie. To ten plik trzeba przenieść do FortiGate. Nie eksportuj ani nie przenoś klucza prywatnego urzędu certyfikacji.

Import Root CA do FortiGate i porządek w nazwach

Zaloguj się do interfejsu FortiGate i przejdź do System → Certificates. Jeżeli tej pozycji nie ma w menu, sprawdź w Feature Visibility, czy zarządzanie certyfikatami jest włączone.

Następnie wybierz:

  1. Create/Import,
  2. CA Certificate,
  3. import z File,
  4. plik ad_root_ca.cer.

FortiGate może automatycznie nazwać zaimportowany certyfikat na przykład CA_Cert_1. Taka nazwa działa, ale szybko tworzy bałagan w środowisku z większą liczbą certyfikatów. Warto od razu zmienić ją na czytelną, na przykład AD-RootCA-MojaDomena.

				
					config vpn certificate ca
    rename CA_Cert_1 to "AD-RootCA-MojaDomena"
end
				
			

Składnia może różnić się zależnie od wersji FortiOS. Po odświeżeniu listy certyfikatów należy potwierdzić, że Root CA jest widoczny pod nową nazwą.

Zaimportowany Root CA staje się punktem zaufania, którego FortiGate użyje do walidacji kontrolera domeny.

Konfiguracja serwera LDAPS w FortiOS

Konfigurację serwera LDAP najwygodniej wykonać w CLI. Poniższy przykład tworzy połączenie LDAPS, korzysta z dedykowanego konta serwisowego i wymusza sprawdzanie tożsamości serwera.

				
					config user ldap
    edit AD_LDAP_Secure
        set server serwer.moja.domena
        set cnid sAMAccountName
        set dn dc=moja,dc=domena
        set type regular
        set username ldap-reader@moja.domena
        set password haslo-ldap-reader
        set secure ldaps
        set server-identity-check enable
        set ca-cert AD-RootCA-MojaDomena
    next
end
				
			

Przed zapisaniem konfiguracji zamień wartości przykładowe na dane własnego środowiska. Szczególnej uwagi wymagają pola server, dn, username i ca-cert.

Adres serwera musi być zgodny z certyfikatem

W parametrze set server podaj pełną nazwę FQDN kontrolera domeny, identyczną z nazwą używaną w certyfikacie serwerowym, na przykład dc01.moja.domena. Nie używaj samego adresu IP.

Przy włączonej weryfikacji certyfikatu FortiGate porównuje nazwę serwera z wpisami CN lub SAN w certyfikacie. Jeżeli firewall łączy się pod adresem IP albo inną nazwą niż ta uwzględniona w certyfikacie, walidacja nie powiedzie się.

Użyj sAMAccountName zamiast CN

Parametr cnid definiuje atrybut używany jako identyfikator użytkownika. Dla typowego środowiska Active Directory rozsądnym wyborem jest:

				
					set cnid sAMAccountName
				
			

Wartość CN często zawiera pełne imię i nazwisko. Pozostawienie jej jako identyfikatora mogłoby wymagać od użytkowników wpisywania długich nazw ze spacjami i znakami diakrytycznymi. sAMAccountName pozwala logować się klasycznym, krótkim loginem.

Ustaw poprawny Base DN

Parametr set dn określa punkt startowy przeszukiwania Active Directory. Dla domeny moja.domena będzie to:

				
					set dn dc=moja,dc=domena
				
			

To istotne, ponieważ FortiGate używa tej ścieżki do wyszukiwania użytkowników i grup w katalogu.

Wybierz bind type regular i konto serwisowe

Domyślna konfiguracja Active Directory nie zezwala na anonimowe przeszukiwanie katalogu. Dlatego zamiast prostego trybu połączenia należy użyć:

				
					set type regular
				
			

FortiGate zaloguje się wtedy do katalogu przy użyciu wskazanego konta serwisowego. Najlepiej przygotować osobne konto, przeznaczone wyłącznie do tego celu i posiadające ograniczone uprawnienia potrzebne do przeszukiwania katalogu.

W polach username oraz password wpisz dane tego konta. W przykładzie użyto formatu ldap-reader@moja.domena.

LDAPS, DNS i pełna walidacja certyfikatu

Bezpieczne połączenie wymaga trzech powiązanych ustawień:

  • set secure ldaps– przełącza połączenie na LDAPS, domyślnie port 636;
  • set server-identity-check enable – wymusza sprawdzenie tożsamości serwera;
  • set ca-cert AD-RootCA-MojaDomena – wskazuje zaufany Root CA zaimportowany do FortiGate.

FortiGate musi też umieć poprawnie rozwiązać FQDN kontrolera domeny przez DNS. To nie jest detal techniczny, ale warunek poprawnej walidacji. Firewall musi odnaleźć serwer pod nazwą zgodną z certyfikatem, a następnie sprawdzić, czy certyfikat został podpisany przez wskazany urząd certyfikacji.

Konfiguracja LDAPS łączy szyfrowanie, konto serwisowe i zaufany Root CA w jednym profilu LDAP.

Pułapka: Successful nie zawsze znaczy bezpiecznie

To najważniejszy punkt całego wdrożenia. Po aktywacji LDAPS test połączenia może zwrócić status Successful, nawet jeśli weryfikacja certyfikatu serwera nie została skonfigurowana.

Taki wynik potwierdza jedynie, że handshake TLS został wykonany i transmisja jest szyfrowana. Nie oznacza automatycznie, że FortiGate zweryfikował, z kim zestawił połączenie.

Gdy opcja server-identity-check jest wyłączona, urządzenie może zaakceptować dowolny przedstawiony certyfikat. To otwiera drogę do ataku typu man-in-the-middle: ruch jest zaszyfrowany, ale może być szyfrowany do niewłaściwego serwera.

Szyfrowanie bez weryfikacji tożsamości serwera nie daje pełnej ochrony. Dopiero zaufany Root CA, zgodny FQDN i aktywny Server Identity Check budują właściwy łańcuch zaufania.

W GUI należy włączyć Server Identity Check i wybrać właściwy certyfikat CA. W CLI odpowiadają za to polecenia:

				
					set server-identity-check enable
set ca-cert AD-RootCA-MojaDomena
				
			

Dopiero wtedy FortiGate sprawdzi podpis certyfikatu i zgodność nazwy FQDN kontrolera domeny.

Test diagnostyczny połączenia LDAP

Po zapisaniu konfiguracji sprawdź, czy FortiGate potrafi wyszukać użytkownika i poprawnie uwierzytelnić połączenie z katalogiem.

				
					diagnose test authserver ldap AD_LDAP_Secure nazwa_uzytkownika hasło_uzytkownika
				
			

Jeżeli profil LDAP otrzymał inną nazwę niż AD_LDAP_Secure, użyj własnej wartości. Podstaw także dane istniejącego konta, które powinno zostać odnalezione w Active Directory.

Udany test warto interpretować razem z konfiguracją, a nie w oderwaniu od niej. Zweryfikuj, czy profil rzeczywiście ma włączone server-identity-check, wskazany właściwy ca-cert, poprawny FQDN oraz działający DNS.

Lista kontrolna bezpiecznego LDAPS na FortiGate

Przed uznaniem wdrożenia za zakończone przejdź przez krótką listę:

  • kontroler domeny ma certyfikat serwerowy przeznaczony do uwierzytelniania SSL;
  • certyfikat serwerowy zawiera prawidłowy FQDN kontrolera domeny;
  • Root CA został zaimportowany do FortiGate jako certyfikat CA;
  • nazwa Root CA w set ca-cert jest zgodna z nazwą w FortiGate;
  • parametr set server wykorzystuje FQDN, a nie adres IP;
  • FortiGate poprawnie rozwiązuje FQDN przez DNS;
  • połączenie używa set secure ldaps;
  • włączono set server-identity-check enable;
  • do przeszukiwania katalogu używane jest dedykowane konto serwisowe;
  • test diagnostyczny LDAP kończy się powodzeniem.

Mała zmiana, realna poprawa bezpieczeństwa

Przejście z LDAP na porcie 389 do LDAPS na porcie 636 eliminuje przesyłanie danych uwierzytelniających przez nieszyfrowane połączenie. W małych organizacjach nie musi oznaczać rozbudowanego projektu PKI. Lokalny Root CA, certyfikat serwerowy i kilka komend FortiOS wystarczą, aby zbudować bezpieczne połączenie FortiGate z Active Directory.

Nie pomijaj jednak weryfikacji tożsamości serwera. To właśnie ona rozróżnia połączenie „zaszyfrowane” od połączenia, które rzeczywiście sprawdza, czy komunikuje się z właściwym kontrolerem domeny.

FAQ

Czy LDAPS używa portu 636?

Tak. LDAPS standardowo działa na porcie 636 i zabezpiecza komunikację LDAP przy użyciu TLS.

Nie. W tym scenariuszu można utworzyć lokalny Root CA i podpisany nim certyfikat serwerowy bezpośrednio w PowerShell na kontrolerze domeny.

FortiGate porównuje nazwę serwera z wpisami CN lub SAN w certyfikacie. Adres IP zwykle nie odpowiada nazwie zapisanej w certyfikacie, przez co weryfikacja tożsamości może się nie powieść.

Nie. Taki status może jedynie potwierdzać powodzenie handshake TLS i szyfrowanie ruchu. Pełna ochrona wymaga także aktywnego Server Identity Check oraz wskazania zaufanego certyfikatu CA.

W typowych środowiskach Active Directory warto użyć sAMAccountName. Dzięki temu użytkownicy mogą logować się krótkim loginem zamiast pełnym imieniem i nazwiskiem zapisanym w CN.