Pravila prosljeđivanja svih portova mogu progutati vaš WireGuard slušalac
Široko pravilo prosljeđivanja može progutati vlastite WireGuard i SSH slušaoce gejta. Odaberite uska pravila ili odvojenu javnu adresu, pa testirajte kontrolnu putanju.
Javni gejt već pokreće WireGuard na UDP 51820, SSH na 22 i jednu aplikaciju koja mora biti dostupna s interneta. Primamljivo pravilo prosljeđuje svaki port peeru i proglašava posao završenim. Na WireGuard gejtu takvo pravilo može uhvatiti vlastiti transport tunela i zaključati vas iz mašine koja ga terminira. Objava je odluka o rutiranju s izuzetkom za kontrolnu ravan, a ne jedna DNAT linija.
Javni ulaz, ulaz kroz tunel: odaberite jedno
Objava usluge stvara novu ulaznu tačku na internetu. To nije isto kao davanje VPN članstva peeru, jer posjetilac nikada ne ulazi u tunel i gejt postaje javno lice backenda. Ta razlika određuje publiku pravila i njegov certifikat.
Administrativni interfejsi rijetko pripadaju na to mjesto. Administratorska stranica do koje dolaze ovlašteni VPN klijenti drži napadnu površinu unutar tunela i izbjegava izlaganje prijavne forme proizvoljnom skeniranju. Javne aplikacijske krajnje tačke i dalje trebaju vlastiti TLS certifikat, autentifikaciju i ograničavanje brzine; šifrovani WireGuard skok ne štiti dionicu posjetioca do gejta.
Ako usluga zaista mora biti javna, zapišite ime hosta, certifikat koji ga pokriva i raspone posjetilaca koji treba da je dosegnu. Te tri činjenice kasnije određuju oblik pravila i politiku filtriranja. Sve izvan njih je širenje obima na javnom slušaocu.
Jedan port unutra, jedan backend van
Koristite jedan javni port i jednu backend uslugu. U ovom primjeru eth0 nosi javnu adresu 198.51.100.20, adresa tunela gejta je 10.200.0.1, a peer pokreće aplikaciju na 10.200.0.7. Javni TCP 9443 se preslikava na TCP 8443 peera:
iptables -t nat -A PREROUTING -i eth0 -d 198.51.100.20 -p tcp --dport 9443 -j DNAT --to-destination 10.200.0.7:8443
iptables -t nat -A POSTROUTING -o wg0 -d 10.200.0.7 -p tcp --dport 8443 -m conntrack --ctorigdst 198.51.100.20 --ctorigdstport 9443 -j SNAT --to-source 10.200.0.1SNAT pravilo se poklapa s prevedenim backendom i originalnim javnim odredištem, pa druga konekcija na istu backend uslugu ostaje izvan ovog preslikavanja. Ono takođe skriva adresu posjetioca od peera, a to je kompromis zbog kojeg je rutirani povratak sa očuvanjem izvora zaseban dizajn. Referenca za iptables ekstenzije dokumentuje oba cilja i njihove opcije poklapanja.
Prosljeđivanje i dalje treba biti omogućeno, a lanac filtera treba dozvolu za prevedeno odredište i port plus uspostavljene odgovore. FORWARD lanac vidi prevedeno odredište nakon DNAT-a, pa pravilo napisano prema javnoj adresi ne poklapa se s proslijeđenim paketom. Dozvolu pišite prema backend tupleu, ne prema javnom.
Peer mora prihvatiti konekciju usluge s adrese tunela gejta i poslati odgovor natrag kroz tunel. Njegov AllowedIPs mora odobriti izvor koji zaista prima, a pri prevođenju izvora to je adresa tunela gejta, i širok unos 0.0.0.0/0 na svakom peeru nije potreban za ovaj dizajn. Povratni saobraćaj obara peer čija lista izostavlja tu adresu, ili dizajn sa očuvanjem izvora koji prosljeđuje vlastitu adresu posjetioca, zato provjerite izvor koji peer zaista vidi, a ne onaj u vašem pravilu.
Držite vlastite slušaoce gejta izvan pravila
Zamijenite poklapanje porta pravilom koje pokriva svako TCP i UDP odredište, i vlastiti WireGuard socket gejta pada unutar njega. Prevođenje odredišta se dešava prije nego mašina odluči da je paket lokalni, pa UDP 51820 može završiti na peeru umjesto na procesu koji drži svaku peer konekciju. Pravilo se uspješno učita i tunel umre, što je kvar koji je teško pročitati s peer strane.
SSH, monitoring agenti i svaka druga usluga hostovana na gejtu imaju istu izloženost. Pravilo koje prosljeđuje sve ne razlikuje kontrolnu ravan od objavljene aplikacije, a prvi reboot nakon promjene je trenutak kada zaključavanje postaje očigledno. Catch-all ne upozorava na uslugu koju tiho preuzima. Otkrijete ga kada sljedeća konekcija ne uspije.
Ako je široko prosljeđivanje zaista potrebno, rezervišite kontrolne portove prije catch-alla ili koristite odvojenu javnu adresu za objavu. Druga opcija je čistija jer kontrolna adresa zadržava vlastitu politiku, ali provajder mora dostaviti tu adresu; dodavanje DNS zapisa ne dodjeljuje je.
Široko TCP i UDP prosljeđivanje takođe nisu svi protokoli. ICMP, IPv6, povratna informacija o MTU putanje i vanjski VPN transport trebaju vlastitu politiku, a pravilo koje pokriva TCP i UDP ostavlja te slučajeve zadanom lancu.
Odaberite model prije pisanja pravila
Četiri oblika pokrivaju većinu gejt objava, a izbor zavisi od toga koliko usluga pokrećete i koliko rizika za kontrolnu ravan možete podnijeti. Tabela ispod ih poredi od najužeg do najšireg.
| Model | What it protects | Cost | Use when |
|---|---|---|---|
| Narrow port forward | Every other listener, including the VPN | One rule per service | Few services, stable ports |
| Catch-all with reserved ports | Ports named in the exception list | Rule order becomes critical | Many services and disciplined review |
| Separate public address | Control address fully isolated | Provider must supply the address | High-value publication |
| VPN-only access | No public entry at all | Visitors need the tunnel | Admin interfaces and internal tools |
Počnite s uskim modelom čak i ako kasnije očekujete više usluga. Njega je najlakše revidirati, a pretvaranje skupa uskih pravila u pregledani catch-all jednostavnije je od otkrivanja koji je slušalac široko pravilo uhvatilo. Koji god model odabrali, držite pravila kod vlasnika firewalla. Primjena iptables linija pored UFW ili nftables konfiguracije koja takođe upravlja istim lancima stvara politiku koja se mijenja zavisno od reda podizanja.
Dokažite i objavu i kontrolnu putanju
Testirajte s ovlaštenog vanjskog klijenta koristeći odobreno ime hosta i certifikat valjan za njega. Potvrdite koji backend je odgovorio, zatim provjerite da nepovezani javni portovi ostaju odbijeni. Onemogućena provjera certifikata nije uspješan HTTPS test, a konekcija koja stiže na pogrešan backend gora je od neuspjele.
Nakon toga provjerite sam gejt: povežite WireGuard peer, otvorite SSH sesiju i potvrdite da monitoring još izvještava. Objavljena usluga može raditi dok je kontrolna ravan pokvarena, pa obje provjere pripadaju istom prozoru promjena. Restartujte jednom da dokažete da se pravila ponovo primjenjuju u očekivanom redu, zatim uklonite objavu i potvrdite da uklanjanje zaista odgovara dodavanju. Veliki skup dodavanja pri podizanju s nepotpunim uklanjanjem je način na koji privremeni test postaje trajno otvaranje.