Kompletný sprievodca nftables: Moderný Linux firewall pre bezpečnosť serverov v roku 2026

Kompletný sprievodca moderným Linux firewallom nftables — od architektúry cez stavový firewall, rate limiting, geo-blocking a integráciu s Fail2Ban až po automatizáciu pomocou Ansible. Praktické príklady pre produkčné nasadenie.

Úvod: Prečo je nftables budúcnosť Linux firewallu

Ak stále používate iptables na správu firewallu vašich Linux serverov, mám pre vás správu — žijete v minulosti. Nie, vážne. Väčšina moderných distribúcií vrátane Debian 12, Fedora 40+, Ubuntu 24.04 a RHEL 9 už prešla na nftables ako predvolený firewallový framework. A majú na to pádne dôvody.

Čísla z roku 2025 hovoria samy za seba: jadro Linuxu malo 5 530 CVE zraniteľností, čo je nárast o 28 % medziročne — v priemere 8–9 nových zraniteľností jadra každý deň. Exploitačná aktivita cielená na Linux prostredia vzrástla o 130 % medziročne. Ransomvérové skupiny aktívne cielia na Linux servery, najmä virtualizačné platformy a cloudové workloady.

V tomto prostredí nie je správne nakonfigurovaný firewall luxus. Je to absolútna nevyhnutnosť.

A práve tu prichádza nftables. Je to nástupca iptables v rámci subsystému Netfilter, dostupný od jadra 3.13 (január 2014), no až v posledných rokoch sa stal de facto štandardom. V tomto článku si ukážeme všetko — od základnej architektúry cez praktické konfigurácie, pokročilé funkcie ako rate limiting a geo-blocking, až po integráciu s Fail2Ban a automatizáciu pomocou Ansible. Tak poďme na to.

Prečo nftables namiesto iptables

Predtým, než sa pustíme do praktických príkladov, poďme si ujasniť, prečo je prechod na nftables nielen odporúčaný, ale v roku 2026 prakticky nevyhnutný.

Hlavné výhody nftables oproti iptables

Iptables bol revolučný nástroj, keď bol predstavený v roku 2001. No za 25 rokov sa jeho obmedzenia stali čoraz zreteľnejšími. Nftables ich rieši zásadným spôsobom:

  • Zjednotený nástroj: Jeden príkaz nft nahrádza štyri samostatné utility — iptables, ip6tables, arptables a ebtables. Konečne žiadne duplikovanie pravidiel medzi IPv4 a IPv6.
  • Kompilovaný bytekód: Na rozdiel od iptables, kde sa pravidlá vyhodnocujú lineárne (O(n)), nftables kompiluje pravidlá do bytekódu, ktorý vykonáva virtuálny stroj v jadre. Výsledkom sú vyhľadávania O(log n) — pri veľkom počte pravidiel je to obrovský rozdiel.
  • Natívne sety a mapy: Iptables vyžadoval externý modul ipset na prácu so skupinami adries. V nftables sú sety, mapy a slovníky natívnou súčasťou frameworku.
  • Atomické aktualizácie: Zmeny pravidiel sa aplikujú atomicky v rámci jednej Netlink transakcie — žiadne race conditions, žiadne okamihy bez ochrany.
  • Vstavaný tracing: Iptables nemal žiadnu vstavanú debugovaciu funkcionalitu. Nftables má natívny tracing na diagnostiku — a úprimne, toto mi pri ladení pravidiel ušetrilo hodiny života.
  • Čistejšia syntax: Pravidlá sú čitateľnejšie a jednoduchšie na údržbu.

Výkon v praxi: prípad Kubernetes

Najlepší dôkaz výkonnostného rozdielu prišiel s integráciou nftables do Kubernetes kube-proxy. Nový nftables režim, ktorý dosiahol beta v roku 2025 a smeruje k GA vo verzii 1.33, priniesol skutočne dramatické zlepšenia:

  • V klastroch s 5 000 až 10 000 službami je priemerná latencia (p50) pre nftables porovnateľná s najlepším prípadom (p01) pre iptables.
  • V klastri s 30 000 službami dokonca najhoršia latencia (p99) nftables prekonáva najlepšiu latenciu iptables. Áno, čítate správne.
  • Nftables API umožňuje každému komponentu mať vlastnú privátnu tabuľku — žiadne globálne zámky medzi komponentami.

