UFW prekidač blokira vaš VPN? Dozvolite parnjaku
Vaše pravilo zabrane odlaznog saobraćaja odbacuje rukovanje tunela. Jedan izuzetak za parnjaka, dodat prije ufw enable, pretvara politiku u prekidač.
Slijedili ste kontrolnu listu: zabranite odlazni, dozvolite tunel, omogućite ufw. Zatim klijent čeka na rukovanju i nikada se ne povezuje, ili se poveže i nijedna stranica se ne učitava. Obje greške dolaze iz iste praznine. Nedostaje pravilo koje dopušta postojanje tunela, jer tunel nije interfejs iz kojeg vaši paketi izlaze.
Zašto dozvola na tun0 isprva ništa ne pogađa
tun0 kreira klijent nakon što sesija postoji. Datagrami koji grade tu sesiju obični su UDP paketi upućeni provajderu na port 1194 i izlaze kroz wlan0 ili eth0 s fizičkom izvornom adresom. allow out on tun0 pogađa samo saobraćaj čiji je odlazni interfejs tun0, pa se tokom rukovanja ne pogađa ništa.
Stavite default deny outgoing povrh toga i vanjski paketi se odbacuju prije nego što se interfejs uopšte pojavi. Klijent pokušava ponovo, ističe vrijeme i prijavljuje TLS ili grešku rukovanja, što ljude šalje u lov po certifikatima i MTU-u dok firewall tiho jede vezu. Pravilo koje je trebalo zadržati vaš saobraćaj sprječava da se taj saobraćaj zadrži.
Refleksno rješenje čini curenje trajnim. sudo ufw allow out on wlan0, ili vraćanje zadanog na dozvolu, podiže tunel i ostavlja mašinu bez prekidača: sljedeći put kada tunel padne, sve se nastavlja preko fizičkog adaptera. Izgubio sam popodne upravo na taj par izmjena prije nego što sam shvatio koji paket zapravo filtriram.
Šta trebaju dva skupa paketa
Vaš saobraćaj prelazi firewall dvaput, u dva oblika. Unutrašnji paket ide od adrese tunela kroz tun0. Vanjski paket ide od fizičke adrese do parnjaka i jedino je što je vidljivo na žici. Jedno pravilo po obliku:
sudo ufw allow out on tun0
sudo ufw allow out to 203.0.113.10 port 1194 proto udp
sudo ufw allow out to 203.0.113.10 port 443 proto tcp comment 'tcp fallback'
Zamijenite adresu i port onima iz vlastitog profila. WireGuard parnjaci obično odgovaraju na 51820/udp; OpenVPN profili koji idu preko TCP 443 trebaju taj port umjesto toga. Detalji se razlikuju, oblik ne: oba pravila su uska i zajedno određuju jedine destinacije do kojih mašina može doći dok je tunel pao.
Red je drugi mit. S sirovim iptablesom čitate lanac odozgo prema dolje i zaključujete koje pravilo pobjeđuje. ufw nije tanka omotač oko liste koju ste otipkali; on kompajlira vaša pravila u svoje lance i bira tačke umetanja. ufw status ih ispisuje u ufw redoslijedu, ne vašem. Kada pravilo izgleda ignorisano, uporedite ufw show added s kompajliranim skupom iz iptables -S | grep ufw prije nego što bilo šta prepišete.
Izuzetak mora ostati širok jednu adresu
Pravilo za parnjaka ispravno je samo dok imenuje adresu koju klijent poziva. Provajderi rotiraju krajnje tačke, a profil koji razrješava ime hosta pratiće promjenu DNS-a na novu adresu dok pravilo nastavlja pokazivati na staru. Kada tunel koji je mjesecima radio prestane da se diže, uporedite adresu u pravilu s onom koju klijent traži prije nego što bilo šta proširite.
Proširenje na cijelu podmrežu, ili na svaku destinaciju na portu 1194, pretvara politiku natrag u firewall s rupom. Izuzetak je prekidač; kada je širok, nema više šta da se prekida. Držite ga na jednoj adresi i ostavite komentar koji imenuje profil i provajdera kojem pripada, jer će za šest mjeseci adresa izgledati proizvoljno.
Razrješavanje imena zaslužuje svoj red. Pretraga se događa prije nego tunel postoji, preko fizičkog interfejsa, pa stroga politika zabrane odlaznog može ostaviti klijent nesposobnim da pronađe vlastiti server. Dozvolite port 53 na adresu vašeg resolvera, ili razriješite jednom i prikujte adresu u profilu. Dozvola DNS-a na svakom interfejsu je odluka, ne zadano.
Izgradite politiku prije nego tunel zatreba
ufw enable primjenjuje cijelu politiku odjednom i ponovo učitava svoje lance, a promjena zadane politike na pokrenutom firewallu također ih ponovo učitava. ufw priručnik upozorava da to može odbaciti postojeće veze kao što je SSH. Zato naredbe idu ovim redom, s SSH pravilom prije omogućavanja i otvorenom konzolnom sesijom:
sudo ufw default deny incoming
sudo ufw default deny outgoing
sudo ufw allow out on tun0
sudo ufw allow out to 203.0.113.10 port 1194 proto udp
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose
ufw reset je namjerno izostavljen iz tog bloka. Briše svako pravilo i onemogućava firewall, a na udaljenom hostu sljedeće omogućavanje je ono što odbacuje vašu sesiju. Ako ipak resetujete, dodajte SSH pravilo i potvrdite drugi put nazad kroz konzolu prije nego što nastavite.
Redoslijed nije kozmetički. Pravila dodana dok ufw radi ne ispiraju ništa, ali u trenutku kada okrenete zadanu politiku lanci se ponovo učitavaju, a sesija koju je stara politika dopuštala ide s njima. Uradite zadane, dozvole i omogućavanje u jednom prolazu, dok još imate put unutra koji ne zavisi od mašine.
Testirajte blokirano stanje i sačuvajte poništenje
Netestiran prekidač je nagađanje. Namjerno isključite klijent i pokušajte učitati stranicu: mora neuspjeti. Ponovo se povežite i mora se oporaviti bez diranja pravila. sudo ufw status verbose potvrđuje zadane i stanje evidentiranja, a ufw status numbered pokazuje koje testno pravilo izbrisati kada nadživi svoju svrhu.
Držite obrnutu skriptu pored prednje. Mašina sa zabranom odlaznog i mrtvim tunelom ne može preuzeti vlastiti popravak, pa poništenje mora stajati na disku i biti čitljivo s konzole:
sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
Pokrenite ga kada je tunel već pao i pravila se moraju skinuti, ne kao rutinski korak. Prije nego što zatvorite terminal, četiri stvari moraju vrijediti: pravilo za parnjaka imenuje tačno jednu adresu, DNS ima imenovani izuzetak, omogućavanje je došlo poslije dozvola, a povlačenje tunela ubija običan saobraćaj bez trajnog ubijanja klijenta.