Saglabāt vai SNAT VPN klientu IP adreses mākoņa malā
Avota saglabāšana notur klienta identitāti katrā žurnālā, SNAT notur maršrutēšanas tabulu mazu. Trīs nosacījumi pasaka, kurš lietotnei vajadzīgs.
VPN klienta adreses saglabāšana līdz pat lietotnei nozīmē, ka katra žurnāla rinda un katrs atļauto saraksta ieraksts nozīmē vienu un to pašu. Pārrakstīšana mākoņa malā padara maršrutēšanas tabulu vienkāršāku, bet žurnālus mazāk noderīgus. Neviens no abiem variantiem pats par sevi nav nepareizs, un to izšķirošais arguments reti attiecas uz veiktspēju. Izšķir trīs nosacījumi: vai lietotnei jāzina, kurš cilvēks pieslēdzās, vai mākoņa audums pieņems avotu, ko plānojat sūtīt, un kas vēlāk uzņemsies atgriešanās maršruta atbildību.
Izšķir trīs nosacījumi
Sāciet ar lietotnes prasību, nevis ar tīkla diagrammu. Ja autorizācija vai audits ir atkarīgs no atsevišķa klienta adreses, tad tās saglabāšana ir funkcionāla prasība un tulkošana ir regresija. Ja lietotnei tikai jāzina, ka plūsma ieradās attālinātās piekļuves ceļā, pietiek ar tulkotu adresi, un to ir daudz lētāk uzturēt.
Otrais nosacījums ir mehānisks. Virtuālais tīkls automātiski neuzticas paketei, kas apgalvo adresi, kas netika piešķirta sūtošajai saskarnei. Lielākā daļa mākoņa audumu to īsteno dažādos veidos un ar dažādiem nosaukumiem, un dizains, kas to ignorē, diagrammā izskatīsies pareizi, bet ražošanā klusi kritīs.
Trešais ir organizatorisks. Avotu saglabāšana nozīmē, ka lietotnes apakštīkla maršrutēšanas tabulai ir jānorāda atpakaļ uz vārteju klienta prefiksam, un katrai komandai, kas vēlāk pievieno apakštīklu, šis maršruts ir jāsaglabā konsekvents. Tās ir vienreizējas nelielas izmaksas un atkārtotas izmaksas desmitiem kontu. Izlemiet, kas to maksā, pirms apsolāt uzvedību.
Maršruts nav atļauja viltošanai
Atgriešanās maršruta pievienošana pasaka jūsu apakštīklam, kur jāiet atbildēm. Tas nepasaka audumam, ka instancei, kas pārsūta šos paketes, ir tiesības tās izsūtīt ar svešu avotu. AWS attiecīgā kontrole ir avota un galamērķa pārbaude, un tā ir redzama katrai instancei:
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
Izslēdziet to tikai tai instancei, kuras dokumentētais darbs ir pārsūtīšana, un nekam citam. Katra lietotnes VM, kas atstāj pārbaudi ieslēgtu, ir par vienu mašīnu mazāk, ko var izmantot plūsmas izsūtīšanai ar aizņemtu avotu. Ja jūsu platforma nav AWS, meklējiet līdzvērtīgu viltošanas novēršanas vai atļauto adrešu iestatījumu, nevis pieņemiet, ka uzvedība pārnāks.
Ātra pakešu uztveršana atrisina jautājumu ātrāk nekā konsoles lasīšana. Ja atbildes aiziet un klients tās nekad neredz, audums izmet viltoto avotu, nevis lietotne neizdodas.
Ko tulkošana pērk un cik tā maksā
Avota pārrakstīšana vārtejā novērš atgriešanās ceļa problēmu. Lietotne redz vienu adresi, kurai jau zina, kā piekļūt, un klienta prefiksam nekad nav jāparādās mākoņa maršrutēšanas tabulā. Linux noteikums ir viena rinda, un ir vērts rakstīt šaurāko versiju, ko varat:
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
Pievērsiet uzmanību tam, ko lietotne tagad ieraksta: 10.40.3.10 katram lietotājam, katrā savienojumā, mūžīgi. Jebkurš adrešu atļauto saraksts, kas veidots uz šīs vērtības, tagad piešķir piekļuvi visai attālinātās piekļuves populācijai, un jebkurai incidenta pārbaudei jāatgriežas pie vārtejas, lai atbildētu, kas tas bija.
Risinājums nav atteikties no tulkošanas, bet pārstāt izlikties, ka adrese ir identitāte. Nesiet klienta identitāti autentificētā laukā, ierakstiet to vārtejā kopā ar tulkoto kortežu, un ļaujiet lietotnei piesaistīties tam. Bez piesaistes atslēgas tulkošana pārvērš tīkla problēmu pastāvīgā kriminālistikas problēmā.
Retranslators ir cita saskarne
Apgrieztais starpniekserveris lietotnes priekšā pilnībā apiet maršrutētā ceļa jautājumu. Starpniekserveris atver savu backend savienojumu, tāpēc klienta prefiksam nekad nav jābūt maršrutējamam virtuālajā tīklā, un lietotne var saņemt identitāti galvenē, ko starpniekserveris iestata.
Šī galvene ir uzticama tikai tad, kad backend to pieņem no starpniekservera un ne no kā cita. nginx izteiksmē tas nozīmē skaidri nosaukt uzticamo partneri, nevis ticēt visam, kas pienāk:
set_real_ip_from 10.40.3.10;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
Jebkurš klients, kas var tieši sasniegt backend, var viltot to pašu galveni, tāpēc backend ir jābūt nesasniedzamam, izņemot caur starpniekserveri. Tas ir ugunsmūra fakts, nevis konfigurācijas viedoklis, un tieši šo pieņēmumu cilvēki izlaiž, kopējot fragmentu.
Retranslators maina arī to, ko jūs pērkat. Jūs iegūstat lietotnes līmeņa identitāti un dabisku vietu, kur to reģistrēt; jūs atsakāties no vispārīguma, jo katram jaunam protokolam ir vajadzīgs savs starpniekservera atbalsts. HTTP pakalpojumiem šis maiņa parasti ir laba, un visam, kas nav HTTP, tā parasti nav pieejama vispār.
Pierakstiet, ko redz katra robeža
Lai ko jūs izvēlētos, dizaina pārskatam jābeidzas ar vienu tabulu, kas nosauc avota adresi un pierādāmo identitāti katrā lēcienā. Bez tās pirmais incidents rada trīs komandas, no kurām katra apraksta citu klientu.
| 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 |
Tad izvēlieties. Saglabājiet avotu, kad lietotnes autorizācija patiešām ir atkarīga no klienta adreses un varat uzņemties maršrutu. Tulkot, kad tas tā nav un varat nest identitāti ārpus joslas, un izmantojiet AWS norādes par pārsūtīšanas instancēm platformai raksturīgajiem pārsūtīšanas iestatījumiem. Vērsieties pie retranslatora, kad pakalpojums runā HTTP un jūs vēlaties, lai identitāte pārstātu būt adrese.