Tieto čísla jasne ukazujú, že pri akomkoľvek väčšom nasadení je nftables jednoznačne lepšia voľba.

Architektúra nftables: Tabuľky, reťazce a pravidlá

Pochopenie hierarchickej štruktúry nftables je kľúčové pre efektívnu konfiguráciu. Na rozdiel od iptables, kde boli tabuľky a reťazce preddefinované, v nftables si vytvárate vlastnú štruktúru od základov. Na prvý pohľad to môže pôsobiť zložitejšie, ale v praxi je to oveľa flexibilnejšie.

Tabuľky (tables)

Tabuľky sú najvyššia úroveň hierarchie. Každá tabuľka patrí do jednej adresnej rodiny:

  • ip — filtruje len IPv4 prevádzku
  • ip6 — filtruje len IPv6 prevádzku
  • inet — filtruje IPv4 aj IPv6 súčasne (odporúčané)
  • arp — filtruje ARP pakety
  • bridge — filtruje premostené pakety
  • netdev — filtruje pakety na úrovni sieťového zariadenia (najskoršie zachytenie)

Pre väčšinu serverových konfigurácií budete používať rodinu inet, pretože vám umožňuje spravovať IPv4 aj IPv6 pravidlá v jednej tabuľke. Jednoducho, menej duplicity.

# Vytvorenie tabuľky pre IPv4 aj IPv6
nft add table inet firewall

# Zobrazenie existujúcich tabuliek
nft list tables

Reťazce (chains)

Reťazce žijú vnútri tabuliek a môžu byť dvoch typov:

  • Base chains — pripojené k hookom jadra (input, output, forward, prerouting, postrouting). Spracovávajú pakety automaticky.
  • Regular chains — nie sú pripojené k hookom. Volajú sa z iných reťazcov pomocou jump alebo goto.

Base chain vyžaduje tri parametre: typ (filter, nat, route), hook (kde v spracovaní paketov sa zaradí) a prioritu (poradie spracovania).

# Vytvorenie base chain pre filtrovanie vstupnej prevádzky
nft add chain inet firewall input { type filter hook input priority filter \; policy drop \; }

# Vytvorenie base chain pre výstupnú prevádzku
nft add chain inet firewall output { type filter hook output priority filter \; policy accept \; }

# Vytvorenie base chain pre preposielanie
nft add chain inet firewall forward { type filter hook forward priority filter \; policy drop \; }

Pravidlá (rules)

Pravidlá sú základné stavebné bloky. Každé pravidlo obsahuje výrazy na porovnávanie (match) a akcie (verdict):

# Povolenie loopback rozhrania
nft add rule inet firewall input iifname "lo" accept

# Povolenie etablovaných a súvisiacich spojení
nft add rule inet firewall input ct state established,related accept

# Povolenie SSH z konkrétnej podsiete
nft add rule inet firewall input ip saddr 192.168.1.0/24 tcp dport 22 accept

# Povolenie HTTPS
nft add rule inet firewall input tcp dport 443 accept

# Logovanie a zahodenie ostatnej prevádzky
nft add rule inet firewall input counter log prefix "DROPPED: " drop

Praktická konfigurácia: Stavový firewall od základov

Teraz si ukážeme kompletný stavový firewall vhodný pre produkčný Linux server. Namiesto pridávania pravidiel po jednom si vytvoríme konfiguračný súbor — a toto je naozaj ten správny prístup pre produkčné nasadenia. Interaktívne pridávanie pravidiel cez príkazový riadok je fajn na testovanie, ale pre ostrú prevádzku chcete mať všetko v súbore.

Základná konfigurácia pre webový server

Vytvorte súbor /etc/nftables.conf:

#!/usr/sbin/nft -f

# Vyčistenie existujúcich pravidiel
flush ruleset

