Wdrożenie 802.1X w sieci bezprzewodowej na FortiGate oraz w sieci opartej o sprzęt Netgear

Jako część mojej pracy inżynierskiej musiałem skonfigurować mechanizm uwierzytelniania oparty o domenę Active Directory. Założeniem było to, by użytkownicy z podłączonymi komputerami do domeny miały móc się logować bez jakiegokolwiek problemu do dwóch sieci Wi-Fi oraz do portów na switchu. Postaram się opisać jak wszystko skonfigurować od zera.

W każdym przypadku potrzebujemy serwera RADIUS. Są tutaj różne opcje, ponieważ można zainstalować serwer FreeRadius, lecz z faktu, że korzystałem w tym projekcie ze środowiska bazującego na Windowsach skorzystałem z roli Serwera zasad sieciowych (Network Policy Server).

Mechanizm działania jest dosyć prosty: użytkownik wykonuję próbę połączenia się z siecią po czym dostaje odpowiedź od urządzenia (access point lub switch), że musi się dodatkowo autoryzować i ten próbuje dokonać autoryzacji swoim kontem komputera lub aktualnie zalogowanego użytkownika w AD. Access point/switch komunikują się z serwerami RADIUS będąc ich klientami w celu sprawdzenia czy dany użytkownik ma mieć prawo do korzystania z zasobu (definiuje się to na podstawie grup użytkowników/komputerów). W trakcie połączenia klienta RADIUS z serwerem ci wykorzystują klucz współdzielony w celu uwierzytelnienia się. W przypadku, gdy użytkownik jest w grupie zdefiniowanej dla zasady przypisanej do klienta RADIUS – dostaje połączenie. W innym przypadku zostaje odrzucony.

Zanim zaczniemy instalować NPSa musimy mieć wcześniej wdrożony urząd certyfikacji (Usługi certyfikatów Active Directory). Myślę, że wkrótce taki poradnik pojawi się na mojej stronie (jeśli tak się stanie to dodam link tutaj do niego). Tak czy siak, gdy mamy to za sobą to instalujemy tą rolę:

Wybieramy Instalacja oparta na rolach lub oparta na funkcjach. Potem wybieramy serwer z listy, klikamy Dalej > i wybieramy Usługi zasad sieciowych i dostępu sieciowego i Dodaj funkcje. Potem Dalej >, Dalej >, Dalej > i Zainstaluj.

Po tym rola powinna być zainstalowana i powinniśmy zacząć konfigurację serwera.

Konfiguracja RADIUS dla sieci Wi-Fi na FortiGate

W tym scenariuszu będę bazował na urządzeniu FortiWiFi 60E, które ma wbudowaną kartę bezprzewodową. Na początku należy otworzyć okno Serwera zasad sieciowych, po czym zdefiniować nową zasadę poprzez wybranie w oknie Konfiguracja standardowa opcję Serwer usługi RAIDUS na potrzeby bezprzewodowych i przewodowych połączeń 802.1X i klikamy Skonfiguruj połączenia 802.1X.

Na dobrą sprawę nie ma znaczenia czy wybierzemy połączenia bezprzewodowe czy nie, bo i tak będziemy modyfikować zasadę tak, by brała pod uwagę adres IP klienta RADIUS zamiast przeznaczenia, ale z faktu, że to miało być dla Wi-Fi zaznaczamy opcję Bezpieczne połączenia bezprzewodowe i nazywamy jakoś zasadę, np. fortigate wifi.

Na następnej karcie kreatora należy zdefiniować klientów RADIUS, którzy będą się łączyli w ramach zasady RADIUS. Na początku nie ma żadnych, więc należy dodać przyciskiem Dodaj… nowego. Po tym należy zdefiniować pole Przyjazna nazwa, która jest po prostu nazwą klienta, a następnie adres IP lub jego FQDN. Z faktu, że dla moich klientów mam wcześniej przygotowane nazwy DNS, wpisałem po prostu fortigate.serba.local, co w moim przypadku odpowiada adresowi 192.168.30.1. Po tym definiujemy wspólny klucz tajny na dole okienka dwa razy. Powinien być długi i powinniśmy sobie go zapisać, bo taki klucz też trzeba będzie zdefiniować w FortiGate. Po tym zapisujemy i idziemy dalej.

