Tutoriel Linux

Nftables v Linuxu, zkontrolujte pravidla před otevřením portu

Débutant6 min de lecture

Port vypadá zvenčí uzavřený, pak hledáme spíše v aplikaci nebo na routeru. Před provedením jakýchkoliv změn si prohlédněte pravidla, která jsou skutečně načtena nftables. Soubor /etc/nftables.conf může být odlišný od aktivního stavu a místní firewall sám o sobě nevysvětluje celou síťovou trasu.

Tato metoda umožňuje přečíst pravidlovou sadu, vyhledat řetězec, který zpracovává příchozí provoz, a otestovat změnu, aniž byste ztratili SSH relaci. Mějte otevřený druhý spoj pokud zasahujete na dálku.

Začněte čtením načteného firewallu

Následující příkaz nic nezmění. Zobrazí tabulky, řetězce, pravidla a případné počítadla, které jsou aktuálně přítomny v jádře:

sudo nft list ruleset

Pokud je výstup dlouhý, nejprve vylistujte tabulky a poté se zaměřte na tu, která vás zajímá:

sudo nft list tables
sudo nft list table inet filter

Rodina inet může obsahovat pravidla IPv4 i IPv6. Tabulka může také patřit k ip, ip6, bridge nebo netdev. Neměňte pravidlo IPv6 za pravidlo IPv4 v domnění, že problém je vyřešen.

V tabulce filtrování hledejte především základní řetězec s type filter hook input. To je to, co přijímá provoz určený pro stroj. Jeho řádek policy drop znamená, že pakety, které nenarazí na žádné pravidlo accept, budou odmítnuty.

Abychom viděli identifikátory pravidel, které jsou užitečné, pokud potřebujete později odstranit konkrétní pravidlo, přidejte -a:

sudo nft -a list chain inet filter input

Neplétejte si input, forward a output. Server, který přijímá SSH spojení, obvykle používá input. Stroj, který směruje provoz k jinému hostiteli, může zablokovat paket v forward. Aplikace, která se vyplňuje na Internet, prochází output.

Zkontrolujte port a pořadí pravidel

Pravidla v řetězci se vyhodnocují v pořadí. Pravidlo pro zamítnutí umístěné před povolením portu vyhrává. Hledejte protokol, port a stav spojení:

sudo nft list chain inet filter input
sudo ss -lntup

Pro SSH očekávané pravidlo často vypadá jako tcp dport 22 accept. Port může být odlišný, pokud démon naslouchá jinde. Výstup z ss -lntup umožňuje ověřit, zda program skutečně naslouchá na očekávaném portu a adrese. Otevřený firewall nečiní dostupnou rezervovanou službu.

Dále se podívejte i na pravidla ct state established,related accept a na smyčkový rozhraní iif lo accept. Ta zajišťují, že nedojde k přerušení odpovědí na již navázaná spojení a místní výměny. Pokud má pravidlová sada počítadla, porovnejte je před a po testu připojení, abyste zjistili, které pravidlo registruje provoz.

Odmítnutí může být mimo stroj: bezpečnostní skupina cloudu, router, NAT přesměrování, VLAN, podnikový firewall nebo služba, která je vázána pouze na 127.0.0.1. Z jiného počítače otestujte port pomocí nc -vz adresa_serveru 22 nebo pomocí vašeho SSH klienta. Na serveru ověřte naslouchání pomocí ss před tím, než se dotknete nftables.

Identifikujte pravidlo, které skutečně blokuje

Řetězec může volat jiný řetězec pomocí jump nebo goto. Povolení portu tedy nemusí být viditelné v prvním zobrazeném řetězci. Přečtěte si znovu volání řetězců, pojmenované sady a pravidla, která nesou předponu pro protokolování. Pravidlo typu counter drop nebo reject umístěné před portem často vysvětluje výsledek.

