Viens noteikums var turēt atļautu VPN pūlu prom no galamērķa diapazona, netraucējot neko citu, ko dara vārteja. Pats noteikums ir īss; to, vai tas darbosies, nosaka āķis, kurā tas dzīvo, un tā pozīcija ķēdē. Kļūdoties šajos divos, iegūst ugunsmūri, kas izskatās pareizi un uzvedas nekonsekventi. Sāciet ar to, ko dara pakete, kad noteikums to redz.

Ko noteikums faktiski saskaņo

Noteikums vienlaikus saskaņo trīs lietas: ievades saskarni, avota prefiksu un galamērķa prefiksu. Visiem trim jābūt patiesiem, pirms tiek piemērots drop, un tas to notur šauru. To lasīt kā vienu izteiksmi ir vieglāk nekā kā trīs atsevišķas politikas.

Saskarnes saskaņošana ir tas, kas atšķir pārsūtīto klientu trafiku no pašas vārtejas savienojumiem. Bez tā noteikums, kas nosauc tikai avota pūlu, ietekmētu arī paketes, ko pati vārteja ģenerē no šīs adreses, ja tas kādreiz notiek. Avota prefikss ierobežo politiku ar atļautajiem klientiem, un galamērķa prefikss to ierobežo ar vienu diapazonu. Lasiet noteikumu kā šķēlumu, nevis kā sarakstu.

Pierakstiet trīs vērtības, pirms kaut ko maināt: tuneļa saskarnes nosaukumu, pūlu, ko serveris izdala, un prefiksu, kuru grasāties atteikt. Ievadkļūda jebkurā no tām rada noteikumu, kas tiek tīri parsēts un neko neaizsargā. Glabājiet šīs trīs vērtības izmaiņu ierakstā blakus noteikumam.

Āķis nosaka, uz ko noteikums attiecas

netfilter ķēde ir piesaistīta āķim, un āķis nosaka, kuras paketes ķēde vispār redz. forward āķis redz trafiku, kas tiek maršrutēts caur vārteju, un tieši tas ir trafiks no klienta uz galamērķi. Viss pārējais ķēdē ir vērsts uz citu auditoriju.

input āķis redz trafiku, kas adresēts pašai vārtejai, tāpēc tur ievietots noteikums pārvalda piekļuvi tās pašas pakalpojumiem, nevis tranzītu. output āķis redz trafiku, ko vārteja pati rada, un tas ir pretējs tam, kas nepieciešams klientu pūla politikai. Ķēžu nosaukumi ir patvaļīgas etiķetes, ko izvēlējies noteikumu kopas autors, tāpēc neizseciniet āķi no nosaukuma. Pārbaudiet, kur ķēde ir piesaistīta, pirms pieņemat, ko tā var saskaņot.

HookTraffic it seesRight for this policy
inputAddressed to the gatewayNo, that is the host's own services
forwardRouted through the gatewayYes, for client-to-destination traffic
outputGenerated by the gatewayNo, that is the opposite direction

Piesaistes nolasīšana ir vienas rindas pārbaude, kas neļauj noteikumam nonākt ķēdē, kas paketi nekad neredz.

Novietojiet noteikumu pirms platā accept

Noteikumi tiek vērtēti secīgi, un pirmais spriedums uzvar. Plats accept agrāk ķēdē pārtrauc vērtēšanu tām paketēm, ar kurām tas saskan, tāpēc vēlāk pievienots drop tām nekad neizpildās. Šis secības noteikums ir viss iemesls, kāpēc pareizi izskatīgs noteikums var būt bez efekta.

Ievietojiet noteikumu pirms accept, nevis pievienojiet to beigās. Ja ķēdē jau ir vispārīgs accept tuneļa saskarnei, jaunajam noteikumam jābūt pirms tā, citādi tas ir tikai dekoratīvs. Pārbaudiet iegūto secību, nevis failu, ko rediģējāt, jo noteikumu kopa, kas salikta no vairākiem failiem, var neatbilst nevienam no tiem. Pēc tam apstipriniet ar testa paketi no pūla.

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

Trešā komanda parsē failu, to nepiemērojot, un tas noķer sintakses kļūdas, pirms tās kļūst par pārtraukumu. Piemērojiet ar atritināšanas plānu, jo kļūdains noteikums forward ķēdē var pārgriezt tuneli, pa kuru strādājat.

Esošās plūsmas neuztraucas par jūsu jauno noteikumu

conntrack ieraksts, kas izveidots pirms noteikuma pastāvēšanas, turpina atbilst iepriekšējam accept. Tāpēc jauns drop dažkārt izskatās, ka strādā svaigiem savienojumiem, un neko nedara tam, kas tiek testēts.

Izlasiet stāvokļa saskaņojumu ķēdes augšgalā. Ja tas pieņem established un related trafiku pirms jūsu noteikuma, katra jau notiekošā plūsma turpina plūst, līdz tā aizveras. Parasti tā ir uzvedība, ko vēlaties avārijas noteikumam, un tā mulsina, ja gaidāt tūlītēju pārtraukumu. Pirms izvietošanas izlemiet, kādu efektu vēlaties. Tests, kas atkārtoti izmanto atvērtu savienojumu, jums pastāstīs nepareizu stāstu.

sudo conntrack -L -s 10.90.0.14 -d 198.51.100.20
sudo nft list ruleset | grep -n -A3 'ct state'

Pirmā komanda parāda, vai plūsma pastāv, un otrā parāda, vai agrīns stāvokļa noteikums to joprojām pieņem. Abas ir tikai lasāmas un drošas izpildīt incidenta laikā.

Kas šis noteikums nav

Noteikums nav domēnu melnais saraksts, IPv6 politika vai ierobežojums atsevišķam lietojumprogrammas kontam.

Katram no tiem vajadzīgs savs mehānisms. Domēna bloķēšanai jāatrisina nosaukumi, ko pakešu filtrs nedara. IPv6 trafikam vajadzīga sava saskaņošana, jo izteiksme ip neko nepasaka par ip6 paketēm. Lietojumprogrammas līmeņa ierobežojums pieder pakalpojumam vai autentificētam starpniekserverim, nevis prefiksa saskaņošanai. Tieši šo prasību šķiršana neļauj vienam šauram noteikumam prasīt četrus darbus.

Līgums, ko šis noteikums sniedz, ir precīzs: trafiks no atļauta pūla uz vienu galamērķa prefiksu tiek atteikts, kamēr nesaistīts vārtejas trafiks saglabā savu pašreizējo politiku. Uzrakstiet šo teikumu blakus noteikumam, un nākamais cilvēks zinās, kam tas bija.

Saistītie raksti