Następnie wybieramy typ protokołu EAP dla tworzonej przez nas zasady i tutaj wybieram opcję Microsoft: Chroniony protokół EAP (PEAP). Gdy klikniemy Konfiguruj…, możemy sprawdzić lub zmienić jaki certyfikat będzie wykorzystywany przy komunikacji z klientem. W moim przypadku certyfikat był już wskazany, a ten się wygenerował po postawieniu AD CS (automatycznie, wystarczyło zrestartować serwer i mogłem się cieszyć certem z własnego urzędu).

Następnie należy dodać grupy, które mogą się autoryzować w ramach tej zasady. W moim założeniu dostęp mają wszyscy użytkownicy i wszystkie komputery będące w domenie, więc dodajemy grupy Użytkownicy domeny oraz Komputery domeny tak jak ja poniżej:

Następny punkt wykonuje się tylko i wyłącznie w przypadku FortiGate’a – definiujemy przesyłany parametr tekstowy, który służy do identyfikacji sieci. To działa tak, że FortiGate jest w stanie szukać polityki z konkretnym parametrem. Jeśli w różnych sieciach autoryzujemy różne grupy, możemy mieć takie ciągi znaków różne w różnych regułach, np. siec-handlowcy i siec-marketing, dzięki czemu dwie grupy mogą być inaczej brane pod uwagę przy logowaniu.

W oknie Konfigurowanie elementów kontroli ruchu w sieci klikamy po prawej Konfiguruj…, następnie wybieramy kartę Atrybuty specyficzne dla dostawcy. Domyślnie jest zdefiniowany jeden o nazwie atrybutu Ventor-Specific, klikamy na niego i Edytuj…. Po tym pojawi się okno Informacje o atrybutach i tutaj klikamy Dodaj…, a następnie otworzy się kolejne okno (szał!) Informacje o atrybutach specyficznych dla dostawcy i tutaj należy podać kod dostawcy 12356, zaznaczyć opcję Tak, jest zgodny pod kątem zgodności z RADIUS RFC i kliknąć Konfiguruj atrybut…. Tutaj zmieniamy Format atrybutu na Ciąg i wpisujemy wartość, którą chcemy określić daną politykę, byśmy mogli ją potem wskazać w FortiGate. W moim przypadku to wifi-fortigate. Ten parametr jest ogólnie opcjonalny; zobaczycie za niedługo dlaczego. Po tym wszędzie klikamy OK i Dalej na końcu.

Okienny rozgardiasz związany z milionem podopcji.

W ten sposób mamy prawie wszystko gotowe po stronie serwera:

Pod koniec trzeba zmienić nieco parametry warunkowe dla naszej zasady. Otwieramy Zasady żądań połączeń, znajdujemy naszą zasadę, klikamy prawym i Właściwości. W karcie Warunki usuwamy wszystko i klikając na dole Dodaj… dodajemy nowy warunek: Adres IPv4 klienta dostępu. Po tym jeszcze raz Dodaj… i tutaj podajemy adres IP naszego FortiGate’a.

Końcowo powinno wyglądać to tak (jeśli u Was też to tak wygląda to można zapisać ustawienia):

Po tym warto zmienić jeszcze 1 rzecz: metody uwierzytelnieniaw w zasadach sieciowych. W Zasady > Zasady sieciowe odnajdujemy naszą zasadę, klikamy na nią prawym i Właściwości. W zakładce Ograniczenia, w opcji Metody uwierzytelnienia odznaczamy opcje uwierzytelnianie z szyfrowaniem firmy Microsoft (MS-CHAP) i zostawiamy zaznaczone Uwierzytelnianie z szyfrowaniem firmy Microsoft wersja 2 (MS-CHAP-v2). Jeśli macie tak, jak na zrzucie ekranu – można zapisać.

Nie można zapomnieć o tym, by odblokować port dla RADIUSa na firewallu. Ruch musi być odblokowany dla portów TCP i UDP 1812, 1813, 1645, 1646 (dwa ostatnie dla starych urządzeń) dla połączeń przychodzących i wychodzących pomiędzy serwerem RADIUS a jego klientami (w naszym przypadku FortiGate, AP i switch z Netgear). Ja akurat zrobiłem na taką potrzebę politykę GPO:

