Un hub care rulează WireGuard poate ține grupurile de parteneri separate fără o interfață sau un tabel de rutare separat pentru fiecare grup. Două mecanisme fac treaba, iar confundarea lor este motivul obișnuit pentru care o politică pare corectă și nu face nimic. Un strat decide cine poate revendica o adresă de sursă. Celălalt decide unde are voie să meargă acel pachet.

Două sarcini, ținute separat

Stratul de tunel răspunde la o întrebare îngustă: a autorizat cheia acestui partener această adresă de sursă internă. Stratul de redirecționare răspunde la una mai largă: poate acest pachet să iasă spre acea destinație. Niciunul nu răspunde la întrebarea celuilalt și niciunul nu este singur o politică de acces completă.

Această separare este motivul pentru care un partener poate fi autentificat, adresat corect și totuși să nu poată ajunge la o gazdă la care nu ar trebui să ajungă. Explică și inversul: o regulă de firewall care permite tot nu dovedește nimic despre cine poate revendica ce adresă.

Proiectați ambele straturi împreună, apoi testați-le pe amândouă. O configurație corectă într-un strat și netestată în celălalt eșuează deschis sau închis în funcție de valoarea implicită.

Dați fiecărui partener doar propria adresă

Partenerii cu mai multe gazde vă ispitesc să acordați întregul interval al grupului pe partea de server. Acea permisiune este o revendicare de adresă de sursă, așa că un client compromis sau configurat greșit poate prezenta orice adresă din interval, iar tunelul o va accepta. Alocați un /32 pe partener pentru propria adresă internă. Setați intervalele de grup doar pe clienți, unde acestea descriu ce destinații poate atinge acel client și nu ce surse poate folosi.

Firewallul compară apoi o sursă în care poate avea încredere. O regulă scrisă pentru intervalul grupului rămâne o grupare utilă și devine semnificativă doar atunci când niciun partener individual nu poate revendica o adresă care aparține altui membru.

Scrieți politica de redirecționare care separă grupurile

Traficul interesant intră și iese aici prin aceeași interfață de tunel, deci traversează calea de redirecționare și nu calea de intrare a gazdei. Regulile aparțin lanțului de redirecționare existent al managerului de firewall care deține gazda, iar ele sunt fragmente, nu un set complet de reguli.

iifname "wg0" oifname "wg0" ip saddr 10.66.10.0/24 ip daddr 10.66.10.0/24 accept
iifname "wg0" oifname "wg0" ip saddr 10.66.20.0/24 ip daddr 10.66.20.0/24 accept
iifname "wg0" oifname "wg0" drop

Primele două reguli permit traficul în interiorul fiecărui grup. Ultima blochează tot restul care traversează acea interfață, iar asta produce izolarea între grupuri. Adăugați reguli explicite pentru cealaltă familie de adrese dacă aveți nevoie de ele, pentru că un drop scris pentru IPv4 nu autorizează și nu descrie comportamentul IPv6.

Ordinea decide dacă politica se aplică

Ordinea regulilor contează mai mult decât fragmentul în sine. O regulă generică ce acceptă conexiuni stabilite și plasată înaintea acestor intrări lasă un flux vechi între grupuri să continue, așa că izolarea se aplică doar conexiunilor noi. Decideți care dintre cele două rezultate îl doriți înainte de a reîncărca.

Un verdict de acceptare nu este nici el întotdeauna final între lanțuri la același cârlig. Dacă un alt lanț de bază rulează mai târziu, politica efectivă este combinația, așa că inspectați contoarele, nu fișierul pe care l-ați editat. Contoarele sunt cea mai ieftină dovadă disponibilă. O regulă fără număr de pachete nu se potrivește, iar o regulă care se potrivește în timp ce un lanț ulterior acceptă vă spune că dropul este în locul greșit.

Testați matricea, nu numărul de fișiere

Construiți o matrice mică de rezultate așteptate și verificați fiecare celulă. De la grupul A la grupul A ar trebui să funcționeze, de la grupul B la grupul B ar trebui să funcționeze, iar de la A la B nu ar trebui, în ambele direcții și pentru ambele familii de adrese dacă le acceptați.

nft list ruleset
wg show wg0 allowed-ips
ping -c 2 10.66.10.5
conntrack -L -s 10.66.20.7 2>/dev/null | head

Primele două arată ce este configurat. Pingul de la un membru al grupului greșit arată ce se întâmplă de fapt. Lista conntrack arată dacă un flux mai vechi este încă acceptat și exact așa o modificare de izolare nu intră în vigoare în tăcere.

Serviciile de gazdă pe hub și accesul la o rețea LAN din spatele lui sunt căi separate cu politică separată. Notați care dintre ele este acoperit de matrice, pentru că un test care verifică doar traficul între parteneri nu spune nimic despre niciuna dintre ele.

Articole similare