Zadržavanje adrese VPN klijenta sve do aplikacije čini da svaki red zapisa i svaki unos na listi dozvola znače istu stvar. Prepisivanje te adrese na rubu oblaka čini tabelu usmjeravanja jednostavnijom, a zapise manje korisnim. Nijedan izbor nije sam po sebi pogrešan, a argument koji ga odlučuje rijetko se tiče performansi. Tri uslova ga rješavaju: da li aplikacija mora znati koji se čovjek povezao, da li će struktura oblaka prihvatiti izvor koji namjeravate poslati i ko je poslije spreman preuzeti povratnu rutu.

Tri uslova odlučuju

Počnite od zahtjeva aplikacije, a ne od mrežnog dijagrama. Ako autorizacija ili revizija zavise od pojedinačne adrese klijenta, onda je njeno čuvanje funkcionalni zahtjev, a prevođenje regresija. Ako aplikacija samo treba znati da je saobraćaj stigao preko puta udaljenog pristupa, prevedena adresa je dovoljna i mnogo jeftinija za rad.

Drugi uslov je mehanički. Virtuelna mreža ne vjeruje automatski paketu koji tvrdi adresu koja nije dodijeljena interfejsu pošiljaoca. Većina struktura oblaka to sprovodi, na različite načine i pod različitim imenima, a dizajn koji to zanemari izgledat će ispravno na dijagramu i tiho će se gubiti u produkciji.

Treći je organizacijski. Čuvanje izvora znači da tabela usmjeravanja aplikacijske podmreže mora pokazivati natrag na pristupnik za prefiks klijenta, i svaki tim koji kasnije doda podmrežu mora tu rutu održavati dosljednom. To je jednokratni mali trošak i ponavljajući trošak kroz desetine računa. Odlučite ko ga plaća prije nego obećate ponašanje.

Ruta nije dozvola za lažno predstavljanje

Dodavanje povratne rute govori vašoj podmreži kuda odgovori treba da idu. Ono ne govori strukturi da instanca koja prosljeđuje te pakete smije da ih emituje sa stranim izvorom. Na AWS-u je relevantna kontrola provjera izvora i odredišta i ona je vidljiva po instanci:

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

Isključite je samo za instancu čiji je dokumentovani posao prosljeđivanje i ni za šta drugo. Svaka aplikacijska VM koja provjeru ostavi uključenom je jedna mašina manje koja se može koristiti za emitovanje saobraćaja sa pozajmljenim izvorom. Ako vaša platforma nije AWS, potražite ekvivalentnu postavku za anti-spoofing ili dozvoljene adrese umjesto da pretpostavite da se ponašanje prenosi.

Brzo snimanje paketa riješi pitanje brže od čitanja konzole. Ako odgovori odu, a klijent ih nikada ne vidi, struktura odbacuje krivotvoreni izvor, a ne aplikacija ne uspijeva.

Šta prevođenje kupuje i šta košta

Prepisivanje izvora na pristupniku uklanja problem povratnog puta. Aplikacija vidi jednu adresu koju već zna kako dosegnuti, a prefiks klijenta nikada ne mora se pojaviti u tabeli usmjeravanja oblaka. Na Linuxu je pravilo jedan red i vrijedi napisati najužu verziju koju možete:

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

Obratite pažnju šta aplikacija sada bilježi: 10.40.3.10 za svakog korisnika, na svakoj vezi, zauvijek. Svaka lista dozvoljenih adresa napravljena na toj vrijednosti sada daje pristup cijeloj populaciji udaljenog pristupa, a svaka istraga incidenta mora se vratiti na pristupnik da odgovori ko je to bio.

Rješenje nije odustati od prevođenja, nego prestati pretvarati se da je adresa identitet. Nosite identitet klijenta u autentificiranom polju, bilježite ga na pristupniku uz prevedeni tupel i dopustite aplikaciji da se pridruži po njemu. Bez ključa za spajanje prevođenje pretvara mrežni problem u trajni forenzički.

Relej je drugo sučelje

Obrnuti proxy ispred aplikacije u potpunosti zaobilazi pitanje rutiranog puta. Proxy otvara vlastitu vezu prema pozadinskom sistemu, pa prefiks klijenta nikada ne mora biti rutabilan unutar virtuelne mreže, a aplikacija može primiti identitet u zaglavlju koje proxy postavlja.

To zaglavlje je pouzdano samo kada ga pozadinski sistem prihvata od proxyja i ni od čega drugog. U nginx terminima to znači eksplicitno imenovati pouzdanog partnera umjesto vjerovati onome što stigne:

set_real_ip_from 10.40.3.10;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

Svaki klijent koji može direktno dosegnuti pozadinski sistem može krivotvoriti isto zaglavlje, pa pozadinski sistem mora biti nedostupan osim kroz proxy. To je činjenica o firewallu, a ne mišljenje o konfiguraciji, i upravo tu pretpostavku ljudi preskoče kada kopiraju isječak.

Relej također mijenja ono što kupujete. Dobijate identitet na razini aplikacije i prirodno mjesto da ga bilježite; gubite općenitost, jer svaki novi protokol treba vlastitu proxy podršku. Za HTTP usluge ta je razmjena obično dobra, a za sve što nije HTTP obično uopće nije dostupna.

Zapišite šta svaka granica vidi

Šta god odabrali, pregled dizajna treba završiti jednom tabelom koja imenuje izvornu adresu i dokazivi identitet na svakom skoku. Bez nje prvi incident proizvede tri tima koji svaki opisuje drugog klijenta.

BoundarySource the next hop seesWhat is actually proven
Client to gateway172.20.8.14A certificate or credential was presented
Gateway to app subnet, preserved172.20.8.14The same session, if the return route exists
Gateway to app subnet, translated10.40.3.10Only that traffic came through the gateway
Proxy to backend10.40.3.10 plus a headerThe proxy asserted an identity it authenticated

Zatim odaberite. Čuvajte izvor kada autorizacija aplikacije zaista zavisi od adrese klijenta i kada možete preuzeti rutu. Prevedite kada to nije slučaj i kada identitet možete nositi van opsega, i koristite AWS smjernice za instance prosljeđivanja za postavke prosljeđivanja specifične za platformu. Posegnite za relejem kada usluga govori HTTP i kada želite da identitet prestane biti adresa.

Povezani članci