Můžete sledovat cílený paket pomocí nft monitor trace, ale tento příkaz generuje na aktivním stroji velké množství dat. Rezervujte si ho na krátký diagnostický úsek a filtrujte provoz podle adresy nebo portu v dočasném pravidle. Poté toto pravidlo odstraňte jeho handlem zobrazeným pomocí nft -a list ruleset.

Nenechávejte široké pravidlo pro sledování nebo protokolování na exponovaném serveru. Může naplnit protokoly nebo přidat šum do diagnostiky. Pro první kontrolu často stačí počítadla řetězce a test z jiného místa.

Aktivní pravidlová sada a trvalý soubor se mohou lišit

nft list ruleset čte aktivní stav. Neříká, který služba načetla pravidla, ani který soubor bude obnoven po restartu. Na Debianu a Ubuntu obvykle zkontrolujte /etc/nftables.conf a stav služby:

sudo systemctl status nftables
sudo systemctl is-enabled nftables
sudo grep -nE '^(table|include|flush)' /etc/nftables.conf

Na distribuci, která používá firewalld, UFW, Docker nebo nástroj hostování, může několik komponent napsat pravidla. Nekopírujte pravidlovou sadu viděnou v tutoriálu do /etc/nftables.conf, pokud jiná služba již spravuje. Nejprve identifikujte správce deklarovaný vaším strojem a po jeho prvním načtení si přečtěte pravidla znovu.

Pravidla přidaná prostřednictvím příkazového řádku často zmizí při příštím restartu nebo při příštím načtení služby. Naopak, úprava trvalého souboru nic nezmění, pokud nebude načten. To je přesně důvod, proč zkontrolovat obě strany před tím, než vyvodíte závěr, že je port otevřený.

Uložte a otestujte před aplikováním pravidla

Uložte aktuální stav před jakýmikoliv zápisy. Záložní soubor by měl zůstat čitelný pouze pro administrátora:

sudo install -m 600 /dev/null /root/nftables-before-change.nft
sudo nft list ruleset | sudo tee /root/nftables-before-change.nft > /dev/null

Poté si připravte změnu v dočasném souboru. nft -c ověřuje syntaxi bez načtení pravidel:

sudo nft -c -f /etc/nftables.conf

Tato kontrola neprokazuje, že nová pravidlová sada vás pustí dovnitř. Mějte připojenou druhou SSH relaci, aplikujte soubor v první, a poté zkuste nové připojení z jiného terminálu. Pokud ztratíte přístup, záložní relace umožňuje obnovit zálohu:

sudo nft -f /etc/nftables.conf
sudo nft list ruleset
# V případě přerušení nebo chybného pravidla:
sudo nft -f /root/nftables-before-change.nft

Vyhněte se samotnému spuštění flush ruleset na vzdáleném serveru. Odstraní všechna aktuální pravidla dříve, než potvrdíte nový soubor. Načtěte kompletní a ověřený soubor, a poté ihned zkontrolujte aktivní pravidlovou sadu.

Kontroly po úpravě

  • Znovu spusťte sudo nft list ruleset a ověřte, že očekávaná tabulka a řetězec jsou stále přítomny.
  • Testujte službu z jiného počítače s skutečně používaným portem.
  • Ověřte sudo ss -lntup, pokud zůstává port nedostupný.
  • Zkontrolujte jádrový protokol pomocí sudo journalctl -k -b, pokud vaše pravidla protokolují odmítnuté pakety.
  • Po restartu zkontrolujte, že služba nftables skutečně obnovuje trvalý soubor vaší distribuce.

Pro jednoduché případy je článek o UFW pod Linuxem lépe přizpůsoben. Pokud musíte diagnostikovat dostupnost služby před úpravou firewallu, zkontrolujte také otevřené porty pomocí ss. Dokumentace nft(8) podrobně popisuje rodiny, řetězce a možnost -c.

Tux prozkoumává síťový firewall s lupou
Inspekce aktivních pravidel firewallu nftables pod Linuxem.
sudo apt update && sudo apt upgrade