Taisyklės, peradresuojančios visus prievadus, gali praryti jūsų WireGuard klausytuvą
Plati peradresavimo taisyklė gali praryti pačios šliuzo WireGuard ir SSH klausytuvus. Rinkitės siauras taisykles arba atskirą viešą adresą, tada išbandykite valdymo kelią.
Viešas šliuzas jau vykdo WireGuard per UDP 51820, SSH per 22 ir vieną programą, kuri turi būti pasiekiama iš interneto. Viliojanti taisyklė peradresuoja kiekvieną prievadą peerui ir paskelbia darbą baigtu. WireGuard šliuze tokia taisyklė gali sugauti paties tunelio transportą ir užrakinti jus už mašinos, kuri jį užbaigia, ribų. Publikavimas yra maršrutizavimo sprendimas su valdymo plokštumos išimtimi, o ne viena DNAT eilutė.
Viešas įėjimas arba įėjimas per tunelį: rinkitės vieną
Paslaugos publikavimas sukuria naują įėjimo tašką internete. Tai ne tas pats, kas suteikti peerui VPN narystę, nes lankytojas niekada neįeina į tunelį, o šliuzas tampa viešuoju backend'o veidu. Šis skirtumas nustato taisyklės auditoriją ir jos sertifikatą.
Administravimo sąsajos retai tinka toje vietoje. Autorizuotų VPN klientų pasiekiamas administravimo puslapis išlaiko atakos paviršių tunelio viduje ir išvengia prisijungimo formos atskleidimo savavališkam skenavimui. Vieši programos galiniai taškai vis tiek reikalauja savo TLS sertifikato, autentifikavimo ir spartos ribojimo; užšifruotas WireGuard šuolis neapsaugo lankytojo atkarpos iki šliuzo.
Jei paslauga tikrai turi būti vieša, užrašykite prieglobos vardą, jį apimantį sertifikatą ir lankytojų diapazonus, kurie turėtų jį pasiekti. Šie trys faktai vėliau nustato taisyklės formą ir filtravimo politiką. Viskas už jų ribų yra apimties plėtimas viešame klausytuve.
Vienas prievadas į vidų, vienas backend'as į išorę
Naudokite vieną viešą prievadą ir vieną backend'o paslaugą. Šiame pavyzdyje eth0 turi viešą adresą 198.51.100.20, šliuzo tunelio adresas yra 10.200.0.1, o peeras vykdo programą adresu 10.200.0.7. Viešas TCP 9443 susiejamas su peero TCP 8443:
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 taisyklė atitinka išverstą backend'ą ir pradinę viešą paskirties vietą, todėl kita jungtis į tą pačią backend'o paslaugą lieka už šio susiejimo. Ji taip pat paslepia lankytojo adresą nuo peero, ir tai yra kompromisas, dėl kurio maršrutizuotas grįžimas išsaugant šaltinį tampa atskiru dizainu. iptables plėtinių nuoroda dokumentuoja abu tikslus ir jų atitikimo parinktis.
Peradresavimas vis tiek turi būti įjungtas, o filtravimo grandinei reikia leidimo išverstai paskirties vietai ir prievadui bei nustatytiems atsakymams. FORWARD grandinė mato išverstą paskirties vietą po DNAT, todėl taisyklė, parašyta pagal viešą adresą, neatitinka peradresuojamo paketo. Rašykite leidimą pagal backend'o kortelę, o ne viešąją.
Peer turi priimti paslaugos jungtį iš šliuzo tunelio adreso ir siųsti atsakymą atgal per tunelį. Jo AllowedIPs turi leisti šaltinį, kurį jis iš tikrųjų gauna, o verčiant šaltinį tai yra šliuzo tunelio adresas, ir platus 0.0.0.0/0 įrašas kiekviename peere šiam dizainui nereikalingas. Grįžtamąjį srautą numeta peer, kurio sąraše nėra to adreso, arba šaltinį išsaugantis dizainas, kuris vietoj to peradresuoja paties lankytojo adresą, tad tikrinkite šaltinį, kurį peer iš tikrųjų mato, o ne tą, kuris yra jūsų taisyklėje.
Laikykite pačios šliuzo klausytuvus už taisyklės ribų
Pakeiskite prievado atitikimą taisykle, apimančia kiekvieną TCP ir UDP paskirties vietą, ir pačios šliuzo WireGuard lizdas patenka į ją. Paskirties vertimas vyksta prieš mašinai nusprendžiant, kad paketas yra vietinis, todėl UDP 51820 gali atsidurti peere, o ne procese, kuris laiko kiekvieną peero jungtį. Taisyklė įkeliama sėkmingai, o tunelis miršta, ir tai gedimas, kurį sunku perskaityti iš peero pusės.
SSH, stebėjimo agentai ir bet kuri kita šliuze talpinama paslauga turi tą pačią ekspoziciją. Taisyklė, peradresuojanti viską, neskiria valdymo plokštumos nuo publikuotos programos, o pirmas perkrovimas po pakeitimo yra momentas, kai užrakinimas tampa akivaizdus. Taisyklė, sugaunanti viską, neįspėja apie paslaugą, kurią tyliai perima. Sužinosite, kai nepavyks kita jungtis.
Jei platus peradresavimas tikrai reikalingas, rezervuokite valdymo prievadus prieš viską sugaunančią taisyklę arba naudokite atskirą viešą adresą publikavimui. Antras variantas švaresnis, nes valdymo adresas išlaiko savo politiką, bet tiekėjas turi pateikti tą adresą; DNS įrašo pridėjimas adreso neskiria.
Platus TCP ir UDP peradresavimas taip pat neapima visų protokolų. ICMP, IPv6, path-MTU grįžtamasis ryšys ir išorinis VPN transportas reikalauja savo politikos, o taisyklė, apimanti TCP ir UDP, tuos atvejus palieka numatytajai grandinei.
Pasirinkite modelį prieš rašydami taisykles
Keturių formų pakanka daugumai publikavimų iš šliuzo, o pasirinkimas priklauso nuo to, kiek paslaugų vykdote ir kiek valdymo plokštumos rizikos galite pakelti. Žemiau esanti lentelė išrikiuoja jas nuo siauriausios iki plačiausios.
| 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 |
Pradėkite nuo siauro modelio, net jei vėliau tikitės daugiau paslaugų. Jį lengviausia audituoti, o siaurų taisyklių rinkinį paversti peržiūrėta viską sugaunančia taisykle paprasčiau nei išsiaiškinti, kurį klausytuvą sugavo plati taisyklė. Kad ir kokį modelį pasirinktumėte, laikykite taisykles pas ugniasienės savininką. iptables eilučių taikymas šalia UFW ar nftables konfigūracijos, kuri taip pat valdo tas pačias grandines, duoda politiką, kuri kinta priklausomai nuo paleidimo tvarkos.
Įrodykite ir publikavimą, ir valdymo kelią
Bandykite iš autorizuoto išorinio kliento naudodami patvirtintą prieglobos vardą ir jam galiojantį sertifikatą. Patvirtinkite, kuris backend'as atsakė, tada patikrinkite, kad nesusiję vieši prievadai lieka atmesti. Išjungta sertifikato patikra nėra išlaikytas HTTPS testas, o jungtis, pasiekianti netinkamą backend'ą, yra blogesnė už nepavykusią.
Po to patikrinkite patį šliuzą: prijunkite WireGuard peerą, atidarykite SSH sesiją ir patvirtinkite, kad stebėjimas vis dar praneša. Publikuota paslauga gali veikti, kai valdymo plokštuma sugedusi, todėl abu patikrinimai priklauso tam pačiam pakeitimo langui. Perkraukite vieną kartą, kad įrodytumėte, jog taisyklės vėl taikomos laukiama tvarka, tada nuimkite publikavimą ir patvirtinkite, kad pašalinimas tikrai atitinka pridėjimą. Didelis pridėjimų rinkinys paleidžiant su nepilnu valymu yra būdas, kuriuo laikinas testas tampa nuolatine anga.