Dvaja klienti VPN, dve verejné adresy: zosúlaďte SNAT
SNAT podľa zdroja môže vybrať verejnú adresu, ale len dovtedy, kým brána ešte rozlišuje klientov. Pred napísaním pravidla skontrolujte zostávajúci zdroj.
Dvaja klienti VPN môžu vychádzať cez dve rôzne verejné adresy IPv4, a pravidlo, ktoré to robí, je kratšie, než väčšina ľudí čaká. Nezabezpečuje to syntax iptables, ale stav paketu, keď sa dostane do výstupného reťazca: zdrojová adresa tam stále musí rozlišovať klientov. Ak predchádzajúci masquerade už zlúčil oboch na jednu adresu, žiadne pravidlo pre jednotlivého klienta nedokáže obnoviť rozdiel. Najprv vyriešte túto otázku, potom napíšte preklad.
Ktorá identita prežije až k bráne
Pravidlo sa zhoduje so zdrojovou adresou paketu, nie s používateľským menom VPN a nie s názvom, ktorý zobrazuje klientska aplikácia. Všetko, čo paket prekladá skôr na ceste, určuje, čo vaše pravidlo ešte môže vidieť. Spustite tabuľku nat v poradí a nájdite bod, v ktorom je zdroj stále samostatný pre každého klienta.
iptables -t nat -S POSTROUTING
Prečítajte si ten zoznam zhora. Pravidlo masquerade blízko vrcholu prepisuje zdroj pre každý zodpovedajúci tok a položky pre jednotlivých klientov umiestnené za ním zodpovedajú adrese, ktorá už neexistuje. Keď dve zariadenia LAN zdieľajú jeden tunel a prichádzajú ako jediná vnútorná adresa, návrh sa musí zmeniť skôr než firewall: udržte ich zdrojové rozsahy oddelené alebo každému pridelte vlastnú vnútornú adresu.
Prepojte pridelenie vnútornej adresy s overeným klientom. Odovzdanie tej adresy inému zariadeniu odovzdáva aj výstupnú politiku, a preklad zdroja sám o sebe nie je dokladom identity.
Preklad nemôže vymyslieť adresu
Každá verejná adresa musí byť pridelená alebo smerovaná k tomuto výstupnému bodu a odpovede si musia nájsť cestu späť. Pravidlo, ktoré posiela prevádzku z adresy, na ktorú nikto nesmeruje späť, sa na vzdialenej strane zahodí alebo sa odpovie hostiteľovi, ktorý o to nikdy nepožiadal. Inštancia u poskytovateľa cloudu má zvyčajne verejnú adresu preloženú na adresu privátneho rozhrania ešte predtým, než paket odíde, takže zdrojom SNAT musí byť adresa, ktorú poskytovateľ prijme, nie hodnota, ktorú zobrazuje konzola. Prečítajte si model adries poskytovateľa a riaďte sa ním namiesto kopírovania verejnej hodnoty do každého paketu.
V praxi to znamená skontrolovať smerovaný prefix v konzole poskytovateľa pred dotykom firewallu a použiť adresu privátneho rozhrania ako zdroj prekladu, keď je mapovanie jedna k jednej. Adresy v príkladoch nižšie pochádzajú z dokumentačných rozsahov, takže prvá vec, ktorú treba nahradiť, je samotný text adresy.
Vložte pred všeobecný masquerade
Pred pridaním čohokoľvek potvrďte výstupné rozhranie a aktuálny reťazec. Prvé určuje, ktorým paketom môže pravidlo zodpovedať, a druhé ukazuje, čo už pred ním stojí.
ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers
Prvý príkaz pomenuje rozhranie, cez ktoré paket na internet skutočne vychádza. Druhý vypíše reťazec s číslami riadkov. Všeobecná položka masquerade je riadok, nad ktorým treba zostať.
iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78
Dve pravidlá vyššie zodpovedajú každé jednej vnútornej adrese, obmedzujú zhodu na výstupné rozhranie a výslovne nastavujú zdroj. Vkladajte, nie pridávajte: na pozícii 1 sa vyhodnocujú pred riadkom masquerade. Poradie medzi nimi nehrá rolu, pretože ich zdroje sa líšia. Nahraďte ens3 tým, čo hlásil príkaz trasy, a držte ostatných správcov firewallu mimo tých istých háčikov, pretože dva nástroje zapisujúce jednu tabuľku sú obvyklým dôvodom, prečo správne pravidlo nemá účinok.
Dokážte zdroj novým tokom
Stavový NAT zviaže preklad pri začiatku toku a znova ho použije pre ďalšie pakety, takže relácia otvorená pred zmenou si po zmene zachová svoj starý zdroj. Pravidlo dokazuje iba nové nadviazané spojenie.
conntrack -L -s 10.88.4.20 -p tcp --dport 443
Prečítajte si smer odpovede tohto záznamu: jeho cieľom je adresa, ktorú vzdialený koniec vidí ako zdroj. Porovnajte ju so zamýšľanou verejnou adresou a záznam nesúci starú adresu berte ako dôkaz toku, ktorý začal príliš skoro, nie ako pokazené pravidlo. Požiadajte klienta, aby otvoril nové spojenie, a potom dotaz zopakujte. Vyprázdnenie celej sledovacej tabuľky na vynútenie testu preruší každú ďalšiu reláciu na bráne.
Preklad stále nevyberá trasu, neprepúšťa tok filtrom a nezverejňuje prichádzajúcu službu. Nesprávna trasa a chýbajúce povoľovacie pravidlo naďalej zlyhávajú aj po dokonalom pravidle SNAT. Skontrolujte aj IPv6 a akúkoľvek sekundárnu výstupnú cestu, potom zapíšte dvojice vnútorná-verejná do dokumentácie firewallu, aby budúca zmena vychádzala z mapovania, a nie z textu pravidla.