Po zapisaniu wystarczy kliknąć prawym OU, w którym znajdują się serwery NPS (w moim przypadku są postawione na kontrolerze domeny) i wybrać Aktualizacja zasad grupy…, a następnie potwierdzić.

Efekty widać tutaj:

Tak samo odblokowujemy ruch do reguł wychodzących.

W interfejsie FortiGate, w User & Authentication > RADIUS Servers należy kliknąć Create New i zdefiniować profil w przykładzie jak niżej, przy czym w moim przypadku w IP/Name podałem FQDNy serwerów NPS, które posiadam (skonfigurowałem tak samo drugi serwer, by mieć redundancję, na koniec pokażę jak skopiować z serwera drugi wszystkie ustawienia). Do tych serwerów w polu Secret definiujemy klucz tajny, który definiowaliśmy na początku w zasadzie.

Następnie, po zapisaniu tych ustawień należy w User & Authentication > User Groups należy utworzyć grupę klikając Create New oraz w Remote Groups kliknąć Add, potem z listy Remote Server wybieramy wcześniej zdefiniowany profil RADIUSa i w Groups wybieramy Any jeśli nie chcemy określać się co do zasad, które zdefiniowaliśmy lub wybierając Specify możemy określić parametr, który zdefiniowaliśmy wcześniej w polu specyficznym dla dostawcy (w naszym przypadku wifi-fortigate).

