Pozn.: Popis v článku vychází z FortiGate FG-300E s FortiOS verzí 6.2.3. Který je nakonfigurovaný jako FGCP cluster a využívá VDOM.
Host Check, aneb kontroly klienta při připojení na portál
FortiGate, ve spolupráci s FortiClientem, umožňuje v průběhu přihlašování ověřit různé parametry na klientovi a podle výsledku kontroly teprve povolit připojení do SSL VPN. Fortinet tyto kontroly/informace souhrnně označuje jako Host Check. I když jsem v dokumentaci FortiClienta žádnou zmínku o této vlastnosti nenalezl.
Kontrolovat můžeme určité verze OS (Windows a Mac), na Windows přítomnost Antiviru a Firewallu, klientskou MAC adresu, přítomnost určitého souboru, procesu nebo klíče v registrech.
Nastavení se provádí v rámci SSL-VPN Portal a většinu věcí musíme provést pomocí příkazové řádky (CLI), pouze malou část lze nastavit v GUI.
Pozn.: Stále si stěžuji na dokumentaci Fortinetu, tak pro tuto oblast je to ještě horší. Řada věcí se musí konfigurovat v CLI a dokumentace příkazů je téměř nulová. Takže můj popis vychází z testů a popisuje moji představu fungování.
Jakou verzi FortiClient použít a chybové hlášky
Je tu jedna zásadní a důležitá věc, která mne stála týden času. Pokud používáme zdarma verzi klienta, tak musíme použít FortiClient 6.0.x (testoval jsem 6.0.9) a ne FortiClient VPN 6.2.x (zkoušel jsem 6.2.6). Od verze FortiClient 6.2.0 začalo jít o placený produkt, který musí být řízený pomocí EMS (Enterprise Management Server). Fortinet dává k dispozici zdarma pouze omezenou verzi FortiClient VPN 6.2. Ta neobsahuje jiné komponenty než SSL a IPsec VPN klient (i když je instalační balíček stejně velký jako plný FortiClient), ale i tyto možnosti jsou omezené.
Tento klient (FortiClient VPN 6.2.x) nepodporuje žádnou funkci Host Check. Pokud je na portále Host Check zapnuto, a klient se pokusí přihlásit, tak vždy dostane chybu.
Unable to establish the VPN connection. The VPN server may be unreachable. (-14)
V žádné Fortinet dokumentaci jsem nenalezl informaci, že tuto verzi klienta nelze použít pro kontroly na klientovi. Takže jsem dlouho řešil, proč mi žádná kontrola nefunguje. Až jsem v jedné diskuzi narazil na malou zmínku a vyzkoušel jsem starší verzi klienta. A vše začalo fungovat. Chtěl jsem k tomu nalézt nějakou informaci od Fortinetu. Chvíli jsem myslel, že jde o funkci Endpoint Telemetry, kde je u vlastností FortiClient EMS and FortiGate Endpoint Licenses poznámka Requires FortiClient to be managed by EMS
. Ale tato funkce je patrně něco jiného a stejná poznámka je i u starší verze.
Pokud máme verzi FortiClient, který podporuje kontroly klienta, a nějaká kontrola je nastavena. Tak v případě, že kontrola neprojde, dostaneme chybu.
Your PC does not meet the host checking requirements set by the firewall. Please check that your OS version or antivirus and firewall applications are installed and running properly or you have the right network interface. (-455)
Při testech jsem ještě narazil na bug, který se projevil ve FortiClient 6.0.9 i 6.2.6 (takže je to možná chyba FortiOS 6.2.3). Pokud mám speciální Realm, kde mám zapnutou autentizaci certifikátem. A standardní (kořenový) Realm, kde certifikát vyžadován není, kam se nyní přihlašuji. K oběma je přiřazený portál, kde je nějaká kontrola hosta. Tak když kontrola neprojde (tedy na 6.2.6 vždy), tak vrátí nesmyslnou chybu, že je potřeba použít certifikát. Pokud kontrola projde, tak samozřejmě certifikát nevyžaduje.
The server you want to connect to requests identification, please choose a certificate and try again. (-455)
Kontroly pro nepodporovaný OS a webový prohlížeč
Pro využití funkce Host Check potřebujeme OS Windows (Linux a Mac jsem zatím nezkoušel, ale v dokumentaci FortiOS 5.2 je poznámka, že kontrola integrity hosta je možná pouze pro klienty běžící na platformě Microsoft Windows, a v jednom KB se uvádí, že je podporován pouze Windows klientský OS nikoliv Windows Server) a aplikaci FortiClient.
Obecně další možnost je připojení prohlížečem k Web VPN. Ve webu žádné kontroly nefungují (dokumentace FortiOS 5.2 sice uvádí, že Host Check je aplikovatelný na Web VPN i Tunnel VPN, někde jsem četl, že je tam i plugin pro prohlížeč, ale mě nic nefunguje), přesto se přihlásíme. Ale toto chování můžeme změnit, když vypneme přeskočení kontrol pro prohlížeč. Na druhou stranu můžeme chtít, aby se kontroly prováděly pouze při navázání tunelu, ale připojení na web fungovalo vždy (nabízí omezené funkce).
config vpn ssl web portal edit "VPN1" set skip-check-for-browser disable next end
Mobilní klienti (testoval jsem Android, Legacy i nového klienta) jsou patrně brány jako nepodporovaný OS. Protože po nastavení kontrol klienta (které nemohou projít) se z Android klienta připojíme. Ve chvíli, kdy vypneme přeskočení kontrol pro nepodporovaný OS, tak se již nepřipojíme a ani nedostaneme žádnou informační chybu. Je to možnost, jak jednoduše zablokovat připojení z mobilních klientů (a možná i dalších OS).
config vpn ssl web portal edit "VPN1" set skip-check-for-unsupported-os disable next end
MAC Host Check - kontrola klientských MAC adres
Dokumentace vpn ssl web portal, Technical Tip: MAC host check on SSL VPN, Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check
V parametrech portálu můžeme konfigurovat omezení, že je možné připojení pouze z určitých MAC adres. Když se vzdálený klient přihlašuje na portál, tak FortiGate ověří jeho klientskou MAC adresu a pouze některá zařízení se připojí do tunelu. Vypadá to, že se kontrolují MAC adresy všech síťových adaptérů klienta (je tedy jedno, zda v konfiguraci použijeme Ethernet nebo Wireless adaptér).
Konfigurace se provádí v CLI. Povolíme kontrolu MAC adres a nastavíme akci pro případ, že adresa odpovídá dále definovanému pravidlu. Vytvoříme pravidla, která obsahují MAC adresy. Zadat můžeme přímo MAC adresu nebo podmnožinu MAC adres.
V MAC adresách se jako oddělovač musí použít dvojtečka, více adres oddělíme mezerou. Dokumentace takové detaily (jako vstupní formát či adresa jakého interface se použije) neuvádí, takže toto je vypozorováno z praxe. Pokud zkusíme v příkazu zadat MAC adresu třeba s pomlčkami místo dvojteček, tak hned dostaneme chybu, že to není validní MAC adresa.
config vpn ssl web portal edit <name> set mac-addr-check enable set mac-addr-action allow config mac-addr-check-rule edit <name> set mac-addr-list <addr1> <addr2> set mac-addr-mask {integer 1 - 48} next end end
Příklad konfigurace, kde jsou vyjmenovány povolené tři MAC adresy.
config vpn ssl web portal edit "VPN1" set mac-addr-check enable set mac-addr-action allow config mac-addr-check-rule edit "Rule1" set mac-addr-mask 48 set mac-addr-list 78:2b:cb:ac:2c:a3 00:09:0f:fe:00:01 00:05:9a:3c:7a:00 next end end
Příklad pravidla, kde se používají podmnožiny (rozsahy) adres, který by měl pokrýt veškeré MAC adresy (pro test).
edit "Rule1" set mac-addr-mask 1 set mac-addr-list 00:00:00:00:00:00 80:00:00:00:00:00 next
Debug informace
Kontrola MAC adres by měla být součástí funkce HostCheck. Bohužel se mi nepovedlo najít, jak by se dala debugovat tato funkce. Když zapneme debug pro SSL VPN
diagnose debug application sslvpn -1 diagnose debug enable
a klient je FortiClient VPN 6.2.6, tak se v logu objeví pouze následující.
[9314:FWINT:41b]login_succeeded:523 redirect to hostcheck [9314:FWINT:41b]User Agent: FortiSSLVPN (Windows NT; SV1 [SV{v=02.01; f=07;}])
Žádná informace ani o tom, že selhalo ověření MAC adresy nebo vůbec Host Check, natož něco detailnějšího. Pokud máme klienta FortiClient 6.0.9, tak je situace o malinko lepší.
[9314:FWINT:6ae]login_succeeded:523 redirect to hostcheck [9314:FWINT:6ae]User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) [SV{v=01.01;}] [9314:FWINT:6ae]req: /remote/hostcheck_validate [9314:FWINT:6ae]host check result:0 0000,10.0.18362,00:05:9a:3c:7a:00|00:09:0f:aa:00:01|2c:d0:5a:b8:42:db
Poznámky
Když mi zpočátku kontrola MAC adres vůbec nefungovala, tak jsem pročítal různá fóra. Našel jsem jen pár příspěvků, většinou k verzi FortiOS 5.2. Kde lidé píší, že to částečně funguje, ale pro některé klienty se špatně načítá MAC adresa (je tam zmíněn i nějaký oficiální bug). Také často uvádí, že jim nefunguje blokování pro připojení z mobilních zařízení, která se připojí vždy. To jsem zjistil, že způsobuje výchozí natavení, kdy se nemá kontrola provádět na nepodporovaném OS (již popsáno výše). Ale že jsou mobilní klienti nepodporovaný OS, mi přijde velmi špatné.
config vpn ssl web portal edit "VPN1" set skip-check-for-unsupported-os disable set skip-check-for-browser disable next end
OS Host Check - omezení na určitou verzi OS
Dokumentace Verifying remote user OS and software, vpn ssl web portal, vpn ssl web host-check-software, Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check
FortiClient nám může zjistit verzi operačního systému a případně i instalované opravy. Bohužel podpora OS je omezená, asi na Windows a Mac. Tady mi hlavně vadí, že se nedetekují mobilní OS. Konfigurace se dá provést v GUI a CLI.
- (VDOM) > VPN > SSL-VPN Portals
- zatrhneme Restrict to Specific OS Versions
- vidíme tabulku s některými verzemi Windows a Mac, můžeme nastavit Allow, Deny, Check up to date
Debug informace a verze Windows
Když zapneme debug SSL VPN, a máme podporu na straně klienta, tak se v jednom řádku loguje výsledek kontroly. Druhá hodnota je právě verze Windows (BTW opět jsem nikde nenalezl popis tohoto debug řádku).
[9315:FWINT:6d0]host check result:0 0000,10.0.17134,00:05:9a:3c:7a:00|00:ff:8b:e3:54:fa
V tomto formátu si ji můžeme zobrazit třeba příkazem systeminfo.exe
OS Version: 10.0.17134 N/A Build 17134
Konfigurace pomocí CLI
Při konfiguraci pomocí příkazové řádky nejprve zapneme kontrolu OS a pak definujeme chování pro jednotlivé podporované verze OS. Seznam předdefinovaných OS (který nemůžeme měnit) se nabídne
FW1 (VPN1) # config os-check-list ? name Name. macos-catalina-10.15 macos-high-sierra-10.13 macos-mojave-10.14 macos-sierra-10.12 os-x-el-capitan-10.11 os-x-mavericks-10.9 os-x-yosemite-10.10 windows-7 windows-8 windows-8.1 windows-10 windows-2000
Konfigurace v CLI je uvedena níže. Výchozí akce je povolení (Allow
). Pokud zvolíme check-up-to-date
, tak můžeme také kontrolovat Build / Patch Level. Minimální hodnotu zadáváme v příkazu latest-patch-level
. Pro Windows 10 se kontroluje číslo sestavení uvedené ve verzi OS. V příkladu výše Build 17134
, když nastavíme hodnotu 17000, tak je test OK, hodnota 18000 již neprojde.
config vpn ssl web portal edit "VPN1" set os-check enable config os-check-list "windows-10" set action check-up-to-date set tolerance 0 set latest-patch-level 17000 end next end
AV, FW Host Check - kontrola přítomnosti antiviru a firewallu
Dokumentace SSL VPN tunnel mode host check, , Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check, vpn ssl web portal, vpn ssl web host-check-software
Další kontrola na klientovi, kterou může provádět FortiClient (správný klient na správném OS) ve spolupráci s FortiGate, je přítomnost bezpečnostního SW obecně Antivirus a Firewall. Konfigurace se provádí pro určitý portál. Základní povolení můžeme provést v GUI, ale všechny detaily nastavíme až v CLI.
- (VDOM) > VPN > SSL-VPN Portals
- zatrhneme Host Check
- volíme AntiVirus, Firewall nebo oboje
Podle Technical Tip: FortiClient Host Checker Support for Windows Operating Systems including Windows Server (článek také popisuje, jak otestovat, že Windows detekuje náš AV/FW) detekuje FortiClient bezpečnostní software pomocí Windows Security Center (čte WMI namespace nebo použije Win32API funkci) a GUID produktu. Ve FortiOS je definována řada produktů, pokud zapneme obecně kontrolu AV či FW, tak se (pravděpodobně) detekuje přítomnost libovolného z nich. Seznam si můžeme vypsat v CLI (v příkladu níže je pouze první položka).
FW1 (host-check-software) # show config vpn ssl web host-check-software edit "FortiClient-AV" set guid "1A0271D5-3D4F-46DB-0C2C-AB37BA90D9F7" next
Konfigurace pomocí CLI
Pomocí CLI můžeme nastavit to samé jako v GUI, zapnutí pomocí hodnot av
, fw
či av-fw
.
config vpn ssl web portal edit "VPN1" set host-check [none|av|fw|av-fw|custom] next end
Ale v CLI můžeme nastavit i více. Můžeme zadat detekci pouze určitého AV/FW pomocí custom
a předdefinovaného produktu. Můžeme přidat i periodické opakování kontroly, hodnota 0
znamená kontrolu pouze při připojení.
config vpn ssl web portal edit "VPN1" set host-check custom set host-check-policy AVG-Internet-Security-FW Trend-Micro-FW ESET-Smart-Security-AV set host-check-interval 0 next end
Přidání nové bezpečnostní aplikace
Pokud náš bezpečnostní software není v seznamu na FortiGate, tak jej můžeme doplnit. Návod, jak zjistíme GUID produktu pomocí wbemtest.exe
je v článku Adding custom host check definitions for FortiGate SSL VPN host check feature (skoro to samé Technical Note: How to add non listed 3rd Party AntiVirus and Firewall product to the FortiGate SSL VPN Host check). Vytvoříme novou definici a případně můžeme omezit i určitou minimální verzi produktu.
config vpn ssl web host-check-software edit MyAV set type av set guid "768124D7-F5F7-6D2F-DDC2-94DFA4017C95" set version "4.9" next end
Debug informace
Když zapneme debug SSL VPN, a máme podporu na straně klienta, tak se v jednom řádku loguje výsledek kontroly. První hodnota ukazuje výsledek kontroly (je to stejné jako pro ověření souboru, registrů nebo procesu). Pokud kontrola neprojde, tak je 4 0000
, pokud projde 4 0100
.
[9314:FWINT:6e2]host check result:4 0000,10.0.17134,78:2b:cb:ac:2c:a3
File, Registry, Process Host Check - kontrola existence klíče v registrech, souboru nebo procesu
Dokumentace vpn ssl web portal, vpn ssl web host-check-software, Technical Tip: Configuring custom registry checks for SSL VPN, Technical Tip: Checking AD domain of host connecting to a SSL VPN tunnel, Configuring SSL VPN host check based on MD5 fingerprint, Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check
Pomocí vlastního pravidla můžeme také kontrolovat existenci a případně hodnotu nějakého klíče v registrech. Existenci souboru, případně včetně MD5 hashe. Nebo přítomnost běžícího procesu. Veškerá konfigurace se provádí v CLI. V rámci pravidla můžeme provádět více kontrol či ověřovat více položek.
Obecná konfigurace vypadá následně, řada příkazů zůstává ve výchozích hodnotách.
config vpn ssl web host-check-software edit <name> config check-item-list edit <id> set action [require|deny] set type [file|registry|process] set target {string} set version {string} set md5s <id1>, <id2>, ... next end next end
Kontrola klíče v registrech
Pro kontrolu registrů musíme zadat cestu v registrech (Key a Subkey) a jméno hodnoty (Value Name), případně můžeme kontrolovat data hodnoty (Value Data). Formát zadání
Key\Subkey\Subkey:ValueName==ValueData
Při zadávání v CLI musíme pro cestu používat jedno lomítko, ale pokud si vypíšeme konfiguraci, tak uvidíme lomítka zdvojená (ale pokud bychom je zdvojená zadali, tak se uloží čtyři). Místo názvů kořenových klíčů můžeme použít i jejich zkratky, například HKEY_LOCAL_MACHINE = HKLM
, HKEY_CURRENT_USER = HKCU
.
Příklad kontroly registrů. Hodnota, kde je uložen název domény.
config vpn ssl web host-check-software edit TestRegistry config check-item-list edit 1 set type registry set target "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters:Domain==firma.local" next end end
Aplikace pravidla
Aplikace kontrolního pravidla na portál se provede následně.
config vpn ssl web portal edit "VPN1" set host-check custom set host-check-policy "TestRegistry" next end
Kontrola souboru
Pokud chceme kontrolovat přítomnost souboru. Tak zadáme cestu (s jedním lomítkem) a jméno souboru. Pokud chceme přesnější specifikaci, tak můžeme použít verzi souboru (nevím, jak se kontroluje, ale v příkladu níže stačí zadat 11 a funguje, 12 nefunguje). Případně kontrolovat MD5 hash souboru.
config vpn ssl web host-check-software edit TestFile config check-item-list edit 1 set type file set target "%programfiles%\internet explorer\iexplore.exe" set version "11.0.17134.1" set md5s "6465cb92b25a7bc1df8e01d8ac5e7596" next end end
Kontrola aplikace/procesu
Poslední možnost je kontrolovat běžící aplikaci/proces. Identifikujeme názvem souboru a můžeme také omezit podle verze a MD5 hash.
config vpn ssl web host-check-software edit TestProcess config check-item-list edit 1 set type process set target "iexplore.exe" next end end
Debug informace
Když zapneme debug SSL VPN, a máme podporu na straně klienta, tak se v jednom řádku loguje výsledek kontroly. První hodnota ukazuje výsledek kontroly pro ověření souboru, registrů nebo procesu. Pokud kontrola neprojde, tak je 4 0000
, pokud projde 4 0100
. Je to úplně stejné, jako při kontrole AV, FW. Čekal bych, že číslice 4 určuje druh kontroly, ale patrně ne. Řádky z logu
[9314:FWINT:6e2]login_succeeded:523 redirect to hostcheck [9314:FWINT:6e2]req: /remote/hostcheck_validate [9314:FWINT:6e2]host check result:4 0000,10.0.17134,78:2b:cb:ac:2c:a3 [9314:FWINT:6e2]rmt_hcvalidate_cb_handler:404 hostcheck validation failed
Komentáře
Jak je to s temi verzemi a licencemi je popsane zde
https://kb.fortinet.com/kb/documentLink.do?externalID=FD48147
S FortiClientem 7.0.7 se k SSL VPN nelze připojit, pokud je aktivní host-check nebo os-check.
odpověď na [2]Bárt: Bohužel, těch chyb je tam zase více . Například, když se využívá SAML ověření v externím prohlížeči, tak se většinou vyvolá 2x najednou (otevřou se 2 záložky).