NFTables firewall - návod, příklady

Bohužel firewall iptables již zastaral, přichází nftables, zde stručný návod.

Testováno na distribuci linux debian 11.2, nftables v 0.9.8

Proč nftables nahrazuje iptables?

Předchozí framework (iptables) má několik těžko řešitelných problémů, týkajících se škálovatelnosti, výkonu, údržby kódu atd. Mezi výhody, které nftables přinesly, jsou zjednodušení ABI, méně duplikování zdrojového kódu, sjednocení zpracování různých protokolů (dříve různé zpracování pro IPv4, IPv6, ARP) a zjednodušení správy pravidel.

nftables v debian 11.2Debian 11.2 „Bullseye“ z 8.12.2021 již má nftables zabudovanou místo iptables.
Ještě bych připomenul rodinu (family) nftables:

Po instalaci linuxu debian v 11.2 je defaultně nastavena v /etc/nftables.conf tabulka rodiny inet s řetězci input, forward, output. Firewall není zapnut.

Je třeba ještě zapnout firewall. Jako root:

systemctl enable nftables.service
systemctl start nftables

Prvním výše uvedeným příkazem se vytvořil symbolický odkaz
na /etc/systemd/sysinit.target.wants/nftables.service -> /lib/systemd/system/nftables.service
Druhým výše uvedeným příkazem se spustila služba nftables.

Pak v podstatě stačí doplnit výchozí pravidla a pár drobností, rodina nftables inet pokrývá IPv4 i IPv6 - dual. Výchozí pravidla jsou accept - vše povoleno.
Proto nám stačí ve výchozím stavu zadat:

nft add chain inet filter input '{ policy drop; }'
nft add chain inet filter forward '{ policy drop; }'
nft add rule inet filter input ct state invalid drop
nft add rule inet filter input ct state '{ established, related }' accept
nft add rule inet filter input iifname "lo" accept
nft list ruleset > /root/firewall.txt
cat /root/firewall.txt
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state invalid drop
ct state {established, related} accept
iifname "lo" accept
}

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


chain output {
type filter hook output priority 0; policy accept;
}
}
A zobrazená pravidla přidáme/přepíšeme do souboru /etc/nftables.conf, který pak bude vypadat následovně:
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state invalid drop
ct state {established, related} accept
iifname "lo" accept
}

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


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

Tímto máme funkční nejjednodušší firewall pro pracovní stanici pokrývající oblast IPv4 i IPv6.

Pokud chceme firewal nftables vypnout, stačí zvolit opačný postup, tedy "systemctl disable nftables.service" - symbolický odkaz byl odstraněn, "systemctl stop nftables" - služba nftables byla zastavena.

Běh služby si můžeme ověřit příkazem systemctl status nftables

Po zapsání pravidel do /etc/nftables.conf je potřeba restartovat službu nftables:
systemctl restart nftables

Při dodržení tohoto postupu pak i při rebootu bude firewall spuštěný s novými pravidly.

Nyní si sestavíme vlastní nftables firewall pro pracovní stanici, kde zakážeme všechno příchozí spojení a povolíme všechno odchozí.

Pravidla a jejich parametry

První je třeba si ujasnit co je co.

Abychom mohli zapisovat skutečná pravidla, musíme znát jejich názvy. Každé pravidlo má také různé parametry, které umožňují přesně popsat, co chceme na daném paketu zkoumat. Níže uvádím přehled nejběžnějších možností používaných s nftables.

meta – meta informace, například o rozhraní
oif <index výstupního rozhraní>
iif <index vstupního rozhraní>
oifname <název výstupního rozhraní>
iifname <název vstupního rozhraní>

icmp – protokol ICMP
type <typ icmp>

icmpv6 – protokol ICMP
type <typ icmpv6>

ip – protokol IPv4
protocol <protokol>
daddr <cílová adresa>
saddr <zdrojová adresa>

ip6 – protokol IPv6
daddr <cílová adresa>
saddr <zdrojová adresa>

tcp – protokol TCP
dport <cílový port>
sport <zdrojový port>

udp – protokol UDP
dport <cílový port>
sport <zdrojový port>

sctp – protokol SCTP
dport <cílový port>
sport <zdrojový port>

ct – connection tracking, sledování spojení
state <new | established | related | invalid>

nft flush ruleset - vymazání (reset) všech tabulek, řetězců a pravidel

nft add table inet filter - vytvoření tabulky inet filter

nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }' - vytvoření řetězce input pro tabulku inet filter = příchozí provoz.
nft add chain inet filter forward '{ type filter hook forward priority 0; policy drop; }'
Pro forward taky vše zakážeme. Všechno si vypíšeme:

nft list ruleset

Vypíší se všechna pravidla, ty pak připíšeme do /etc/nftables.conf

table inet filter {
chain input {
type filter hook input priority filter; policy drop;
}

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

A zjistíme, že firewall funguje a nám nic nejde. Potřebujeme povolit již navázaná spojení a "lo":

table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state invalid drop
ct state {established, related} accept
iifname "lo" accept
}
chain forward { type filter hook forward priority 0; policy drop; }
}

Přidáme pravidla (rule) do tabulky inet filter, řetězce input

nft add rule inet filter input ct state invalid drop

nft add rule inet filter input ct state { established, related } accept

