Wstęp
Nftables pojawił się w wersji 3.13 linuksowego kernela, która została wydana w styczniu 2014. Podobnie jak UFW i firewalld, nftables służy do konfigurowania zapory ogniowej. Jest to najtrudniejszy w konfiguracji firewall ze wszystkich uprzednio wymienionych, dlatego korzystanie z niego zalecane jest dla osób, które mają doświadczenie z Linuksem (i anielską cierpliwość).
Źródło: https://pixabay.com/pl/photos/open-fire-fire-embers-flame-hot-4129625/
Instalacja
Nftables powinien być domyślnie zainstalowany w większości dystrybucji Linuksa. Jeśli jednak nie jest zainstalowany, można użyć polecenia:
sudo apt install nftables
Nftables zarządza się poprzez polecenie nft. Aby wyświetlić instrukcję związaną z tym poleceniem, należy wpisać man nft w konsoli. Warto podkreślić, że dostarczona instrukcja jest dość obszerna – ma prawie 4000 linijek.
Dlaczego warto wybrać nftables?
Nftables opiera się przede wszystkim na plikach konfiguracyjnych (*.conf), które można tworzyć poprzez polecenia z wykorzystaniem nft. Można definiować wiele reguł opisanych w tabelach, które są oparte na protokołach.
Możliwe rodziny (opcje związane z protokołami) prezentują się następująco:
- ip – przeznaczona dla IP wersji 4,
- ipv6 – przeznaczona dla IP wersji 6,
- inet – przeznaczona dla IP wersji 4 i 6,
- arp – przeznaczona dla ARP,
- bridge – przeznaczona dla połączeń wykorzystujących mostek.
Nftables ma również trzy typy łańcucha. Są nimi:
- filter – łańcuch przeznaczony do filtrowania pakietów,
- nat – łańcuch przeznaczony do NAT, czyli translacji adresów,
- route – łańcuch przeznaczony do wyznaczania drogi pakietów.
Możemy również określać zakres pakietów, których dotyczą reguły w następujący sposób:
- prerouting – pakiety, które trafiły do urządzenia i nie zostały przetworzone przez nftables,
- input – pakiety, które trafiły do urządzenia i zostały przetworzone przez nftables,
- forward – pakiety, które mają zostać przekazane do innego urządzenia,
- output – pakiety wychodzące,
- postrouting – pakiety wychodzące, które zostały przetworzone przez nftables.
Pokrewieństwo i różnice z iptables – składnia
Nftables ma inną składnię od iptables, lecz polecenia mogą być dość prosto tłumaczone z iptables do nftables. Jeśli chcemy użyć polecenia z iptables w nftables, możemy użyć polecenia iptables-nft. Dla przykładu – chcemy zablokować ruch na porcie 80 dla pakietów, które przychodzą z adresu 192.168.25.150.
Polecenie w iptables będzie wyglądało następująco:
sudo iptables -A INPUT -p tcp –source 192.168.25.150 –dport 80 -j DROP
Aby dodać je do nftables, należy użyć polecenia:
sudo iptables-nft -A INPUT -p tcp –source 192.168.25.150 –dport 80 -j DROP
Przykłady konfiguracji nftables w praktyce
Gentoo Linux Wiki zawiera kilka praktycznych przykładów konfiguracji nftables. Są one dostępne tutaj i polecam się z nimi zapoznać J.
Oto przykład podstawowej konfiguracji firewalla dla stacji roboczej. Konfiguracja składa się z kilku prostych założeń:
- Pakiety wysyłane przez maszynę hostującą firewall są dozwolone.
- Pakiety przychodzące z sieci LAN są dozwolone.
- Pakiety przychodzące z sieci WAN są odrzucane, chyba że urządzenie z sieci LAN zainicjowało połączenie.
- Pakiety wychodzące z sieci LAN są dozwolone.
Konfiguracja wygląda następująco:
#!/sbin/nft -f
flush ruleset
table ip filter {
# allow all packets sent by the firewall machine itself
chain output {
type filter hook output priority 100; policy accept;
}
# allow LAN to firewall, disallow WAN to firewall
chain input {
type filter hook input priority 0; policy accept;
iifname „lan0” accept
iifname „wan0” drop
}
# allow packets from LAN to WAN, and WAN to LAN if LAN initiated the connection
chain forward {
type filter hook forward priority 0; policy drop;
iifname „lan0” oifname „wan0” accept
iifname „wan0” oifname „lan0” ct state related,established accept
}
}
Konfiguracja powinna zostać zapisana do pliku. Aby zapora działała prawidłowo, należy umożliwić przekierowywanie pakietów z WAN i LAN następującym poleceniem:
sysctl -w net.ipv4.ip_forward = 1
Aby zaczytać konfigurację z pliku, należy użyć polecenia:
sudo nft –file [nazwa pliku]
Przydatne polecenia – „ściągawka”
ArchLinux Wiki posiada dość prosty i czytelny poradnik związany z poleceniami nftables, który dostępny jest tutaj.
Do najważniejszych należy wyróżnić:
Polecenie | Efekt |
nft list ruleset | Wyświetla obecny zestaw reguł |
nft flush ruleset | Usunięcie reguł, może pozostawić urządzenie bez działającego firewalla |
nft list tables | Wyświetla obecnie zdefiniowane tabele w systemie |
nft add table [nazwa rodziny] [nazwa tabeli] | Tworzy tabelę dla danej rodziny (opcji – ip, arp itd.) o danej nazwie |
Podsumowanie
Nftables to dość skomplikowane narzędzie i nie lada sztuką jest opisać jego funkcjonalności w krótkim artykule. Dlatego zachęcam do testowania różnych konfiguracji nftables w kontrolowanym środowisku, aby jak najlepiej zapoznać się z narzędziem. Fakt, że dość łatwo można przetłumaczyć reguły z iptables może pomóc wielu osobom w „przesiadce” na nftables.
Pisał dla Was Oskar Klimczuk.