Zašto nftables ne vidi OpenVPN saobraćaj između klijenata
Saobraćaj između ravnopravnih čvorova dostavlja se unutar VPN procesa, pa se brojači prosljeđivanja nikada ne pomjeraju. Da biste ga izbrojali, morate birati između puta kroz jezgro i puta kroz proces.
Dva klijenta na jednom serveru razmjenjuju datoteke, prijenos uspijeva, a svako pravilo prosljeđivanja koje usmjerite na tunel prijavljuje nula paketa. Pravila nisu pokvarena i lanac nije na pogrešnom mjestu. Kada je prosljeđivanje između ravnopravnih čvorova uključeno, paket se dostavlja unutar procesa servera i stek domaćina nikada ne postaje ruter, pa jezgreni firewall nema šta brojati. Razumijevanje te podjele odlučuje hoćete li zadržati prečicu ili ponovo izgraditi put kroz jezgro.
Pratite jedan paket kroz server
U rutiranom tunelu, demon predaje dešifrovani paket svakog klijenta tunelskom uređaju. Odatle ga domaćin rutira, pokreće se kuka za prosljeđivanje, a pravilo koje odgovara tunelskom uređaju može brojati ili odbaciti saobraćaj. To je put koji pretpostavlja većina primjera firewall-a.
| Forwarding path | Who decides | What the host firewall sees |
|---|---|---|
| Kernel routing between clients | Host routing table and forward rules | Every inner packet, with interface names |
| Peer forwarding inside the server process | The VPN daemon's own peer table | Only the outer encrypted transport |
Prečica uklanja domaćina iz sredine. Dešifrovani paket jedne sesije predaje se drugoj sesiji unutar demona, a unutrašnji paket nikada se ne emitira na tunelskom uređaju niti ga domaćin rutira. Enkapsulirani saobraćaj i dalje prelazi fizički interfejs, pa vanjsko snimanje izgleda zauzeto dok unutrašnja pravila ćute. Snimanje na tunelskom uređaju ne pokazuje baš ništa, što iznenađuje svakoga ko očekuje da tamo gleda prijenos. Ta asimetrija je najbrži način da prepoznate prečicu izvan demona.
Test brojačem koji rješava koji je put korišten
Pričvrstite brojač na pravilo koje bi trebalo da važi, pokrenite prijenos između dva klijenta koje bi to pravilo trebalo blokirati, a zatim pročitajte brojač.
sudo nft list ruleset
sudo nft add rule inet filter forward iifname "tun0" oifname "tun0" counter accept
sudo nft list chain inet filter forward
Ako prijenos uspije, a brojač ostane na nuli, jezgro nikada nije obradilo te pakete i nikakvo uređivanje pravila to neće promijeniti. Ponovite isti test prema usluzi na samom serveru, jer taj tok zaista prolazi kroz stek domaćina i njegov brojač se pomjera. Upoređivanje dva rezultata je ono što daje odgovor.
Dva detalja sprječavaju pogrešno čitanje. Ime interfejsa upisano u oznaku lanca ne filtrira ništa samo po sebi, jer se podudaranje dešava na poljima interfejsa unutar pravila. A premošćeni dizajn 2. sloja ponaša se opet drugačije: tamo klijenti dijele jednu broadcast domenu, pa se otkrivanje ravnopravnih čvorova očekuje, a ne smatra greškom rutiranja.
Prekidač nije lista pristupa
Ovo je dio koji košta jedno poslijepodne. Prosljeđivanje između ravnopravnih čvorova je jedna postavka uključeno ili isključeno, a dok je uključena demon je jedina točka prosljeđivanja. Firewall domaćina ne može izraziti ko smije do koga, a datoteke po klijentu ne pretvaraju prekidač u matricu politika.
Ako su vam potrebna pravila po čvoru, izbor je između odustajanja od prečice i odustajanja od firewall-a domaćina kao kontrole. Isključivanje vraća prosljeđivanje kroz jezgro, što zahtijeva uključeno IP prosljeđivanje na serveru i izričita pravila za tokove koje želite. Držanje uključenim znači da politika živi u konfiguraciji demona, što je u praksi svi čvorovi ili nijedan.
Odvojeni serverski procesi sa vlastitim bazenima adresa i portovima su izvediva sredina. Svaki proces nosi tačno jednu odluku o pristupu, pa dvije grupe mogu imati različita pravila bez matrice politika. Domaćin može rutirati između bazena kada je to namjera, a firewall tada vidi te tokove jer prelaze preko domaćina. Cijena su dodatni portovi, dodatni certifikati i profil po grupi.
Biranje točke prosljeđivanja
Odaberite prosljeđivanje kroz jezgro kada je firewall motor politike, kada vam treba zapisivanje po toku ili kada je obračun važan. Cijena je propusnost kroz stek domaćina i više pravila za održavanje. Prednost je da svaki postojeći alat, od brojača do izvoznika tokova, ponovo opisuje saobraćaj. Na malom serveru ta cijena je nevidljiva; na zauzetom releju nije.
Odaberite prosljeđivanje unutar procesa kada je saobraćaj između čvorova ili sav dopušten ili sav zabranjen i server je dimenzioniran za to. Cijena je da brojači, discipline reda čekanja i praćenje veza više ne opisuju unutrašnje tokove; to je prihvatljivo samo ako se kasnije niko ne osloni na njih.
Šta god odabrali, zapišite to pored firewall pravila. Skup pravila koji izgleda kao da dopušta saobraćaj između čvorova dok demon ionako odlučuje zavarava sljedeću osobu koja bude tražila grešku u neuspjelom prijenosu. Svako ko čita samo pravila pretpostavit će da je jezgro kapija.
Šta provjeriti prije izmjene pravila
Pročitajte konfiguraciju koju je server zaista učitao, a ne datoteku koju pamtite kao uređenu, i potvrdite da li je opcija za čvorove prisutna. Ako ste je promijenili, provjerite da se usluga ponovo učitala, a ne samo prepisala datoteku na disku.
Zatim ponovite test sa tokom od klijenta prema serveru da dokažete da pravilo uopšte odgovara, i provjerite gurnute rute, jer ruta koja nedostaje izgleda sasvim kao blokada firewall-a sa strane klijenta. Mijenjajte redoslijed pravila samo kada znate koja točka prosljeđivanja posjeduje odluku.