# Hlavná tabuľka pre filtrovanie
table inet firewall {
    # Sety pre správu adries
    set trusted_networks {
        type ipv4_addr
        flags interval
        elements = {
            10.0.0.0/8,
            172.16.0.0/12,
            192.168.0.0/16
        }
    }

    set blocked_ips {
        type ipv4_addr
        flags dynamic,timeout
        timeout 24h
    }

    set web_ports {
        type inet_service
        elements = { 80, 443 }
    }

    # Vstupný reťazec — predvolená politika: zahodiť
    chain input {
        type filter hook input priority filter; policy drop;

        # Zahodenie paketov z blokovaných IP
        ip saddr @blocked_ips counter drop

        # Povolenie loopback
        iifname "lo" accept

        # Povolenie etablovaných a súvisiacich spojení
        ct state established,related accept

        # Zahodenie neplatných spojení
        ct state invalid counter drop

        # Povolenie ICMP (ping) s limitom
        ip protocol icmp icmp type echo-request limit rate 5/second burst 10 packets accept
        ip6 nexthdr icmpv6 icmpv6 type { echo-request, nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } limit rate 5/second burst 10 packets accept

        # Ochrana proti SYN flood
        tcp flags syn limit rate 25/second burst 50 packets accept

        # Povolenie SSH z dôveryhodných sietí
        ip saddr @trusted_networks tcp dport 22 accept

        # Povolenie webových portov
        tcp dport @web_ports accept

        # Logovanie zahodených paketov (s limitom na logovanie)
        limit rate 10/minute burst 5 packets log prefix "[nft-drop] " counter drop
    }

    # Výstupný reťazec
    chain output {
        type filter hook output priority filter; policy accept;

        # Povolenie loopback
        oifname "lo" accept

        # Povolenie etablovaných spojení
        ct state established,related accept

        # Povolenie DNS, HTTP/HTTPS, NTP
        tcp dport { 53, 80, 443 } accept
        udp dport { 53, 123 } accept
    }

    # Reťazec pre preposielanie — zahodenie (ak nepoužívate routing)
    chain forward {
        type filter hook forward priority filter; policy drop;
    }
}

# NAT tabuľka (ak potrebujete masquerade)
# table inet nat {
#     chain postrouting {
#         type nat hook postrouting priority srcnat; policy accept;
#         oifname "eth0" masquerade
#     }
# }

Aktivácia a overenie

Po vytvorení konfigurácie ju musíte aplikovať a zabezpečiť perzistenciu:

# Kontrola syntaxe (suchý beh)
nft -c -f /etc/nftables.conf

# Aplikovanie pravidiel
sudo nft -f /etc/nftables.conf

# Zobrazenie aktuálnych pravidiel
sudo nft list ruleset

# Povolenie nftables služby pri štarte
sudo systemctl enable nftables
sudo systemctl start nftables

# Overenie stavu
sudo systemctl status nftables

Dôležité upozornenie: Pred aplikovaním nových pravidiel na vzdialenom serveri si vždy zabezpečte alternatívny prístup. Chybná konfigurácia firewallu vás môže odrezať od vlastného servera (a verte mi, stalo sa to aj skúsenejším adminom). Tip: nastavte si cron job, ktorý po 5 minútach obnoví pôvodnú konfiguráciu, kým nepotvrdíte, že nová funguje správne.

# Záchranný cron job — obnoví pôvodné pravidlá po 5 minútach
# Najprv záloha aktuálnych pravidiel
sudo nft list ruleset > /tmp/nftables-backup.conf

# Pridanie záchranného cron jobu
echo "$(date -d '+5 minutes' '+%M %H %d %m *') root /usr/sbin/nft -f /tmp/nftables-backup.conf" | sudo tee /etc/cron.d/nft-rescue

# Po overení, že nová konfigurácia funguje — odstráňte záchranný cron
sudo rm -f /etc/cron.d/nft-rescue

Pokročilé funkcie: Sety, mapy a dynamické pravidlá

Tu sa dostávame k tomu, čo robí nftables naozaj zaujímavým. Natívna podpora pokročilých dátových štruktúr je jedna z najväčších výhod oproti iptables. Pozrime sa na ich praktické využitie.

Anonymné a pomenované sety

Sety umožňujú zoskupiť adresy, porty alebo iné hodnoty a referencovať ich v pravidlách:

# Pomenovaný set s IPv4 adresami a automatickým timeoutom
nft add set inet firewall rate_limited {
    type ipv4_addr \;
    flags dynamic,timeout \;
    timeout 1h \;
}

# Set s intervalmi (podsiete)
nft add set inet firewall admin_networks {
    type ipv4_addr \;
    flags interval \;
    elements = { 10.10.0.0/24, 172.16.5.0/24 } \;
}

# Anonymný set priamo v pravidle
nft add rule inet firewall input tcp dport { 80, 443, 8080, 8443 } accept

Mapy a verdict mapy

Mapy sú ešte výkonnejšie — umožňujú priame mapovanie hodnôt na akcie alebo iné hodnoty. Je to niečo ako switch-case priamo v pravidlách firewallu:

# Verdict mapa — rôzne akcie podľa cieľového portu
nft add rule inet firewall input tcp dport vmap {
    22 : jump ssh_chain,
    80 : accept,
    443 : accept,
    3306 : drop
}

# Mapa portov na podsiete — povolenie prístupu podľa siete a portu
nft add map inet firewall port_access {
    type inet_service : verdict \;
}
nft add element inet firewall port_access {
    22 : accept,
    80 : accept,
    443 : accept
}

Concatenácie

Concatenácie umožňujú kombinovať viacero polí do jedného vyhľadávania — napríklad zdrojovú adresu a cieľový port súčasne. Toto je mimoriadne užitočné, keď potrebujete jemnozrnnú kontrolu:

# Set s concatenáciou — kombinácia IP adresy a portu
nft add set inet firewall allowed_access {
    type ipv4_addr . inet_service \;
    elements = {
        192.168.1.100 . 22,
        10.0.0.50 . 3306,
        172.16.0.0/24 . 443
    } \;
}

nft add rule inet firewall input ip saddr . tcp dport @allowed_access accept

Rate limiting a ochrana pred útokmi

Správne nakonfigurovaný rate limiting je jedným z najúčinnejších nástrojov na ochranu servera pred brute-force útokmi, DDoS útokmi a skenovaním portov. A čo je na tom pekné — nftables ho má zabudovaný priamo, žiadne externé moduly.

Rate limiting pre SSH

Ochrana SSH pred brute-force útokmi pomocou dynamických setov a connection trackingu:

# Vytvorenie dedikovaného reťazca pre SSH
nft add chain inet firewall ssh_chain

# Rate limiting — maximálne 3 nové pripojenia za minútu na IP adresu
nft add rule inet firewall ssh_chain ct state new limit rate 3/minute burst 5 packets accept

# Ak prekročí limit — pridanie do blokovaného setu
nft add rule inet firewall ssh_chain ct state new add @blocked_ips { ip saddr timeout 1h } counter drop

# Presmerovanie SSH prevádzky do dedikovaného reťazca
nft add rule inet firewall input tcp dport 22 jump ssh_chain

Per-IP rate limiting s metrami

Pre webové servery môžete nastaviť per-IP limity, aby ste zabránili jednému klientovi zahltiť server. Toto sa hodí hlavne pri API endpointoch:

# Limit na HTTP/HTTPS — max 200 požiadaviek za sekundu na IP
nft add rule inet firewall input tcp dport { 80, 443 } \
    meter http_limit { ip saddr limit rate over 200/second } counter drop

# Limit na nové spojenia — max 50 nových spojení za sekundu na IP
nft add rule inet firewall input ct state new \
    meter conn_limit { ip saddr ct count over 50 } counter drop

Ochrana pred SYN flood

SYN flood útok je jedným z najstarších, ale stále prekvapivo účinných DDoS vektorov. Nftables poskytuje elegantnú obranu:

# Globálny SYN limit
nft add rule inet firewall input tcp flags syn limit rate 100/second burst 150 packets accept

# Per-IP SYN limit s automatickým blokovaním
nft add set inet firewall syn_flood_block {
    type ipv4_addr \;
    flags dynamic,timeout \;
    timeout 5m \;
}

nft add rule inet firewall input tcp flags syn \
    meter syn_meter { ip saddr limit rate over 25/second burst 50 packets } \
    add @syn_flood_block { ip saddr timeout 5m } counter drop

nft add rule inet firewall input ip saddr @syn_flood_block counter drop

Ochrana pred skenovaním portov

Detekcia a blokovanie pokusov o skenovanie portov je ďalšou dôležitou vrstvou ochrany:

# Detekcia skenovania — viac ako 10 rôznych portov za minútu
nft add set inet firewall port_scanners {
    type ipv4_addr \;
    flags dynamic,timeout \;
    timeout 24h \;
}

# Logovanie detegovaných skenov
nft add rule inet firewall input ct state new tcp flags syn \
    meter scan_detect { ip saddr limit rate over 10/minute burst 15 packets } \
    add @port_scanners { ip saddr timeout 24h } \
    log prefix "[port-scan] " counter drop

