Meshnet, Docker și permisiunea dintre ele
Un nod din mesh care ajunge la un container publicat traversează o permisiune a gazdei și o traducere Docker. Examinați-le separat, altfel veți aproba domeniul greșit.
Două URL-uri pot părea identice în browserul unui nod și totuși pot însemna lucruri complet diferite pentru firewall. Unul indică un serviciu care ascultă pe gazda însăși. Celălalt indică o adresă de gazdă al cărei port este publicat într-o rețea de containere, unde un pas de traducere predă conexiunea către alt IP. Într-o rețea nod-la-nod care controlează accesul la rețeaua locală cu o permisiune pentru fiecare nod, acea diferență este întreaga examinare.
Permisiunea privește punctul final al gazdei, traducerea privește Docker, iar autentificarea privește aplicația. Trei decizii, trei locuri de privit.
Urmăriți destinația după publicare
Luați o gazdă Linux cu Docker care publică portul 80 al unui container pe portul 8080 al gazdei. Un nod se conectează la adresa de mesh a gazdei pe 8080, gazda acceptă conexiunea, iar o traducere de destinație o rescrie către adresa de punte a containerului, de obicei ceva de genul 172.17.0.2 pe portul 80.
Până când o regulă inspectează acel flux, destinația interesantă este containerul, nu gazda. O politică ce raționează doar despre „un serviciu pe această mașină” raționează despre obiectul greșit. Cererea a aterizat pe gazdă, dar este livrată altundeva.
De aceea documentația mesh-ului enumeră containerele Docker printre resursele pe care permisiunea de rețea locală le guvernează pe Linux. Permisiunea nu este sinonimă cu o intrare obișnuită într-o listă de permisiuni VPN, iar cele două controale nu se înlocuiesc reciproc. Unul decide dacă un nod poate ajunge deloc la resurse locale; celălalt decide ce destinații transportă o rută tunelată.
Decideți cât acces local acordă o permisiune
A acorda unui nod acces la rețeaua locală nu este o decizie despre un singur container. Poate expune alte servicii publicate pe aceeași gazdă și poate ajunge mai departe în funcție de modul în care gazda redirecționează. Examinați domeniul efectiv înainte de a apăsa comutatorul pentru un singur panou.
Apoi priviți unde publică Docker portul. O publicare pe 0.0.0.0 creează un ascultător pe fiecare adresă a gazdei, ceea ce poate adăuga o intrare LAN obișnuită lângă cea a mesh-ului. Dacă cerința este doar mesh-ul, legați publicarea de adresa sau interfața specifică pe care o aveți în vedere, și tratați legarea mai largă ca o constatare separată, nu ca o comoditate.
Păstrați politica de redirecționare a gazdei și autentificarea aplicației suficient de înguste pentru serviciu. Un URL care pare privat nu este un control de acces, iar un container care se încrede în fiecare sursă din rețeaua sa de punte nu este protejat de faptul că nodul din mesh a fost aprobat. Autentificarea aplicației este a treia decizie și singura care știe cine este utilizatorul. O permisiune la nivel de gazdă nu poate oferi această cunoaștere.
Testați permisiunea, nu doar URL-ul
Din nodul aprobat, deschideți serviciul exact și confirmați că funcționează. Apoi încercați o destinație care ar trebui să rămână refuzată și confirmați că nu funcționează. Testarea doar a căii fericite vă spune că permisiunea a fost acordată; nu vă spune că granița este acolo unde credeți.
Comparați separat un serviciu nativ al gazdei. Dacă o bază de date ascultă pe gazdă și un panou rulează într-un container, ele urmează căi diferite prin aceeași permisiune și pot să nu fie guvernate la fel de politica de redirecționare a gazdei. Notați care este care înainte de a scrie nota de examinare.
Nu goliți tabelele Docker sau regulile clientului mesh pentru a „reseta” accesul. Ambele produse își instalează propria integrare de politici, iar ștergerea ei produce o gazdă care pare să funcționeze în timp ce ocolește controalele pe care ați fost rugat să le evaluați. Dacă o regulă pare greșită, citiți-o și schimbați exact acea regulă. Dacă nu puteți explica ce face o regulă, aceasta este constatarea, nu un motiv să o ștergeți.
Scrieți constatarea în termenii sistemului însuși
Contează distincția pe care produsul o aplică de fapt, nu cea din șablonul de examinare: permisiunea de a ajunge la un punct final al gazdei, permisiunea de a ajunge la resurse private rutate și permisiunea de a folosi aplicația. Publicarea unui port lasă aceste trei decizii exact acolo unde erau, iar un examinator care le tratează ca una singură va aproba domeniul greșit.
Indicați adresa gazdei, portul publicat, destinația containerului și permisiunea nodului în aceeași propoziție. Acea propoziție poate fi testată de altcineva, și de aceea o face o constatare și nu o opinie.