NFTables (Netfilter Tables) — це сучасна підсистема брандмауера для ядра Linux, яка замінила застарілі iptables, ip6tables, arptables та ebtables. Вона була розроблена для підвищення гнучкості, продуктивності та простоти використання в управлінні мережевими пакетами. Ось детальний огляд її основних характеристик та функціональних можливостей:
Основні переваги NFTables
-
Єдина інфраструктура:
- Замість використання окремих утиліт для IPv4, IPv6, ARP і Ethernet (як у випадку з iptables, ip6tables, arptables та ebtables), nftables об’єднує всі ці функції в одну команду
nft
. - Це значно спрощує конфігурацію та управління правилами брандмауера.
- Замість використання окремих утиліт для IPv4, IPv6, ARP і Ethernet (як у випадку з iptables, ip6tables, arptables та ebtables), nftables об’єднує всі ці функції в одну команду
-
Мова опису правил:
- NFTables використовує нову, більш потужну мову для опису правил. Вона дозволяє використовувати складні конструкції, такі як масиви, карти, комбінації дій і фільтрів.
- Наприклад, можна створювати правила, які об’єднують кілька портів або IP-адрес в одному рядку коду.
-
Продуктивність:
- Завдяки використанню JIT-компіляції (Just-In-Time), nftables може значно прискорити обробку правил.
- Менш складні правила означають менше накладних витрат на обробку мережевих пакетів.
-
Гнучкість:
- NFTables дозволяє створювати складніші правила за допомогою таблиць, ланцюгів та об’єднаних дій.
- Можна легко додавати, змінювати та видаляти правила без необхідності перезавантаження всієї конфігурації.
Основні компоненти NFTables
-
Таблиці (tables):
- Вони є контейнерами для ланцюгів. В одній таблиці можна мати ланцюги для фільтрації, NAT, маршрутизації тощо.
- Наприклад, створення таблиці:
nft add table inet filter
-
Ланцюги (chains):
- Вони містять правила, які визначають, як обробляти мережеві пакети. Кожен ланцюг має політику (policy), яка визначає, що робити з пакетами, що не відповідають жодному правилу.
- Наприклад, створення ланцюга в таблиці:
nft add chain inet filter input { type filter hook input priority 0 \; }
-
Правила (rules):
- Вони визначають конкретні дії для пакетів, що відповідають умовам правила. Наприклад, фільтрація за IP-адресою або портом.
- Додавання правила до ланцюга:
nft add rule inet filter input ip saddr 192.168.1.1 counter drop
-
Карти (maps):
- Вони дозволяють асоціювати ключі з значеннями, що може бути корисно для створення складних правил.
- Наприклад, створення карти:
nft add map inet filter mymap { type ipv4_addr : verdict \; } nft add element inet filter mymap { 192.168.1.1 : drop, 192.168.1.2 : accept }
Приклади використання
-
Базова конфігурація брандмауера:
nft add table inet filter nft add chain inet filter input { type filter hook input priority 0 \; } nft add rule inet filter input ct state established,related accept nft add rule inet filter input ip saddr 192.168.1.0/24 accept nft add rule inet filter input tcp dport 22 accept nft add rule inet filter input counter drop
-
Налаштування NAT:
nft add table ip nat nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; } nft add rule ip nat postrouting oifname "eth0" ip saddr 192.168.1.0/24 masquerade
Інструменти та утиліти
- nft: головна утиліта командного рядка для управління nftables. Вона дозволяє створювати, змінювати, видаляти таблиці, ланцюги, правила та карти.
- libnftnl: бібліотека для низькорівневого доступу до функцій nftables, яку використовує утиліта
nft
.
Висновок
NFTables пропонує більш сучасний, гнучкий та ефективний підхід до управління мережевими пакетами в порівнянні зі своїми попередниками. Він дозволяє адміністраторам мереж створювати складні та потужні конфігурації брандмауера, забезпечуючи при цьому високу продуктивність та простоту використання.