linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Команды/cmd-nft

kb/commands ── Команды ── advanced

nft - современный файрвол (nftables)

`nft` - единый CLI для современного netfilter. Заменяет iptables/ip6tables/ arptables/ebtables. Структура: tables → chains → rules.

view as markdownaka: nftables, iptables-replacement

Иерархия

Nftables устроен как:

table (имя+family: ip, ip6, inet, arp, bridge, netdev)
  └── chain (тип + hook + priority)
      └── rule (matches + verdict)
  • table - namespace для правил. inet family покрывает и IPv4 и IPv6
  • chain - точка hooking'а в netfilter:
    • prerouting (до маршрутизации)
    • input (для нас, после маршрутизации)
    • forward (через нас, не нам)
    • output (мы исходящий)
    • postrouting (после маршрутизации, перед отправкой)
  • rule - условия + действие (accept, drop, reject, jump, log, masquerade, dnat, ...)

Минимальный файрвол

Сделать input-фильтр который дропает всё кроме SSH:

bash
sudo nft add table inet filter
sudo nft 'add chain inet filter input { type filter hook input priority 0; policy drop; }'
sudo nft add rule inet filter input ct state established,related accept
sudo nft add rule inet filter input iif lo accept
sudo nft add rule inet filter input tcp dport 22 accept
sudo nft add rule inet filter input ip protocol icmp icmp type echo-request accept

Что мы сделали:

  1. Создали таблицу inet filter (для v4+v6) и цепочку input с policy drop
  2. Разрешили существующие соединения (без этого ответы на наш исходящий не дойдут)
  3. Loopback всегда разрешён
  4. Открыли SSH (порт 22)
  5. Разрешили ping (echo-request)

Всё остальное - drop по policy.

Чтение и удаление

bash
sudo nft list ruleset                  # ВСЁ что есть
sudo nft list table inet filter        # одна таблица
sudo nft -a list ruleset               # с handle (нужен для удаления)
sudo nft delete rule inet filter input handle 5
sudo nft delete table inet filter      # снести всё в таблице
sudo nft flush ruleset                 # СНЕСТИ ВСЁ (опасно - может остаться без SSH)

NAT - отдельный тип цепочки

Для nat нужна цепочка с type nat, не filter:

bash
sudo nft add table inet nat
sudo nft 'add chain inet nat postrouting { type nat hook postrouting priority 100; }'
sudo nft add rule inet nat postrouting oifname eth0 masquerade

Persistence

Правила в памяти. Чтобы пережить ребут - сохранить в файл:

bash
sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftables          # на Debian/Ubuntu

Файл потом читается init-скриптом.

Iptables vs nftables

  • iptables - старый, но всё ещё повсеместно (Docker, k8s до недавнего)
  • nftables - новый, по дизайну быстрее, единый CLI для всех family
  • На современных Ubuntu iptables - это шим: команды транслируются в nft
  • При миграции: iptables-restore-translate конвертирует старые конфиги

§ команды

bash
sudo nft list ruleset

Полный текущий конфиг файрвола

bash
sudo nft -a list ruleset

С handle ID - нужны для точечного удаления правила

bash
sudo nft add rule inet filter input tcp dport 8080 drop

Заблокировать входящий TCP 8080

bash
sudo nft delete rule inet filter input handle 5

Удалить конкретное правило по handle

bash
sudo nft monitor

Live-стрим изменений (полезно при дебаге автоматизации)

§ см. также

  • cmd-iptablesiptables - правила netfilter (legacy)iptables = userland для netfilter. 5 таблиц (filter/nat/mangle/raw/security), цепочки INPUT/OUTPUT/FORWARD/PRE/POSTROUTING, jump-targets ACCEPT/DROP/MASQUERADE. Legacy, но в проде ещё везде.
  • firewalld-vs-nftablesfirewalld vs nftables - что выбратьfirewalld - daemon-обёртка с zones, services, rich-rules; backend с RHEL 8 - nftables. Чистый nft - больше контроля, sets, atomic reload. firewalld для desktop/multi-zone, nft для server-fleet.
  • natNAT и masqueradeNAT - переписывание src/dst адресов пакета на роутере. Masquerade - частный случай: src-IP заменяется на свой исходящий, для исходящих из приватной сети в публичную.
  • conntrackConntrack - память Linux о всех сетевых соединенияхПодсистема ядра Linux, которая помнит каждое активное соединение. Без неё NAT не развернёт ответ на нужный приватный IP, а фаервол не отличит «новый коннект» от «уже установленного». Видна в `/proc/net/nf_conntrack`.
  • tcp-handshakeTCP three-way handshakeTCP-соединение открывается тремя пакетами: SYN от клиента, SYN-ACK от сервера, ACK от клиента. После - соединение Established, можно слать данные.
  • kubernetes-services-and-ingressKubernetes Service и Ingress - сетевая публикация подовService - стабильный VIP перед группой подов (label selector). Типы: ClusterIP (внутри), NodePort (порт на каждой ноде), LoadBalancer (внешний LB облака), ExternalName (CNAME). Ingress - L7 reverse-proxy (nginx/traefik) для HTTP-роутинга.

§ упоминается в уроках

  • ›intermediate-05-firewall-nftables
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки