Zablokujte jeden cieľový rozsah pre každý klientský fond VPN
Jedno pravidlo nftables dokáže zamietnuť cieľový prefix pre povolený fond VPN bez toho, aby sa dotklo vlastnej prevádzky brány. Zlaďte háčik a pozíciu.
Jedno pravidlo dokáže udržať povolený fond VPN mimo cieľového rozsahu bez toho, aby narušilo čokoľvek iné, čo brána robí. Pravidlo samotné je krátke; o tom, či bude fungovať, rozhoduje háčik, v ktorom žije, a jeho pozícia v reťazci. Keď sa v týchto dvoch veciach pomýlite, dostanete firewall, ktorý vyzerá správne a správa sa nekonzistentne. Začnite tým, čo paket robí, keď ho pravidlo vidí.
Čo pravidlo skutočne porovnáva
Pravidlo porovnáva tri veci naraz: vstupné rozhranie, zdrojový prefix a cieľový prefix. Všetky tri musia platiť, kým sa použije drop, a práve to ho drží úzke. Čítať ho ako jeden výraz je ľahšie než ako tri oddelené politiky.
Porovnanie rozhrania odlišuje preposielanú klientsku prevádzku od vlastných spojení brány. Bez neho by pravidlo, ktoré uvádza len zdrojový fond, ovplyvnilo aj pakety, ktoré brána sama vytvára z tejto adresy, ak sa to niekedy stane. Zdrojový prefix obmedzuje politiku na povolených klientov a cieľový prefix na jeden rozsah. Čítajte pravidlo ako prienik, nie ako zoznam.
Pred akoukoľvek úpravou si zapíšte tri hodnoty: názov tunelového rozhrania, fond, ktorý server prideľuje, a prefix, ktorý chcete zamietnuť. Preklep v ktorejkoľvek z nich vytvorí pravidlo, ktoré sa čisto naparsuje a nič nechráni. Tieto tri hodnoty držte v zázname o zmene vedľa pravidla.
Háčik rozhoduje, na koho sa pravidlo vzťahuje
Reťazec netfilter je pripojený k háčiku a háčik rozhoduje, ktoré pakety reťazec vôbec vidí. Háčik forward vidí prevádzku smerovanú cez bránu, čo je práve prevádzka od klienta k cieľu. Všetko ostatné v reťazci mieri na iné publikum.
Háčik input vidí prevádzku adresovanú samotnej bráne, takže pravidlo umiestnené tam riadi prístup k jej vlastným službám, nie tranzit. Háčik output vidí prevádzku, ktorú brána sama vytvára, čo je opak toho, čo politika klientského fondu potrebuje. Názvy reťazcov sú ľubovoľné štítky, ktoré zvolil ten, kto napísal množinu pravidiel, preto háčik z názvu neodvodzujte. Overte, kam je reťazec pripojený, skôr než budete predpokladať, čo môže porovnať.
| Hook | Traffic it sees | Right for this policy |
|---|---|---|
| input | Addressed to the gateway | No, that is the host's own services |
| forward | Routed through the gateway | Yes, for client-to-destination traffic |
| output | Generated by the gateway | No, that is the opposite direction |
Prečítať pripojenie je jednoriadková kontrola, ktorá zabráni tomu, aby pravidlo skončilo v reťazci, ktorý paket nikdy nevidí.
Umiestnite pravidlo pred široké accept
Pravidlá sa vyhodnocujú v poradí a prvý verdikt vyhráva. Široké accept skôr v reťazci ukončí vyhodnocovanie pre pakety, ktoré porovná, takže drop pridaný potom sa pre ne nikdy nespustí. Toto pravidlo poradia je celý dôvod, prečo správne vyzerajúce pravidlo nemusí mať žiadny účinok.
Vložte pravidlo pred accept namiesto toho, aby ste ho pridali na koniec. Ak reťazec už obsahuje všeobecné accept pre tunelové rozhranie, nové pravidlo musí stáť pred ním, inak je len dekoratívne. Kontrolujte výsledné poradie, nie súbor, ktorý ste upravili, pretože množina pravidiel zložená z viacerých súborov nemusí zodpovedať žiadnemu z nich. Potom to potvrďte testovacím paketom z fondu.
sudo nft list chain inet filter forward
sudo nft insert rule inet filter forward iifname "tun0" ip saddr 10.90.0.0/24 ip daddr 198.51.100.0/24 drop
sudo nft -c -f /etc/nftables.conf
Tretí príkaz naparsuje súbor bez použitia, čo zachytí syntaktické chyby skôr, než sa z nich stane výpadok. Aplikujte s plánom návratu, pretože chybné pravidlo v reťazci forward môže prerušiť tunel, cez ktorý pracujete.
Existujúce toky sa o vaše nové pravidlo nestarajú
Záznam conntrack vytvorený predtým, ako pravidlo existovalo, naďalej zodpovedá skoršiemu accept. Preto nový drop niekedy vyzerá, že funguje pre nové spojenia, a pre to, ktoré sa testuje, nerobí nič.
Prečítajte si porovnanie stavu na začiatku reťazca. Ak prijíma prevádzku established a related pred vaším pravidlom, každý už prebiehajúci tok pokračuje, kým sa neuzavrie. Zvyčajne je to správanie, ktoré pri núdzovom pravidle chcete, a je mätúce, keď očakávate okamžité prerušenie. Pred nasadením sa rozhodnite, aký účinok chcete. Test, ktorý znova použije otvorené spojenie, vám povie nesprávny príbeh.
sudo conntrack -L -s 10.90.0.14 -d 198.51.100.20
sudo nft list ruleset | grep -n -A3 'ct state'
Prvý príkaz ukazuje, či tok existuje, a druhý, či ho skoré pravidlo stavu stále prijíma. Oba sú len na čítanie a bezpečné počas incidentu.
Čo toto pravidlo nie je
Pravidlo nie je čierna listina domén, politika IPv6 ani obmedzenie jednotlivého účtu aplikácie.
Každé z toho potrebuje vlastný mechanizmus. Blokovanie domény musí prekladať názvy, čo paketový filter nerobí. Prevádzka IPv6 potrebuje vlastné porovnanie, pretože výraz ip nehovorí nič o paketoch ip6. Obmedzenie na úrovni aplikácie patrí službe alebo autentizovanej proxy, nie porovnaniu prefixu. Práve oddelenie týchto požiadaviek bráni tomu, aby sa od jedného úzkeho pravidla žiadali štyri práce.
Zmluva, ktorú toto pravidlo plní, je presná: prevádzka z povoleného fondu na jeden cieľový prefix je zamietnutá, zatiaľ čo nesúvisiaca prevádzka brány si zachováva svoju existujúcu politiku. Napíšte tú vetu vedľa pravidla a ďalší človek bude vedieť, na čo bolo.