Що таке NFTables (Netfilter Tables)?

NFTables (Netfilter Tables) — це сучасна підсистема брандмауера для ядра Linux, яка замінила застарілі iptables, ip6tables, arptables та ebtables. Вона була розроблена для підвищення гнучкості, продуктивності та простоти використання в управлінні мережевими пакетами. Ось детальний огляд її основних характеристик та функціональних можливостей:

Основні переваги NFTables

  1. Єдина інфраструктура:

    • Замість використання окремих утиліт для IPv4, IPv6, ARP і Ethernet (як у випадку з iptables, ip6tables, arptables та ebtables), nftables об’єднує всі ці функції в одну команду nft.
    • Це значно спрощує конфігурацію та управління правилами брандмауера.
  2. Мова опису правил:

    • NFTables використовує нову, більш потужну мову для опису правил. Вона дозволяє використовувати складні конструкції, такі як масиви, карти, комбінації дій і фільтрів.
    • Наприклад, можна створювати правила, які об’єднують кілька портів або IP-адрес в одному рядку коду.
  3. Продуктивність:

    • Завдяки використанню JIT-компіляції (Just-In-Time), nftables може значно прискорити обробку правил.
    • Менш складні правила означають менше накладних витрат на обробку мережевих пакетів.
  4. Гнучкість:

    • NFTables дозволяє створювати складніші правила за допомогою таблиць, ланцюгів та об’єднаних дій.
    • Можна легко додавати, змінювати та видаляти правила без необхідності перезавантаження всієї конфігурації.

Основні компоненти NFTables

  1. Таблиці (tables):

    • Вони є контейнерами для ланцюгів. В одній таблиці можна мати ланцюги для фільтрації, NAT, маршрутизації тощо.
    • Наприклад, створення таблиці:
      nft add table inet filter
      
  2. Ланцюги (chains):

    • Вони містять правила, які визначають, як обробляти мережеві пакети. Кожен ланцюг має політику (policy), яка визначає, що робити з пакетами, що не відповідають жодному правилу.
    • Наприклад, створення ланцюга в таблиці:
      nft add chain inet filter input { type filter hook input priority 0 \; }
      
  3. Правила (rules):

    • Вони визначають конкретні дії для пакетів, що відповідають умовам правила. Наприклад, фільтрація за IP-адресою або портом.
    • Додавання правила до ланцюга:
      nft add rule inet filter input ip saddr 192.168.1.1 counter drop
      
  4. Карти (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 }
      

Приклади використання

  1. Базова конфігурація брандмауера:

    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
    
  2. Налаштування 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 пропонує більш сучасний, гнучкий та ефективний підхід до управління мережевими пакетами в порівнянні зі своїми попередниками. Він дозволяє адміністраторам мереж створювати складні та потужні конфігурації брандмауера, забезпечуючи при цьому високу продуктивність та простоту використання.