Geo-blocking: Filtrovanie podľa krajiny

Ak váš server obsluhuje len konkrétne regióny, geo-blocking dokáže dramaticky znížiť útočnú plochu. Z vlastnej skúsenosti — po zapnutí geo-blockingu na jednom z našich serverov klesol počet blokovaných SSH pokusov o viac než 80 %. Nástroj nft-geo-filter to robí pomerne jednoducho.

Inštalácia a konfigurácia nft-geo-filter

# Klonovanie repozitára
git clone https://github.com/rpthms/nft-geo-filter.git
cd nft-geo-filter

# Blokovanie prevádzky z konkrétnych krajín
# (použite ISO-3166-1 alpha-2 kódy krajín)
sudo python3 nft-geo-filter.py \
    --table-family netdev \
    --interface eth0 \
    CN RU KP

# Alternatívne — povolenie len vybraných krajín (whitelist režim)
sudo python3 nft-geo-filter.py \
    --table-family netdev \
    --interface eth0 \
    --allow \
    --allow-established \
    SK CZ DE AT PL HU

# Pridanie výnimiek pre konkrétne IP adresy
sudo python3 nft-geo-filter.py \
    --table-family netdev \
    --interface eth0 \
    --exceptions 203.0.113.50,198.51.100.25 \
    CN RU

Výhodou nft-geo-filter je, že vytvára samostatnú nftables tabuľku, takže neovplyvní vašu existujúcu konfiguráciu. Skript stiahne aktuálne IP bloky pre zadané krajiny a vytvorí príslušné sety a pravidlá.

Dôležité: Parameter --allow-established v kombinácii s --allow umožňuje obmedziť prichádzajúce spojenia na vybrané krajiny, ale zároveň povoľuje odchádzajúce spojenia do akejkoľvek krajiny. To je zvyčajne presne to, čo chcete — váš server môže komunikovať so svetom, ale svet má obmedzený prístup k nemu.

Integrácia nftables s Fail2Ban

Fail2Ban je nepostrádateľný nástroj na automatickú ochranu pred brute-force útokmi. Správna integrácia s nftables je kľúčová pre moderné nasadenia. Ak ste čítali predchádzajúce články na tomto blogu, Fail2Ban vám určite nie je cudzí — teraz ho prepojíme s nftables.

Krok 1: Vytvorenie dedikovanej tabuľky pre Fail2Ban

Najprv vytvorte konfiguračný súbor /etc/nftables/fail2ban.conf:

#!/usr/sbin/nft -f

table ip fail2ban {
    chain input {
        type filter hook input priority 100;
    }
}

Pridajte ho do hlavnej konfigurácie /etc/nftables.conf:

# Na začiatok súboru, po flush ruleset
include "/etc/nftables/fail2ban.conf"

Priorita 100 zabezpečí, že Fail2Ban pravidlá sa vyhodnotia pred hlavnými pravidlami firewallu (nižšie číslo = vyššia priorita, ale tu chceme, aby Fail2Ban mohol zamietnuť pakety skôr).

Krok 2: Konfigurácia Fail2Ban pre nftables

Vytvorte alebo upravte /etc/fail2ban/jail.local:

[DEFAULT]
# Použitie nftables namiesto iptables
banaction = nftables-multiport
chain = input

# Čas banu — 24 hodín
bantime = 24h

# Inkrementálne zvyšovanie banu pre recidivistov
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 4w

# Okno detekcie — 10 minút
findtime = 600

# Maximum pokusov pred banom
maxretry = 3

# Backend — systemd journal (Debian 12+, Ubuntu 24.04+)
backend = systemd

[sshd]
enabled = true
port = ssh
maxretry = 3
findtime = 300

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5

Krok 3: Konfigurácia nftables akcie

Vytvorte /etc/fail2ban/action.d/nftables-common.local:

[Init]
nftables_family = ip
nftables_table = fail2ban
blocktype = drop
nftables_set_prefix =

Krok 4: Previazanie cez systemd

Pre spoľahlivé správanie vytvorte systemd override, ktorý zabezpečí správne poradie štartovania. Toto je detail, na ktorý sa často zabúda, ale bez neho môže Fail2Ban nabehať pred nftables a vzniknú problémy:

