Skript pri odpojení alebo pravidlo firewallu: čo zastaví únik?
Zhadzovanie rozhraní pri odpojení je hrubé a často beží bez oprávnení. Porovnajte ho s pravidlom firewallu, ktoré prežije výpadok a uzavrie medzeru.
Dva návrhy sľubujú to isté: keď tunel padne, nič neodíde von v otvorenej podobe. Jeden spustí pri odpojení skript a odreže rozhrania. Druhý nechá pravidlo firewallu v platnosti a od klienta VPN nič nežiada. Líšia sa v tom, kto má oprávnenie konať, čo sa deje počas medzery a ako sa stroj potom vráti do siete. Porovnávať ich v týchto troch bodoch je užitočnejšie než hádať sa, ktoré je prísnejšie.
Rovnaká práca dvoma mechanizmami
Klient môže spúšťať háky pri nadvihnutí tunela aj pri jeho odpojení, ak profil povoľuje spúšťanie skriptov. Ten hák beží vnútri životného cyklu klienta, v okamihu, keď sa spojenie zatvára. Pravidlo firewallu naopak patrí systému a nezaujíma ho, či klient beží, spadol alebo bol zabitý.
| Property | Teardown script | Firewall unit |
|---|---|---|
| Runs when the client is killed | No | Yes |
| Needs privilege at teardown time | Usually yes | Configured once, at boot |
| Acts on the whole machine | Often, including recovery paths | Only on the flows it matches |
Celý argument je v tejto tabuľke. Skript, ktorý beží len pri riadnom ukončení, pokrýva prípad, ktorý vás znepokojoval najmenej; dôležitý prípad je pád alebo zmiznutie siete a ani jeden z nich neposkytuje čisté odpojenie.
Čo hák pri odpojení dokáže a čo nie
Zdokumentovaný vzor prechádza sieťové rozhrania a zhadzuje všetko okrem loopback. Keď je fyzické zariadenie dole, nič nemôže uniknúť mimo tunela, čo je presne zámer.
#!/bin/sh
for dev in /sys/class/net/*; do
name=$(basename "$dev")
[ "$name" = lo ] || ip link set dev "$name" down
done
Zhodí aj miestnu sieť, akúkoľvek službu, ktorú stroj hostuje, a cestu, ktorú by ste použili na opravu problému. Na notebooku občas bezdrôtové zariadenie potrebuje potom ručné prepnutie, takže krátky výpadok sa zmení na opravnú seansu. Horšie je, že háku to nemusí byť vôbec dovolené: keď klient odhodí oprávnenia, skript pri odpojení beží pod neprivilegovaným účtom a každá zmena rozhrania zlyhá s chybou oprávnení zapísanou v okamihu, keď nikto nečíta log.
Skôr než háku uveríte, skontrolujte, ako sa klient spúšťa. Skript, ktorý funguje pri ručnom spustení ako root, nič nedokazuje o službe, ktorá štartuje pri boote.
Čo pravidlo firewallu robí inak
Pravidlo, ktoré povoľuje len prevádzku tunela, funguje ďalej aj vtedy, keď proces klienta zmizol, pretože jadro na ňom nezávisí. Pravidlo je aj užšie: blokuje presne toky, na ktoré sedí, a necháva loopback, miestnu podsieti a cestu obnovy na pokoji, a preto stroj neuviazne.
Cena je v tom, že pravidlo musí napísať a udržiavať ten, kto vlastní firewall hostiteľa, a musí pomenovať tunelové zariadenie, ktoré klient skutočne vytvára. To znamená, že pravidlo a profil sa musia udržiavať spolu; premenované rozhranie zanechá firewall, ktorý blokuje všetko a nič nevysvetlí.
Ani jeden mechanizmus nerobí ten druhý nadbytočným. Pravidlo firewallu, ktoré sa po úprave nikdy znovu nenačíta, je rovnako fiktívne ako skript, ktorý nikdy nebeží.
persist-tun rozhoduje, či medzera existuje
Keď tunelové zariadenie prežije odpojenie, prežijú aj trasy, ktoré doň smerujú. Prevádzka sa potom zahadzuje namiesto presmerovania, takže predvolená trasa nespadne späť na fyzickú bránu. Práve toto správanie robí únik nepravdepodobným ešte predtým, než do hry vstúpi akékoľvek pravidlo firewallu.
Bez tohto nastavenia sa zariadenie odstráni aj s trasami a predvolená trasa môže znova ukazovať na fyzickú bránu. Či to urobí, závisí od platformy a klienta, a práve preto sa má stav pozorovať, nie predpokladať. Berte nastavenie ako súčasť kill switch, nie ako voľbu výkonu.
Udržte cestu pre opätovné pripojenie živú a potom otestujte štyri stavy
Prísny blok môže klientovi zabrániť aj v opätovnom pripojení, pretože klient stále potrebuje trasu k serveru cez fyzickú bránu, zatiaľ čo všetko ostatné je zakázané. Nainštalujte hostiteľskú trasu pre tú jedinú adresu skôr, než tunel vstane, a najprv preložte meno, pretože DNS môže byť v čase, keď ho potrebujete, zablokované.
ip route add 198.51.100.20/32 via 192.168.0.1 dev wlan0
Potom overujte stavy, nie etiketu. Zámerne prejdite štyri okamihy: studený štart bez tunela, zdravú reláciu, výpadok, ktorý nikto nevyžiadal, a reláciu po obnovení. V každom okamihu prečítajte predvolenú trasu a odošlite jednu požiadavku, ktorej výstupná adresa je viditeľná. Aplikácia, ktorá to vzdá, kým je tunel dole, nič nehovorí o poštovom klientovi ani o aktualizátore, takže poslednú kontrolu zopakujte s jednou aplikáciou na pozadí. Zapíšte pravidlo, názvy rozhraní aj kroky obnovy, pretože kill switch, ktorý nikto nedokáže overiť, je len povesť.