Predstavte si pravidlo firewallu, ktoré zapne ICMP echo pre verejnú adresu servera vždy, keď je pripojený pomenovaný profil VPN. Číta sa to ako „ping len tunelom“ a také čítanie je nesprávne spôsobom, na ktorom záleží. Pravidlo neobmedzuje, kto sa môže dostať k hostiteľovi; mení, na čo odpovedá verejné rozhranie, kým je náhodou aktívne iné pripojenie. Sú to dve rôzne politiky a jedna z nich potichu rozširuje vystavenie.

Pravidlo, o ktorom si myslíte, že ste ho napísali

Zamýšľaná požiadavka je zvyčajne úzka: monitorovací systém alebo jediný správca na VPN musí vedieť potvrdiť, že server žije. Napísané ako veta to znie ako riadenie prístupu k tunelu. Napísané ako objekt firewallu sa to zmení na podmienku na verejnom profile, pretože práve tam prichádza požiadavka echo.

Keď sa podmienkou stane stav pripojenia a nie zdrojová adresa, množina povolených odosielateľov už nie je množinou peerov VPN. Ktokoľvek, kto sa dostane na verejnú adresu, môže odoslať požiadavku echo, kým je brána otvorená. Tunel sa nestal cestou; tunel sa stal prepínačom.

Ľudia, ktorí tento nápad propagujú, zvyčajne neklamú o efekte, ktorý chceli. Potrebovali kontrolu, ktorá odpovedá len vtedy, keď je spojenie zdravé, a zdravie spojenia bolo najľahšie pozorovať cez VPN. Chyba je považovať signál dostupnosti za rozhodnutie o prístupe a potom to automatizovať.

Čo brána v skutočnosti riadi

Tento návrh zlieva dve nezávislé veci a ich oddelenie je väčšinou opravy. Prvá je rozsah: ktorá miestna adresa, ktoré vzdialené adresy, ktorý protokol a ktorý typ ICMP. Druhá je podmienka: či je objekt pravidla práve zapnutý. Rozsah je to, čo firewall vyhodnocuje pre každý paket; podmienka je to, čo skript zapisuje do úložiska politík, a obe sa zlaďujú na úplne iných hodinách.

Ak je požiadavka naozaj len peery VPN, rozsah ju vyrieši bez akejkoľvek logiky stavu pripojenia: priviažte pravidlo k rozhraniu tunela alebo k rozsahu adries tunela, obmedzte vzdialené adresy na pool klientov a uveďte typ echo namiesto „ICMP“. Také pravidlo zostáva správne, keď nie je aktívna žiadna VPN, a nemôže ho otvoriť nesúvisiaci profil.

Ak je požiadavka naozaj verejná brána, povedzte to v texte politiky, pretože kritériá prijatia sa menia. Verejná brána musí pomenovať presný profil, definovať, čo znamená „pripojené“, a uviesť, že verejní odosielatelia sú v rozsahu zámerne. Väčšina zmätku zmizne v okamihu, keď je niekto nútený tú vetu napísať.

Postavte objekt raz a potom ho prepínajte

Zriadte vopred jediné pravidlo so stabilnou identitou, vypnuté, a nechajte kontrolér meniť len jeho stav zapnutia. Vytváranie pravidiel podľa zobrazovaného názvu pri každom spustení je spôsob, akým úložisko politík skončí s piatimi takmer totožnými objektmi a bez spoľahlivého spôsobu, ako ich odstrániť.

New-NetFirewallRule -Name "VpnGateEchoV4" -DisplayName "Public echo gated on VPN state" -Direction Inbound -Action Allow -Protocol ICMPv4 -IcmpType 8 -LocalAddress 203.0.113.10 -RemoteAddress Any -Enabled False
Set-NetFirewallRule -Name "VpnGateEchoV4" -Enabled True

Názov je trvalý identifikátor; zobrazovaný názov je dokumentácia, ktorú človek môže upravovať. Zlaďte podľa -Name a skript prestane vytvárať duplikáty. Rovnaký tvar príkazu pokrýva prípad IPv6 s -Protocol ICMPv6 -IcmpType 128, ale to je samostatné pravidlo, pretože čísla typu echo sa medzi oboma rodinami líšia.

Rodinu adries a typ ICMP držte explicitné aj z druhého dôvodu: -Protocol ICMPv4 bez typu povoľuje každú správu ICMPv4, ktorú profil pripúšťa, vrátane tých, ktoré ste nikdy nechceli prijať. Pomenovanie typu 8 zužuje pravidlo na požiadavku echo, a to je jediné, čo kontrola dostupnosti odosiela.

Kde automatizácia odporuje zámeru

Dotazovanie klientského profilu každých niekoľko minút nemôže vytvoriť okamžitú hranicu. Medzi vypadnutím pripojenia a ďalším dotazom pravidlo stále odpovedá na verejnej adrese; medzi nadviazaním pripojenia a ďalším dotazom neodpovedá. Priznať toto oneskorenie je poctivé, tvrdiť, že návrh vynucuje striktný invariant, nie je.

V samotnej kontrole stavu je pasca rozsahu. Get-VpnConnection hlási klientske profily nakonfigurované na stroji, predvolene pre aktuálneho používateľa a pre všetkých používateľov s -AllUserConnection. Nehlási vzdialených používateľov, ktorí sú práve pripojení k serveru RRAS; to je iné pozorovanie s iným príkazom. Brána postavená na nesprávnom nie je pripojená k ničomu.

Potom pokryte stavy, ktoré nikto nespisuje do skriptu: štart s pravidlom už zapnutým z predchádzajúceho spustenia, pád kontroléra pri otvorenej bráne a vymazaný profil, kým jeho pravidlo zostáva aktívne. Každý potrebuje definovanú predvolenú hodnotu a bezpečná predvolená hodnota pre verejné povolenie je vypnuté. Ak požiadavka naozaj neznesie okno dotazovania, pravidlo viazané na stav je nesprávny nástroj a presadzovanie patrí tunelu, nie verejnému rozhraniu.

Na záver otestujte verejnú požiadavku dvakrát: raz so zdvihnutým vybraným pripojením a raz so zveseným, z hostiteľa, ktorý nie je na VPN. Úspešný ping zvnútra tunela nič o tejto politike nedokazuje, a to je meranie, ktoré väčšina nasadení vynechá.

Súvisiace články