# Vytvorenie override súboru
sudo mkdir -p /etc/systemd/system/fail2ban.service.d/
cat <<EOF | sudo tee /etc/systemd/system/fail2ban.service.d/override.conf
[Unit]
Requires=nftables.service
PartOf=nftables.service

[Install]
WantedBy=multi-user.target nftables.service
EOF

# Aplikovanie zmien
sudo systemctl daemon-reload
sudo systemctl restart nftables
sudo systemctl restart fail2ban

# Overenie
sudo fail2ban-client status
sudo nft list table ip fail2ban

Fail2Ban teraz automaticky pridáva blokované IP adresy do nftables setov. Keď vyprší bantime, Fail2Ban adresu zo setu odstráni. Jednoduché a efektívne.

Vstavaný tracing a debugging

Jednou z najcennejších funkcií nftables, ktorá v iptables úplne chýbala, je vstavaný tracing. Keď sa vám niečo nezdá — pravidlá nefungujú podľa očakávania, prevádzka je blokovaná aj keď by nemala byť — tracing vám ukáže presne, čo sa deje. Úprimne povedané, práve tracing je dôvod, prečo som pri ladení firewallov úplne prestal používať tcpdump na diagnostiku pravidiel.

Povolenie tracingu

# Pridanie trace pravidla pre konkrétnu IP
nft add rule inet firewall input ip saddr 192.168.1.100 meta nftrace set 1

# Sledovanie tracingu v reálnom čase
nft monitor trace

# Výstup ukáže presný priebeh paketu cez pravidlá:
# trace id abc123 inet firewall input packet: iif "eth0" ...
# trace id abc123 inet firewall input rule ip saddr 192.168.1.100 ...
# trace id abc123 inet firewall input verdict accept

# Po dokončení diagnostiky — odstráňte trace pravidlo
nft delete rule inet firewall input handle <handle_number>

Použitie counterov na monitoring

Countery (počítadlá) sú neoceniteľné pri pochopení, koľko paketov matchuje jednotlivé pravidlá:

# Pridanie pomenovaného countera
nft add counter inet firewall ssh_counter
nft add counter inet firewall dropped_counter

# Použitie v pravidlách
nft add rule inet firewall input tcp dport 22 counter name ssh_counter accept
nft add rule inet firewall input counter name dropped_counter drop

# Zobrazenie counterov
nft list counters table inet firewall

# Resetovanie counterov
nft reset counters table inet firewall

Migrácia z iptables na nftables

Ak máte existujúce iptables pravidlá, nemusíte začínať od nuly. A to je dobrá správa, pretože niektoré produkčné konfigurácie majú stovky pravidiel. Tím Netfilter poskytuje migračné nástroje, ktoré vám uľahčia prechod.

Automatický preklad pravidiel

# Preklad jednotlivého iptables pravidla
iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT
# Výstup: nft add rule ip filter INPUT tcp dport 22 counter accept

# Preklad celej existujúcej konfigurácie
iptables-save | iptables-restore-translate -f /dev/stdin
# Výstup: kompletná nftables konfigurácia

# Uloženie preloženej konfigurácie
iptables-save | iptables-restore-translate -f /dev/stdin > /etc/nftables-migrated.conf

# Kontrola a úprava preloženej konfigurácie
# (niektoré pokročilé moduly nemusia mať priamy ekvivalent)
nft -c -f /etc/nftables-migrated.conf

Postup bezpečnej migrácie

Migrácia na produkčnom serveri vyžaduje opatrnosť. Tu je odporúčaný postup:

  1. Záloha aktuálnych pravidiel: iptables-save > /root/iptables-backup-$(date +%Y%m%d).conf
  2. Automatický preklad: Použite iptables-restore-translate na konverziu
  3. Manuálna revízia: Skontrolujte preloženú konfiguráciu, optimalizujte sety a mapy
  4. Testovanie: Aplikujte na testovacom prostredí alebo v maintenance okne
  5. Záchranný mechanizmus: Nastavte cron job na obnovenie pôvodných pravidiel
  6. Postupné nasadenie: Najprv menej kritické servery, potom produkciu
  7. Monitoring: Sledujte logy a countery po migrácii

Upozornenie: Nikdy nepoužívajte iptables-legacy a nftables pravidlá súčasne. Môže to viesť k nepredvídateľnému správaniu a bezpečnostným medzerám. Ak používate Docker, majte na pamäti, že Docker štandardne používa iptables na správu sieťových pravidiel — preto nezabudnite otestovať kompatibilitu po migrácii.