nft add rule inet filter input iifname "lo" accept


A zde máme nejjednodušší firewall nftables pro pracovní stanici

firewall nftables


Jak jsme jej vytvořili (firewall), shrnutí

Všechny příkazy jsou prováděny pod superuživatelem ROOT v konzoli.

  1. systemctl enable nftables.service - zapneme spouštění firewallu po rebootu
  2. systemctl start nftables - spustíme firewall nftables
  3. flush ruleset - vymazání (reset) všech pravidel
  4. nft add table inet filter - vytvoření tabulky inet filter
  5. nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }' - vytvoření řetězce pro příchozí provoz.
  6. nft add chain inet filter forward '{ type filter hook forward priority 0; policy drop; }'
    Pro forward taky vše zakážeme.
  7. nft add rule inet filter input ct state invalid drop
  8. nft add rule inet filter input ct state { established, related } accept
  9. nft add rule inet filter input iifname "lo" accept
  10. nft list ruleset > /etc/nftables.conf - přepíše novými pravidly, nebo ty pravidla uložíme např. do /root/fw.txt a jen je do /etc/nftables.conf zkopírujeme. Pak se nemusí dělat následující úpravy, jelikož po instalaci debianu tam „#!/usr/sbin/nft -f“ a „flush ruleset“ jsou i s prázdnou tabulkou inet filter (tu smažeme).

Upravíme soubor /etc/nftables.conf, přidáme mu atributy „spustitelný“ chmod 755 /etc/nftables.conf, na začátek přidáme:

#!/usr/sbin/nft -f

flush ruleset


Příklad souboru /etc/nftables.conf

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        # accept any localhost traffic
        iif lo accept

        # accept traffic originated from us
        ct state established,related accept

        # drop invalid packets
        ct state invalid counter drop

        # accept ssh, http, and https
        tcp dport { 22, 80, 443 } accept

        # accept icmp
        ip protocol icmp accept

        # count and reject everything else
        counter reject with icmpx type admin-prohibited
    }

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

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

}

Úpravy firewallu nftables s nástrojem nft

seřazeno podle síly příkazu

nft flush ruleset - smaže všechno (tabulky, řetězce, pravidla)

Tabulky - tables

nft add table inet filter - vytvoření tabulky rodina inet, typ filter
nft delete table inet filter - smazání tabulky rodina inet, typ filter

Řetězce - chains

nft add chain inet filter input '{ type filter hook input priority 0; policy drop; }' - vytvoří řetězec input
nft add chain inet filter input '{ policy accept; }' - upraví výchozí politiku řetězce
nft delete chain inet filter input - smaže řetězec input
nft rename chain inet filter input webik - přejmenuje řetězec input->webik

Pravidla - rules

Všechny upravy si můžeme dělat v textovém souboru například /root/firewall.txt a pak je načíst příkazem

nft flush ruleset
nft -f /root/firewall.txt

Odpanou nám tím starosti s editací tabulek, řetězců, pravidel.
Ale může se stát, že se při načítání souboru objeví chyba syntaxe:

firewall.txt:14:51-56: Error: syntax error: unexpected string...

14 je řádek, 51-56 sloupec chyby.

Odkazy

  1. linuxový firewall s moderními vlastnostmi
  2. správa tabulek, řetězců a pravidel s utilitou nft
  3. správa pravidel v našem firewallu
  4. akce prováděné nad pravidly včetně nastavení NAT
  5. struktury pro zvýšení výkonu firewallu
  6. příklad konfigurace firewallu a vzorové situace

Další odkazy


Komentáře

SSL pro weby od 11/2015 zdarma


MS WINDOWS 10 - sběr informací o uživateli


DEBIAN 11 - OS zdarma debian vyšel 14.8.2021

debian 9

debian - stáhnout nejnocější DEBIAN pro PC
debian edu - debian pro školy a školní prostředí


Zranitelnost „ROM-0“ routerů


Předali data tajným službám
Americké bezpečnostní agentuře (NSA) předali data Microsoft, Yahoo, Google, Facebook...


Itálie preferuje open source
Italský parlament schválil zákon, který nařizuje státním institucím pořizovat otevřený software před komerčním. To znamená LINUX místo MS-WINDOWS, LIBRE OFFICE místo MS OFFICE atd.

29.08. 2021 17:54:07
  • Redakční systém MRS
  • 10 nečastějších zranitelností WEBU
  • Esperantoesperanto - univerzální mezinárodní jazyk
  • Kryptografie okolo nás - kniha popisuje využití kryptografie v běžném životě
  • SMS zdarma - posílání SMS zdarma
  • proč LINUX
  • základy LINUXU
  • Software na úřadech - jeho otevřené alternativy
  • Řekněte sbohem Microsoftu
  • Rychlost připojení - změřte si svoji rychlost
  • SEO servis
  • Jak psát web
  • Zákony - občanský, autorský, obchodní zákoník atd.
  • Infosoud - nalezení stání a průběhu jednání
  • ARES - registr ekonomických subjektů
  • Katastr nemovitostí
  • Broďan - brodské nezávislé zpravodajství

vydělávejte
na burze kryptoměn

28.08. 2021 10:31:09
Návštěvy
Celkem: 233635
Týden: 507
Dnes: 8
  přihlásit poslední změna: 01.05. 2022 11:13:35