Zachovajte alebo použite SNAT na IP adresy VPN klientov na hranici cloudu
Zachovanie zdroja drží identitu klienta v každom zázname, SNAT drží smerovaciu tabuľku malú. Tri podmienky povedia, ktorú aplikácia potrebuje.
Zachovanie adresy VPN klienta až po aplikáciu spôsobí, že každý riadok záznamu a každý záznam v zozname povolených znamená to isté. Prepísanie adresy na okraji cloudu zjednoduší smerovaciu tabuľku a urobí záznamy menej užitočnými. Ani jedna voľba nie je sama o sebe nesprávna a argument, ktorý ju rozhoduje, sa málokedy týka výkonu. Rozhodujú tri podmienky: či aplikácia musí vedieť, ktorý človek sa pripojil, či cloudová tkanina prijme zdroj, ktorý hodláte odoslať, a kto sa potom ujme zodpovednosti za spätnú trasu.
Rozhodujú tri podmienky
Začnite požiadavkou aplikácie, nie sieťovým diagramom. Ak autorizácia alebo audit závisia od individuálnej adresy klienta, jej zachovanie je funkčnou požiadavkou a preklad je regresiou. Ak aplikácia potrebuje vedieť len to, že prevádzka dorazila cestou vzdialeného prístupu, preložená adresa stačí a je omnoho lacnejšia na prevádzku.
Druhá podmienka je mechanická. Virtuálna sieť automaticky neverí paketu, ktorý tvrdí adresu, ktorá nebola priradená odosielajúcemu rozhraniu. Väčšina cloudových tkanín to vynucuje, rôznymi spôsobmi a pod rôznymi názvami, a návrh, ktorý to ignoruje, bude na diagrame vyzerať správne a v produkcii ticho zlyhá.
Tretia je organizačná. Zachovanie zdrojov znamená, že smerovacia tabuľka podsiete aplikácie musí pre prefix klienta ukazovať späť na bránu, a každý tím, ktorý neskôr pridá podsieť, musí túto trasu udržať konzistentnú. Je to jednorazovo malá cena a opakujúca sa cena naprieč desiatkami účtov. Rozhodnite, kto ju zaplatí, skôr než sľúbite správanie.
Trasa nie je povolenie na podvrh
Pridanie spätnej trasy povie vašej podsieti, kam majú odpovede ísť. Nepovie tkanine, že inštancia, ktorá tie pakety preposiela, ich smie odosielať s cudzím zdrojom. V AWS je príslušnou kontrolou overenie zdroja a cieľa a je viditeľné pre každú inštanciu:
aws ec2 describe-instances --instance-ids i-0a1b2c3d4e5f60718 \
--query "Reservations[].Instances[].SourceDestCheck"
aws ec2 modify-instance-attribute --instance-id i-0a1b2c3d4e5f60718 \
--no-source-dest-check
Vypnite ju len pre inštanciu, ktorej dokumentovanou prácou je preposielanie, a pre nič iné. Každá VM aplikácie, ktorá nechá kontrolu zapnutú, je o jeden stroj menej, ktorý možno použiť na odosielanie prevádzky s požičaným zdrojom. Ak vaša platforma nie je AWS, hľadajte zodpovedajúce nastavenie anti-spoofingu alebo povolených adries namiesto toho, aby ste predpokladali, že sa správanie prenesie.
Rýchle zachytenie paketov vyrieši otázku rýchlejšie než čítanie konzoly. Ak odpovede odídu a klient ich nikdy nevidí, tkanina zahadzuje podvrhnutý zdroj, a nie aplikácia zlyháva.
Čo preklad kupuje a čo stojí
Prepísanie zdroja na bráne odstráni problém spätnej cesty. Aplikácia vidí jednu adresu, ku ktorej už vie, ako sa dostať, a prefix klienta sa nikdy nemusí objaviť v cloudovej smerovacej tabuľke. V Linuxe je pravidlo jeden riadok a stojí za to napísať najužšiu verziu, akú zvládnete:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 172.20.8.0/24 -o ens5 -j SNAT --to-source 10.40.3.10
Všimnite si, čo aplikácia teraz zaznamenáva: 10.40.3.10 pre každého používateľa, pri každom spojení, navždy. Akýkoľvek zoznam povolených adries postavený na tejto hodnote teraz udeľuje prístup celej populácii vzdialeného prístupu a každé vyšetrovanie incidentu sa musí vrátiť k bráne, aby odpovedalo, kto to bol.
Riešením nie je vzdať sa prekladu, ale prestať predstierať, že adresa je identita. Neste identitu klienta v autentizovanom poli, zaznamenajte ju na bráne spolu s preloženou n-ticou a nechajte aplikáciu sa na ňu pripojiť. Bez spojovacieho kľúča mení preklad sieťový problém na trvalý forenzný.
Relé je iné rozhranie
Reverzný proxy pred aplikáciou obchádza otázku smerovanej cesty úplne. Proxy otvára vlastné spojenie s backendom, takže prefix klienta nikdy nemusí byť smerovateľný vnútri virtuálnej siete, a aplikácia môže prijať identitu v hlavičke, ktorú proxy nastaví.
Táto hlavička je dôveryhodná len vtedy, keď ju backend prijíma od proxy a od ničoho iného. V terminológii nginx to znamená výslovne pomenovať dôveryhodného partnera namiesto toho, aby ste verili všetkému, čo príde:
set_real_ip_from 10.40.3.10;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
Každý klient, ktorý sa k backendu dostane priamo, môže rovnakú hlavičku sfalšovať, takže backend musí byť nedostupný inak než cez proxy. To je fakt o firewalle, nie názor na konfiguráciu, a práve tento predpoklad ľudia pri kopírovaní úryvku vynechajú.
Relé tiež mení to, čo kupujete. Získate identitu na úrovni aplikácie a prirodzené miesto, kde ju zaznamenať; vzdáte sa všeobecnosti, pretože každý nový protokol potrebuje vlastnú podporu proxy. Pre služby HTTP je táto výmena zvyčajne dobrá a pre čokoľvek, čo nie je HTTP, zvyčajne vôbec nie je dostupná.
Zapíšte, čo vidí každá hranica
Nech si vyberiete čokoľvek, revízia dizajnu by mala skončiť jednou tabuľkou, ktorá pomenuje zdrojovú adresu a preukázateľnú identitu na každom skoku. Bez nej prvý incident vytvorí tri tímy, z ktorých každý opisuje iného klienta.
| Boundary | Source the next hop sees | What is actually proven |
|---|---|---|
| Client to gateway | 172.20.8.14 | A certificate or credential was presented |
| Gateway to app subnet, preserved | 172.20.8.14 | The same session, if the return route exists |
| Gateway to app subnet, translated | 10.40.3.10 | Only that traffic came through the gateway |
| Proxy to backend | 10.40.3.10 plus a header | The proxy asserted an identity it authenticated |
Potom vyberte. Zachovajte zdroj, keď autorizácia aplikácie skutočne závisí od adresy klienta a môžete sa ujať trasy. Prekladajte, keď to tak nie je a identitu môžete niesť mimo pásma, a pre nastavenia preposielania špecifické pre platformu použite pokyny AWS pre inštancie preposielania. Siahnite po relé, keď služba hovorí HTTP a chcete, aby identita prestala byť adresou.