Zašto mrežna brana vezana za stanje VPN-a nije pravilo ping-a samo kroz tunel
Pravilo koje odgovara na ping samo dok je povezan imenovani VPN profil je politika javne adrese vezana za nepovezano stanje, a ne dozvola samo za tunel.
Zamislite pravilo firewall-a koje uključuje ICMP echo za javnu adresu servera kad god je povezan imenovani VPN profil. To se čita kao „ping samo kroz tunel“, a takvo čitanje je pogrešno na način koji je važan. Pravilo ne ograničava ko može doći do hosta; ono mijenja na šta javni interfejs odgovara dok je neka druga veza slučajno aktivna. To su dvije različite politike, a jedna od njih tiho širi izloženost.
Pravilo koje mislite da ste napisali
Namjeravani zahtjev je obično uzak: sistem za nadzor, ili jedini administrator na VPN-u, treba moći potvrditi da je server živ. Napisano kao rečenica, zvuči kao kontrola pristupa tunelu. Napisano kao objekat firewall-a, pretvara se u uslov na javnom profilu, jer tu zahtjev echo i stiže.
Kad uslov postane stanje veze, a ne izvorna adresa, skup dozvoljenih pošiljalaca više nije skup VPN partnera. Svako ko može doći do javne adrese može poslati zahtjev echo dok su vrata otvorena. Tunel nije postao put; tunel je postao prekidač.
Ljudi koji prodaju tu ideju obično ne lažu o efektu koji su željeli. Trebala im je provjera koja odgovara samo kad je link zdrav, a zdravlje linka je bilo najlakše posmatrati kroz VPN. Greška je tretirati signal dostupnosti kao odluku o pristupu i zatim to automatizovati.
Šta vrata zapravo kontrolišu
Ovaj dizajn spaja dvije nezavisne stvari, a njihovo razdvajanje je veći dio ispravke. Prvo je obuhvat: koja lokalna adresa, koje udaljene adrese, koji protokol i koji tip ICMP-a. Drugo je uslov: da li je objekat pravila trenutno uključen. Obuhvat je ono što firewall procjenjuje po paketu; uslov je ono što skripta upisuje u skladište politike, a njih dvoje se usklađuju po potpuno različitim satovima.
Ako je zahtjev zaista samo VPN partneri, obuhvat ga rješava bez ikakve logike stanja veze: vežite pravilo za interfejs tunela ili za raspon adresa tunela, ograničite udaljene adrese na pool klijenata i navedite tip echo umjesto „ICMP“. To pravilo ostaje ispravno kad nema aktivnog VPN-a i ne može ga otvoriti nepovezani profil.
Ako je zahtjev zaista javna vrata, recite to u tekstu politike, jer kriteriji prihvatanja se mijenjaju. Javna vrata moraju imenovati tačan profil, definisati šta znači „povezan“ i navesti da su javni pošiljaoci u obuhvatu po dizajnu. Većina zabune nestaje u trenutku kad je neko prisiljen da tu rečenicu zapiše.
Izgradite objekat jednom, pa ga uključujte
Unaprijed obezbijedite jedno pravilo sa stabilnim identitetom, isključeno, i pustite kontroler da mijenja samo njegovo stanje uključenosti. Stvaranje pravila po prikaznom imenu pri svakom pokretanju je način na koji skladište politike završi sa pet skoro identičnih objekata i bez pouzdanog načina da ih ukloni.
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
Ime je trajni identifikator; prikazno ime je dokumentacija koju čovjek može mijenjati. Uskladite po -Name i skripta prestaje stvarati duplikate. Isti oblik komande pokriva slučaj IPv6 sa -Protocol ICMPv6 -IcmpType 128, ali to je odvojeno pravilo jer se brojevi tipa echo razlikuju između dvije familije.
Držite familiju adresa i tip ICMP-a eksplicitnim i iz drugog razloga: -Protocol ICMPv4 bez tipa dozvoljava svaku ICMPv4 poruku koju profil dopušta, uključujući one koje nikad niste namjeravali prihvatiti. Imenovanje tipa 8 sužava pravilo na zahtjev echo, a to je jedino što provjera dostupnosti šalje.
Gdje automatizacija proturječi namjeri
Anketiranje klijentskog profila svakih nekoliko minuta ne može dati trenutnu granicu. Između pada veze i sljedeće ankete pravilo još odgovara na javnoj adresi; između podizanja veze i sljedeće ankete ne odgovara. Priznati to kašnjenje je iskreno, a tvrditi da dizajn nameće strog invariant nije.
U samoj provjeri stanja postoji zamka obuhvata. Get-VpnConnection prijavljuje klijentske profile konfigurisane na mašini, po defaultu za trenutnog korisnika i za sve korisnike sa -AllUserConnection. Ne prijavljuje udaljene korisnike koji su trenutno povezani na RRAS server; to je drugo posmatranje s drugom komandom. Vrata izgrađena na pogrešnoj stvari nisu povezana ni s čim.
Zatim pokrijte stanja koja niko ne skriptuje: pokretanje s pravilom koje je već uključeno iz prethodnog ciklusa, pad kontrolera dok su vrata otvorena i profil izbrisan dok njegovo pravilo ostaje aktivno. Svako treba definisan default, a siguran default za javnu dozvolu je isključeno. Ako zahtjev zaista ne trpi prozor ankete, pravilo vezano za stanje je pogrešan instrument i provedba pripada tunelu, ne javnom interfejsu.
Na kraju, testirajte javni zahtjev dvaput: jednom s podignutom odabranom vezom i jednom s oborenom, s hosta koji nije na VPN-u. Uspješan ping iz unutrašnjosti tunela ne dokazuje ništa o ovoj politici, a to je mjerenje koje većina postavki preskoči.