Automatizácia s Ansible

Pre správu firewallu na viacerých serveroch je ručná konfigurácia nepraktická a náchylná na chyby. Ak spravujete viac než dva-tri servery, Ansible je prakticky nevyhnutný nástroj na automatizáciu nftables pravidiel.

Ansible playbook pre nftables

---
# playbook: nftables-deploy.yml
- name: Nasadenie nftables firewallu
  hosts: webservers
  become: true
  vars:
    ssh_allowed_networks:
      - "10.0.0.0/8"
      - "172.16.0.0/12"
    web_ports:
      - 80
      - 443
    ssh_port: 22

  tasks:
    - name: Inštalácia nftables
      ansible.builtin.package:
        name: nftables
        state: present

    - name: Nasadenie konfigurácie nftables
      ansible.builtin.template:
        src: templates/nftables.conf.j2
        dest: /etc/nftables.conf
        owner: root
        group: root
        mode: "0600"
        validate: "/usr/sbin/nft -c -f %s"
      notify: Restart nftables

    - name: Povolenie a spustenie nftables
      ansible.builtin.systemd:
        name: nftables
        enabled: true
        state: started

  handlers:
    - name: Restart nftables
      ansible.builtin.systemd:
        name: nftables
        state: restarted

Jinja2 šablóna pre nftables

