Zmena pravidla firewallu nefunguje: poradie pravidiel a stav spojenia
Upravené pravidlo môže zostať za skorším povolením alebo ho preskočí sledovanie spojení. Oddeľte oba testy, použite nový tok a zachovajte si cestu späť.
Upravili ste pravidlo, znova načítali sadu pravidiel a tunel sa správa presne ako predtým. Tento výsledok má dve časté príčiny a tie vyžadujú rôzne testy. Buď nové pravidlo stojí za skorším pravidlom, ktoré už paket prijalo, alebo je výmena, ktorú sledujete, sledované spojenie, ktoré zmena nikdy znova nevyhodnotí. Pravidlo v súbore vyjadruje zámer; o osude paketu rozhoduje aktívna cesta, na ktorú narazí. Prejdite nižšie uvedené kontroly po poradí a popri tom si ponechajte cestu späť.
Poradie pravidiel a stav spojenia sú rôzne poruchy
Zoradené reťazce sa vyhodnocujú zhora nadol a prvé pravidlo, ktoré dospeje k záverečnému verdiktu, ukončí prechod týmto reťazcom. Vložte široké povolenie nad starostlivo napísané pravidlo uzamknutia a pravidlo uzamknutia sa stane dokumentáciou: je v sade pravidiel, jeho počítadlo je nula a žiadny paket sa k nemu nikdy nedostane. Ten istý text použitý na iný reťazec tiež nič nedokazuje. V nftables sa základné reťazce pripájajú k hookom s prioritami, takže povolenie v jednom reťazci nebráni inému reťazcu na inom hooku či priorite vidieť ten istý paket.
Sledovanie spojení vytvára druhý príznak a zvonku vyzerá rovnako. Keď je tok v tabuľke stavov, povolenie pre naviazané či súvisiace pri vrchole reťazca sa vráti skôr, než sa vaše nové pravidlo vôbec posúdi. Preklady NAT majú rovnakú vlastnosť: preklad sa zafixoval, keď tok začínal, takže upravené pravidlo v postroutingu neprepíše reláciu, ktorá už beží. Preto zmena vyzerá, že v 09:00 funguje pre nové spojenie, a vyzerá, že nič nerobí pre reláciu, ktorú niekto otvoril v 08:55.
Cloudové bezpečnostné skupiny pridávajú tretí model, ktorý chytá ľudí, ktorí sa učili na iptables. Ich prichádzajúce pravidlá sú zoznam povolení vyhodnocovaný ako množina, nie ako prechod prvým zhoda, sú stavové a odobratie pravidla povolenia neukončí toky, ktoré sa už sledujú. Predpokladať sémantiku prvého párovania na platforme, ktorá ju nemá, vedie k sebavedomým, chybným záverom.
Čítajte aktívnu sadu pravidiel, nie súbor, ktorý ste upravili
Začnite tým, čo jadro práve vynucuje. Uložená konfigurácia, ktorá nikdy nebola aplikovaná, vysvetľuje prekvapivo veľa nezmeneného správania a vylúčiť ju stojí jeden príkaz:
nft list ruleset
iptables-savePotom sa pýtajte, či sa vaše pravidlo vôbec dosiahne. Počítadlá paketov odpovedajú priamo a odpovedajú lepšie než akékoľvek uvažovanie o zámere:
iptables -L FORWARD -v -n --line-numbers
nft list chain inet filter forwardPravidlo uzamknutia s nulou paketov po skutočnom testovacom pokuse nie je problém politiky, je to problém pozície. Presunúť ho je zmena na jeden riadok a syntax je presne to, čo spôsobilo pôvodnú chybu. S iptables -I vkladá a -A pridáva na koniec; s nftables insert umiestňuje pravidlo na začiatok reťazca, zatiaľ čo add pridáva na koniec. Keď má pravidlo vyhrať, povedzte to výslovne, namiesto toho, aby ste verili poradiu, ktoré sa práve načítalo.
Dokážte, či sa tok sleduje
Skôr než obviníte pravidlo, skontrolujte, či je prevádzka vôbec sledované spojenie. Spýtajte sa tabuľky stavov na konkrétny tok, namiesto toho, aby ste ju celú vysypali:
conntrack -L -p tcp --dport 1194
conntrack -E -p tcp --dport 1194Výpis ukazuje stav a zostávajúci časový limit a práve tak rozoznáte nadviazanú reláciu od nového pokusu; režim udalostí vypisuje aktualizácie, ako nastávajú, čo je užitočné, keď znova pripájate klienta. Ak je tok prítomný so stavom nadviazané skôr, než ste sa čohokoľvek dotkli, žiadna úprava filtračných pravidiel nezmení jeho osud. To nie je chyba firewallu, to je zmluva stavového filtrovania.
Odolajte skratke vyprázdniť celú tabuľku na produkčnej bráne. conntrack -F je k dispozícii a tiež zničí každý sledovaný tok na stroji, vrátane relácie správy, z ktorej pracujete, a tunela, ktorý nesie vašu konzolu. Jednotlivé záznamy sa dajú vymazať, keď to naozaj potrebujete, ale nový tok z nového zdrojového portu je zvyčajne čistejší experiment.
Niektoré cesty sa nesledujú a chovajú sa opačne. Prevádzka označená notrack v tabuľke raw, niektoré tunely obchádzajúce bežné hooky a asymetrické smerovanie, ktoré rozdeľuje tok medzi dve brány, to všetko vytvára pakety vyhodnocované jeden po druhom, alebo stav, ktorý na oboch koncoch nikdy nevznikne. Ak sa počítadlá hýbu pri každom pakete, podozrievajte takúto cestu skôr než poradie.
Testujte z nového toku s cestou späť
Skôr než otestujete pravidlo, ktoré by mohlo odrezať vzdialený prístup, vytvorte cestu obnovy: konzolu poskytovateľa, sériovú konzolu, adresu správy mimo pásma alebo druhé rozhranie, ktoré pravidlo nemôže zachytiť. Časovač návratu je rozumný spoločník, pretože obnoví predchádzajúcu sadu pravidiel, aj keby vaša relácia počas testu zahynula.
Potom testujte výmenou, ktorú stav už nemohol pokryť. Odpojte a znova pripojte klienta, aby vznikla nová pätica, a sledujte pritom oba konce:
tcpdump -ni eth0 'tcp port 1194'
journalctl -k -n 50 --no-pagerVykonajte test oboma smermi. Pravidlo, ktoré blokuje nový prichádzajúci handshake, môže stále povoľovať cestu odpovede, alebo naopak, a jednosmerný výsledok je zvyčajný dôvod, prečo uzamknutie funguje napoly. Po teste sa ešte raz pripojte, aby ste potvrdili ustálený stav, a skontrolujte, či legitímny prístup správy prežil; pravidlo napísané pre jeden port má vo zvyku zodpovedať širšiemu rozsahu, než bol zamýšľaný.
Zaznamenajte účel a pozíciu spolu s pravidlom
Pravidlo bez zaznamenaného účelu je pravidlo, ktoré si nikto netrúfne odstrániť. Pri každom zázname uzamknutia uchovávajte tok, ktorý chráni, reťazec a hook, v ktorom žije, pozíciu, ktorú musí držať voči širším povoleniam, a test, ktorý to dokázal. Keď niekto o pol roka upraví okolitú sadu pravidiel, tá poznámka je jediným varovaním, že pozícia bola úmyselná.
Skôr než zmenu uzavriete, potvrďte štyri veci: bežiaca sada pravidiel zodpovedá súboru, nové pravidlo má po čerstvom pokuse nenulové počítadlá, opačný smer aj prístup správy stále fungujú a raz ste sa znova pripojili, aby ste dokázali ustálený stav, nie stav relácie staršej než zmena. Ak čokoľvek z toho nie je overené, zmena nie je hotová, nech tunel robí čokoľvek.