nftables

Nowoczesny system zapory sieciowej zastępujący iptables i pokrewne narzędzia. Oferuje spójniejszą składnię i lepszą wydajność.

nftables to wbudowany w jądro Linuksa system filtrowania pakietów, który zastąpił wysłużone iptables i jego rodzeństwo: ip6tables, arptables oraz ebtables. Zamiast czterech osobnych narzędzi z różną składnią dostajesz jeden framework i jedno polecenie w przestrzeni użytkownika: nft. Pod spodem nadal pracuje Netfilter (stąd nazwa: Netfilter Tables), ale logika reguł przeniosła się do maszyny wirtualnej w jądrze, co daje czytelniejszą konfigurację i lepszą wydajność przy dużej liczbie reguł. Trafił do mainline’a w jądrze 3.13 na początku 2014 roku i od tamtej pory jest domyślnym backendem w większości nowoczesnych dystrybucji (Debian od wersji 10, RHEL/Fedora od dawna).

Jak to działa

W nftables budujesz hierarchię: table (przypisana do rodziny adresów, np. ip, ip6, inet, arp, bridge), w niej chain (łańcuch z określonym hookiem, np. input, forward, output), a w łańcuchu rule z dopasowaniem i akcją. Kluczowa różnica względem iptables: rodzina inet obsługuje IPv4 i IPv6 jednocześnie, więc nie musisz duplikować reguł w dwóch narzędziach. Domyślnie nic nie istnieje — tabele i łańcuchy tworzysz sam, więc masz pełną kontrolę i żadnych ukrytych reguł w tle.

Mocną stroną są też sets i maps — zamiast 200 osobnych reguł blokujących adresy IP wrzucasz je do jednego zbioru i dopasowujesz w jednej regule. To właśnie stąd bierze się skok wydajności: jądro robi lookup w strukturze danych zamiast przelatywać liniowo przez setki wpisów.

Przykład z praktyki

Powiedzmy, że stawiasz prosty firewall na serwerze i chcesz wpuszczać tylko SSH oraz ruch powiązany z istniejącymi połączeniami:

  • nft add table inet filter
  • nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
  • nft add rule inet filter input ct state established,related accept
  • nft add rule inet filter input tcp dport 22 accept

Cały aktywny zestaw reguł podejrzysz przez nft list ruleset, a trwałą konfigurację trzymasz zwykle w /etc/nftables.conf i ładujesz przez usługę nftables.service.

Na co uważać

Najczęstszy mit: „iptables zniknęło”. Nie zniknęło — komenda iptables w nowych systemach to zwykle tryb zgodności iptables-nft, który pod spodem i tak gada z nftables. Mieszanie obu po staremu (iptables-legacy i nftables naraz) to za to prosta droga do reguł, które się nawzajem przesłaniają. Druga pułapka: ustawiasz policy drop na łańcuchu input przez zdalne SSH i zapominasz najpierw dodać reguły wpuszczającej port 22 — gratulacje, właśnie odciąłeś się od serwera. Zawsze testuj politykę DROP mając pod ręką konsolę awaryjną.

Pojęcia powiązane: Netfilter, iptables, conntrack (śledzenie stanu połączeń), firewalld i ufw (nakładki upraszczające konfigurację), eBPF/XDP (filtrowanie pakietów na jeszcze niższym poziomie).