Debian, Kali Linux – nftables Firewall
nftables вече е част от Линукс ядрото, осигуряващо филтриране и класифициране на мрежови пакети, което в момента се осигурява от netfilter — по-известен с интерфейса си iptables.
nftables изцяло заменя iptables, като същевременно запазва и дори подобрява функционалността му на защитна стена в Линукс.
Главното предимство на nftables пред iptables са по-малкото правила, което осигурява много по-голяма производителност.
nftables се конфигурира само чрез един интерфейс nft, докато iptables изисква iptables, ip6tables, arptables и ebtables.
Синтаксисът на nft не прилича много на iptables, но веднъж щом му се хване логиката, се вижда колко интуитивно е замислен.
Нека да разгледаме по-долу снимка на екрана от моя лаптоп с Кали Линукс. Видно е, че съм получил и от двата протокола IPv4/IPv6 мрежови адреси, така наречения Dual Stack. В iptables трябва да конфигурирам и двата протокола в различна конфигурация с iptables и ip6tables но с nftables това не е нужно.

Отварям конфигурационния файл sudo vim /etc/nftables.conf на nftables, изтривам ако има нещо там и копирам следния код:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
iif lo accept
ct state invalid counter drop
ct state established,related counter accept
ip protocol icmp counter accept
ip6 nexthdr icmpv6 counter accept
counter drop
}
}
След което изпълнявам следните команди: като общо взето трябва да получим резултат като картинката по долу.

Е, вече имаме работеща защитна стена в Dual Stack с няколко реда конфигурация която всъщност гласи: – Не позволявай никакви пакети до машината ми освен протокола icmp което напълно ме устройва за моя лаптоп.
Обяснение на конфигурацията
- flush ruleset — изтрива всички съществуващи правила преди зареждане на новите.
- table inet filter — създава таблица
filter. Параметърътinetе ключов — означава, че таблицата управлява едновременно IPv4 и IPv6. За разлика от iptables, в nftables таблиците и веригите не са предварително създадени — ние ги дефинираме сами, само когато имаме нужда от тях. - chain input — създава верига за входящи пакети.
- iif lo accept — разрешава пакети към loopback интерфейса (127.0.0.1).
- ct state invalid counter drop — блокира невалидни пакети.
- ct state established,related counter accept — разрешава вече установени връзки чрез conntrack.
- ip protocol icmp counter accept — разрешава ICMP за IPv4.
- ip6 nexthdr icmpv6 counter accept — разрешава ICMPv6 за IPv6.
- counter drop — блокира всичко останало.
Какво е counter? Това е брояч на пакети. В iptables броячът е задължителен за всяко правило — безсмислен разход на ресурси при голям трафик. В nftables сами избираме дали да добавим брояч към конкретно правило, таблица или верига — само когато ни трябва за диагностика.
Защитна стена на лаптоп едва би задоволила някой който има сървър със стандартни услуги уеб, фтп, терминал и др. Затова нека да разгледаме един по-разширен пример:
#!/usr/sbin/nft -f
flush ruleset
define admin = {172.16.133.21, 172.16.133.22, 172.16.133.23}
define flood = {10.2.2.2, 10.3.3.3, 10.4.4.4, 10.5.5.5,
10.6.6.6, 10.7.7.7, 10.8.8.8, 10.9.9.9}
table inet filter {
chain input {
type filter hook input priority 0;
iif lo accept
ct state invalid drop
ct state established,related accept
ip saddr 192.168.0.0/16 tcp dport 22 accept
ip saddr $admin tcp dport 22 accept comment "admin"
#ip6 saddr 2001:470:20f1:2::/64 tcp dport 22 accept
udp dport 53 accept
tcp dport {53, 80, 443} ct state new accept
ip protocol icmp accept
#ip6 nexthdr icmpv6 accept
ip saddr {10.10.10.10, 10.11.11.11} reject with icmp type port-unreachable
ip saddr {10.12.12.12, 10.13.13.13} tcp dport {80, 443} drop
ip saddr $flood drop
counter drop
}
}
Всеки запознат с iptables ще забележи, че подобна конфигурация там би изисквала не 10, а 50 правила — защото всеки адрес или мрежа заема отделен ред. В nftables в едно правило можем да вмъкваме произволен брой мрежи или адреси. Това драстично намалява броя на правилата и увеличава пропускателната способност — именно слабото място на iptables при DoS атаки или Geo Location филтриране дори при използване на ipset.
За да се запази конфигурацията в сила и да е активна след рестарт е хубаво да изпълним:
sudo systemctl enable nftables.service
Заключение
nftables е бъдещето на мрежовото филтриране в Linux. Чрез обединяване на IPv4 и IPv6 в един интерфейс, по-компактен синтаксис и по-добра производителност при голям брой правила, той превъзхожда iptables. В Debian и Kali Linux е активиран по подразбиране. За активиране при стартиране: sudo systemctl enable nftables.service.