{# templates/nftables.conf.j2 #}
#!/usr/sbin/nft -f
flush ruleset

table inet firewall {
    set trusted_ssh {
        type ipv4_addr
        flags interval
        elements = {
{% for network in ssh_allowed_networks %}
            {{ network }}{{ "," if not loop.last }}
{% endfor %}
        }
    }

    set web_ports {
        type inet_service
        elements = {
{% for port in web_ports %}
            {{ port }}{{ "," if not loop.last }}
{% endfor %}
        }
    }

    chain input {
        type filter hook input priority filter; policy drop;

        iifname "lo" accept
        ct state established,related accept
        ct state invalid drop

        ip protocol icmp icmp type echo-request limit rate 5/second accept
        ip saddr @trusted_ssh tcp dport {{ ssh_port }} accept
        tcp dport @web_ports accept

        limit rate 10/minute log prefix "[nft-drop] " counter drop
    }

    chain output {
        type filter hook output priority filter; policy accept;
    }

    chain forward {
        type filter hook forward priority filter; policy drop;
    }
}

Tento prístup zabezpečuje konzistentnú konfiguráciu naprieč celou infraštruktúrou. Stačí zmeniť premenné a spustiť playbook — a máte istotu, že všetky servery majú rovnaké pravidlá.

Connection tracking: Stavový firewall v praxi

Connection tracking (conntrack) je srdcom stavového firewallu. Bez neho by ste museli explicitne povoľovať odpovede na každú odoslanú požiadavku. Pochopenie jeho fungovania je kľúčové pre správnu konfiguráciu nftables.

Stavy spojení

Nftables rozpoznáva štyri stavy spojení:

  • new — prvý paket nového spojenia (napr. TCP SYN)
  • established — paket patriaci k existujúcemu obojsmernému spojeniu
  • related — nové spojenie súvisiace s existujúcim (napr. FTP dátový kanál)
  • invalid — paket, ktorý nepatrí k žiadnemu známemu spojeniu
# Štandardný vzor stavového firewallu
nft add rule inet firewall input ct state established,related accept
nft add rule inet firewall input ct state invalid drop
nft add rule inet firewall input ct state new tcp dport 22 accept

# Efektívnejšie — použitie verdict mapy
nft add rule inet firewall input ct state vmap {
    established : accept,
    related : accept,
    invalid : drop
}

# Zobrazenie aktívnych spojení
conntrack -L
conntrack -L -p tcp --dport 22

# Počet sledovaných spojení
conntrack -C

# Maximálna veľkosť conntrack tabuľky
sysctl net.netfilter.nf_conntrack_max

Ladenie conntrack pre vysokú záťaž

Na serveroch s veľkým počtom spojení je dôležité správne nastaviť conntrack parametre. Predvolené hodnoty sú konzervatívne a pre webový server s väčšou prevádzkou zvyčajne nestačia:

# Zvýšenie maximálneho počtu sledovaných spojení
# Predvolená hodnota je zvyčajne 65536 — pre webové servery často nedostatočná
echo "net.netfilter.nf_conntrack_max = 262144" | sudo tee -a /etc/sysctl.d/99-conntrack.conf

# Zníženie timeoutu pre etablované TCP spojenia
# Predvolene 432000 sekúnd (5 dní) — príliš dlho pre väčšinu scenárov
echo "net.netfilter.nf_conntrack_tcp_timeout_established = 86400" | sudo tee -a /etc/sysctl.d/99-conntrack.conf

# Aplikovanie zmien
sudo sysctl --system

# Monitoring využitia conntrack tabuľky
watch -n 1 'conntrack -C'

Najlepšie praktiky a bezpečnostné odporúčania

Na záver zhrňme to najdôležitejšie. Toto sú odporúčania, ktoré som zhromaždil za roky práce s produkčnými nasadeniami.

Zásady konfigurácie

  1. Predvolená politika DROP: Vždy nastavte predvolenú politiku na drop pre vstupný a forward reťazec. Explicitne povoľte len nevyhnutné služby.
  2. Minimalizujte otvorené porty: Každý otvorený port je potenciálny útočný vektor. Ak službu nepotrebujete, neotvárajte pre ňu port.
  3. Používajte sety namiesto duplicitných pravidiel: Namiesto desiatich pravidiel pre desať IP adries vytvorte jeden set a jedno pravidlo. Prehľadnejšie a rýchlejšie.
  4. Vždy povoľte loopback: Pravidlo pre loopback rozhranie by malo byť úplne prvé v input reťazci.
  5. Nepoužívajte dva firewallové nástroje súčasne: Nftables a iptables-legacy by sa nikdy nemali používať súčasne. Vyberte si jeden.

Bezpečnostné opatrenia

  1. Logovanie: Logujte zahodené pakety, ale s rate limitom — inak vám logy zaplavía disk.
  2. Conntrack pre invalid pakety: Vždy zahadzujte pakety so stavom invalid — sú to potenciálne útočné vektory.
  3. ICMP s limitom: Povoľte ICMP (ping) pre diagnostiku, ale s rate limitom na ochranu pred ICMP flood.
  4. Pravidelný audit: Minimálne raz mesačne skontrolujte pravidlá firewallu. Odstraňujte nepoužívané pravidlá.
  5. Zálohy: Pred každou zmenou zálohujte aktuálnu konfiguráciu. Uchovávajte verziu v gite — budete mi vďační, keď budete potrebovať porovnať zmeny.
  6. Monitoring counterov: Pravidelne kontrolujte countery — nezvyčajne vysoké počty na drop pravidlách môžu indikovať prebiehajúci útok.

Bezpečnosť konfiguračného súboru

# Nastavenie správnych oprávnení na konfiguračný súbor
sudo chmod 600 /etc/nftables.conf
sudo chown root:root /etc/nftables.conf

# Verziovanie konfigurácie v gite
sudo git init /etc/nftables-git
sudo cp /etc/nftables.conf /etc/nftables-git/
cd /etc/nftables-git && sudo git add . && sudo git commit -m "Initial nftables config"

Záver: Nftables ako základ sieťovej bezpečnosti

Nftables nie je len nástupca iptables — je to zásadný pokrok v tom, ako pristupujeme k firewallu na Linuxe. Čistejšia syntax, lepší výkon, natívne sety a mapy, atomické aktualizácie a vstavaný tracing robia z nftables nástroj, ktorý je nielen výkonnejší, ale aj jednoduchší na správu.

V roku 2026, keď počet CVE v jadre Linuxu prekračuje 5 500 ročne a kybernetické útoky sú čoraz sofistikovanejšie, správne nakonfigurovaný firewall nie je luxus — je to prvá línia obrany.

Pamätajte však, že firewall je len jedna vrstva bezpečnosti. Kombinujte ho s ďalšími opatreniami — monitoring pomocou Wazuh, hardening SSH, bezpečnosť kontajnerov, pravidelné audity cez OpenSCAP — a vytvoríte viacvrstvovú obranu, ktorá výrazne zníži riziko kompromitácie vašej infraštruktúry.

Tak neváhajte — ak ešte používate iptables, teraz je ten správny čas na migráciu. Vaše servery vám poďakujú.

O Autorovi Editorial Team

Our team of expert writers and editors.