Mając to trzeba edytować profil SSID w WiFi & Switch Controller > SSIDs lub stworzyć nowy klikając Create New > SSID. W Name definiujemy nazwę profilu (w moim przypadku (serba-corp-wifi), potem w WiFi Settings, w SSID definiujemy nazwę WiFi (w moim przypadku serba.local), w Security Mode wybieramy WPA2 Enterprise i w Authentication należy wybrać RADIUS Server i wybrać profil, który wcześniej zdefiniowaliśmy (w moim przypadku serba.local_radius). Mając zdefiniowane SSID możemy je przypisać do FortiAPków lub do interfejsu Software Switch, w którym są interfejsy, którym są podłączeni użytkownicy przewodowo. Poniżej przykład:

W ten sposób możemy zalogować się do sieci Wi-Fi nawet przez telefon z Androidem:

Tutaj ustawienia z telefonu. Warto dodać certyfikat CA do telefonu, by móc go wybrać.
I tutaj efekt końcowy.

Efekt końcowy widoczny z komputera, który jest członkiem AD:

Możemy to też przygotować wcześniej dodatkową polityką GPO, która dodaje sieć Wi-Fi o naszym SSID tak jak w zrzucie ekranu poniżej, ponadto niżej też konfiguracja zabezpieczeń dla profilu:

Konfiguracja RADIUS dla sieci Wi-Fi na AP od Netgear

Przykład jest prezentowany na urządzeniu Netgear WAC505. Scenariusz jest prawie taki sam, jak w przypadku definicji zasady dla FortiGate’a z drobną różnicą – nie definiujemy żadnego atrybutu specyficznego dla urządzenia i definiujemy dodatkowego klienta RADIUS na początku kreatora. Tak samo definiujemy inne ustawienia. W mojej konfiguracji klient posiada FQDN wac.serba.local, który odpowiada adresowi IP 192.168.30.253. Ten model, który mamy w przykładzie obsługuje też konfigurację przez chmurę, ja akurat definiuję ustawienia lokalnie. Pewnie jak bym miał takich access pointów 10 to definiowałbym to przez chmurę, bo łatwiej wszystko skonfigurować.

Na początku w w Configuration > Security > RADIUS Settings definiujemy adresy IP serwerów RADIUS, porty wykorzystywane do komunikacji oraz klucze współdzielone.

Potem, w Configuration > Wireless > Basic w karcie WLAN Settings należy wybrać SSID, w którym chcemy umożliwić na autoryzację kontami AD i wybrać w Network Authentication opcję WPA2-enterprise.

Po tym możemy dodać tak samo profil Wi-Fi jak w przypadku FortiGate’a. Jak widać poniżej, sieć działa:

I widok z komputera będącego w AD:

Konfiguracja RADIUS dla sieci przewodowej ze switchem marki Netgear

W tym scenariuszu wdrożenia posługiwałem się przełącznikiem Netgear GS716T.

Scenariusz wygląda bardzo podobnie jak w poprzednich politykach – tworzymy nową zasadę na serwerze zasad sieciowych (NPS) korzystając z opcji Bezpieczne połączenia przewodowe (Ethernet) w oknie Wybieranie typu połączeń 802.1X, usuwamy warunki połączenia klienta dla zasad żądań połączeń i definiujemy adres klienta jako adres switcha (w moim przypadku jest to adres netgear.serba.local (192.168.30.254).

Tak wyglądają warunki dla zasad żądań połączeń:

Tak wyglądają dla zasad sieciowych:

I tak wygląda profil klienta RADIUS dla switcha:

Dalsza część jest do ustawienia na switchu. Zaczynamy od zdefiniowania adresów DNS, które mają być wykorzystywane przez przełącznik (w System > Management > DNS > DNS Configuration) poprzez dodanie wszystkich adresów kontrolerów domeny w naszej sieci. Po wpisaniu wartości w puste pole należy kliknąć na dole Add.

Następnie w System > Management > IP Configuration należy się upewnić, że adres IP switcha się pokrywa z tym, który zdefiniowaliśmy w zasadzie w NPSie. W naszym przypadku jest w porządku.

Następnie w Security > Management Security > RADIUS > Server Configuration należy dodać wpisy adekwatne do środowiska:

  • Server Address: dc1.serba.local
  • Authentication Port: 1812
  • Secret Configured: Yes
  • Secret: tutaj podajemy klucz współdzielony
  • Active: Primary/Secondary, wybieramy w zależności tego, który serwer ma być wykorzystywany w autoryzacji w pierwszej kolejności
  • Message Authenticator: Disable

Po tym klikamy na dole Add i tak samo dodajemy serwer dc2.serba.local. Efekt końcowy wygląda tak:

Następnie w Security > Management Security > Authentication List > Dot1x Authentication List należy ustawić dla pola dot1xList w kolumnie 1 wartość Radius. i zatwierdzić kliknięciem Apply.

Teraz, w Security > Port Authentication > Advanced > Port Authentication należy zdefiniować w kolumnie Port Control odpowiednią opcję. Możliwości to:

  • Auto – ustawienie zależy od globalnego ustawienia pod kątem autoryzacji (ustawimy je na końcu). W domyślnych ustawieniach przełącznika autoryzacja nie jest wymagana.
  • Authorized – podłączone urządzenia w tym trybie nie przechodzą żadnej autoryzacji nawet, gdy ta jest włączona globalnie.
  • Unauthorized – brak możliwości autoryzacji pod wskazanym portem.
  • MAC Based – ustawienia są bazowane na tym, co jest zdefiniowane w ACL dla adresów MAC.

Dla wykonania testu ustawiłem port 1 i 2 w trybie Auto, resztę w trybie Authorized. Dzięki temu możemy na 2 portach testować czy komunikacja z RADIUS działa poprawnie, by potem móc ja włączyć dla reszty switcha.

Na końcu, w Security > Port Authentication > Advanced > 802.1X Configuration włączamy opcję Port Based Aurthentication State i zapisujemy klikając Apply. W ten sposób wszystko jest skonfigurowane po stronie switcha, więc zobaczmy efekty na urządzeniu, które jest w AD i urządzeniu, które w nim nie jest.

Obsługa 802.1X w Windowsie jest domyślnie wyłączona, więc włączamy ją zmienieniem ustawień usługi Automatyczna konfiguracja sieci przewodowej zmieniając Typ uruchomienia na Automatyczny oraz klikając Uruchom, by zaczęła działać.

Wygodniej jest stworzyć politykę GPO, która to nam ustawi na każdym komputerze, więc ta powinna mniej więcej wyglądać tak (dodam, że w tej polityce zmiana ustawień usługi WlanSvc okazała się niepotrzebna):

Tutaj można zobaczyć efekt końcowy:

Ponadto, w Security > Port Authentication > Advanced > Port Summary można zobaczyć, że na porcie 1 Port Status to Authorized:

W przypadku komputera, który nie jest członkiem AD akcja wygląda tak:

I od razu Port Status:

I to by było na tyle.

FortiGate – Failed to save some changes: Value conflicts with system settings.

Pewnie też mieliście okazję zobaczyć ten komunikat i przyznam szczerze, że jest on trochę irytujący, bo nie da się z tym nic zrobić z poziomu GUI. Trzeba z CLI. Problem jest związany z funkcją Content Disarm and Reconstruction, która jest dostępna tylko w trybie inspekcji Proxy. Rozwiązania są tutaj:

Na początku trzeba stworzyć profil dla protokołów w CLI:

anzena-forti # config firewall profile-protocol-options 
anzena-forti (profile-protocol~ons) # edit nowy
new entry 'nowy' added
anzena-forti (nowy) # config smtp
anzena-forti (smtp) # set options fragmail oversize
anzena-forti (smtp) # end
anzena-forti (nowy) # end
anzena-forti #

Potem taki profil trzeba przypisać do polityk firewalla, w których chcemy używać profilu AntiVirus z włączoną wspomnianą opcją. Należy znaleźć ID i do takiego ID polityki firewalla przypisać opcje protokołów, które właśnie zdefiniowaliśmy. Będąc w Policy & Objects > Firewall Policy i przechodząc do szczegółów wybranej reguły zobaczymy jej szczegóły (i potrzebne ID):

Przypisanie profilu protokołów wygląda dla takiej polityki w ten sposób:

anzena-forti # config firewall policy 
anzena-forti (policy) # edit 13
anzena-forti (13) # set utm-status enable
anzena-forti (13) # set profile-protocol-options nowy 
anzena-forti (13) # end
anzena-forti #

FortiGate i JPK w urzędach

Ten krótki post zostawiam dla pań i panów pracujących w IT, którzy w FG mają problemy z przepuszczeniem ruchu dla wysyłek JPK. Takie coś się wysyła w urzędach gminy i miast (nie wiem jak jest w starostwach powiatowych) i robi to ta aplikacja. Ostatnio siedziałem nad tym problemem z jednym z moich klientów i rozwiązanie jest następujące – na początku należy sobie zadać pytania:

  • Z jakich komputerów owe JPK jest wysyłane?
  • Czy te komputery mają zmienny adres IP?
  • Czy jednym z komputerów do JPK jest laptop? Jeśli tak, używa karty bezprzewodowej w sieci urzędu?

Po ustaleniu tego musimy zrobić politykę, w której przepuszczamy ruch dla konkretnych adresów bez dokładnego filtrowania aplikacji. Dlatego musimy mieć zawsze te same adresy hostów, które te JPK wysyłają. Jeśli mamy do czynienia z laptopem to musimy zrobić w DHCP rezerwację zarówno dla karty przewodowej jak i bezprzewodowej. Na początku warto zacząć od dodania wspomnianych rezerwacji, zrobimy to w ustawieniach interfejsu lokalnego, w IP Address Assignment Rules (możemy wpisać adresy ręcznie lub dodać je z listy adresów, które dostały swoją dzierżawę w DHCP automatycznie):

Potem warto w Device Inventory zapisać urządzenia do listy adresów – można to zrobić ręcznie, ale jeśli na interfejsach mamy włączoną opcję Device Detection to tutaj samo się znajdzie, o tak:

Tutaj tak samo – można takie adresy sobie zdefiniować ręczne w Addresses, klikając w Create New > Address, poniżej przykład definicji takiego komputera. Warto dodać, że tutaj zdefiniowałem adres z końcówką /32 – to oznacza wskazanie na konkretny adres hosta, poza tym określiłem tutaj w Interface interfejs, do którego urządzenie jest podłączone. To oznacza, że ten adres można wykorzystać tylko w politykach dotyczących tego właśnie interfejsu.

Po tym warto stworzyć sobie grupę użytkowników, którzy łączą się do serwerów na wysyłkę JPK. Na na wdrożeniu nazwałem Nadawcy JPK. Wtedy to jest jaśniejsze w konfiguracji. Do tej grupy dodajemy wszystkie komputery, które mają JPK wysyłać.

Takie dodanie obiektów wygląda tak:

Mając to, robimy w taki sam grupę adresów, ale tym razem dla adresów serwerów i one powinny wyglądać tak:

Musimy zrobić takie 4 obiekty z różnymi FQDNami:

  • e-dokumenty.mf.gov.pl
  • mf.gov.pl
  • blob.am5prdstr10a.store.core.windows.net
  • blob.am3prdstr10a.store.core.windows.net

Potem trzeba (nie trzeba, ale warto) zrobić grupę, którą można nazwać np. Serwery JPK i dodać te adresy do grupy. Na końcu trzeba stworzyć politykę, która z interfejsu lokalnego do interfejsu WAN przepuszcza ruch z grupy Nadawcy JPK do grupy Serwery JPK. Jeśli chodzi o porty – puściłem tutaj dowolne porty, bo nie byłem w stanie znaleźć portów, które są wykorzystywane w snifferze. Wydaje mi się, że to były porty HTTP+S, ale gdy stworzyłem taką politykę z tymi portami to nie byłem w stanie wysłać JPK.

Na samym końcu taką politykę powinniśmy mieć zdefiniowaną nad ogólnymi politykami dla użytkowników, na przykład w ten sposób:

I gotowe.

Wyświetlanie listy przydziałów z DHCP w FortiGate (CLI)

anzena-forti # anzena-forti # execute dhcp lease-list internal7
internal7
  IP            MAC-Address             Hostname            VCI                 SSID                AP                  Expiry
  192.168.30.102        00:0c:29:2e:9a:42       endpoint-3          MSFT 5.0                                                    Wed Jun 17 13:07:42 2020
  192.168.30.103        00:0c:29:23:aa:4a       xubuntu                                                                         Wed Jun 17 22:03:58 2020
  192.168.30.100        00:0c:29:c9:58:c6       ENDPOINT-1          MSFT 5.0                                                    Fri Jun 19 10:30:52 2020
  192.168.30.104        00:0c:29:7c:6a:73       gns3vm                                                                          Fri Jun 19 11:38:13 2020
  192.168.30.101        00:0c:29:27:fc:19       endpoint-4          MSFT 5.0                                                    Tue Jun 23 08:04:09 2020

Dodanie dodatkowych kontrolerów domeny w FortiGate do profilu LDAP, włączenie komunikatów o wygasających hasłach i opcja na odnowienie ich

Niestety, tych opcji aktualnie (w wersji FortiOS 6.4.1 jeszcze nie ma w interfejsie, więc trzeba to zrobić przez CLI. Dla przykładu mój profil i poniżej przykład dodania dodatkowych kontrolerów domeny:

anzena-forti # config user ldap
anzena-forti (ldap) # edit serba.local
anzena-forti (serba.local) # set secondary-server dc2.serba.local
anzena-forti (serba.local) # set tertiary-server dc3.serba.local
anzena-forti (serba.local) # set password-expiry-warning enable
anzena-forti (serba.local) # set password-renewal enable
anzena-forti (serba.local) # end

Zmiana nazwy certyfikatu CA w FortiGate

Dzięki temu certyfikat nie jest nazwany domyślnie tak jak na górze, lecz tak jak ten na dole:

anzena-forti # config vpn certificate ca
anzena-forti (ca) # rename CA_CERT_2 to SERBA-CA
table name 'CA_CERT_2' is not found!
Command fail. Return code 2 //jak widać wielkość liter ma znaczenie!
anzena-forti (ca) # rename CA_Cert_2 to SERBA-CA
anzena-forti (ca) # end

Wake on LAN na FortiGate i Mikrotiku

Rachunki za prąd mi nieźle podskoczyły, więc od niedawna włączam kompa tylko wtedy, jeśli go potrzebuję. Dlatego wcześniej łączę się do domu po VPNie i korzystam z opcji Wake on LAN – dzięki czemu mogę zdalnie włączyć komputer, bo niestety on nie ma interfejsu IPMI, ani nie ma w domu drugiej osoby, która mi ten przycisk wciśnie.

FortiGate:

execute wake-on-lan lan 00:d8:61:04:20:69

gdzie lan to nazwa intefejsu, do którego jest podpięty mój komputer, a następnie jest adres MAC mojej karty sieciowej w komputerze.

Mikrotik:

tool wol interface=ether4 mac=00:d8:61:04:20:69

Tutaj tak samo jak wyżej, jedynie nieco inne polecenie.