С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Классический файрвол iptables

5 мин Linux · iptables

Классический файрвол Linux — цепочки, правила, NAT; и почему теперь nftables.

Шпаргалка

7 команд Версия для печати
  • sudo iptables -L -n -v --line-numbers читать правила
  • sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT сначала SSH!
  • sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  • sudo iptables -I INPUT 1 -s 10.0.0.5 -j DROP забанить IP первым правилом
  • sudo iptables -P INPUT DROP политика по умолчанию — запретить
  • sudo iptables -D INPUT 3 удалить правило номер 3
  • sudo netfilter-persistent save сохранить

Обзор

iptables — классический интерфейс к файрволу Linux. На современных системах его сменил nftables (в Ubuntu iptables обычно транслируется в nftables), но iptables-правила и синтаксис всё ещё повсюду — их надо уметь читать и править.

Модель: таблицы (filter, nat, mangle) → цепочки (INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING) → правила по порядку → действие (ACCEPT/DROP/REJECT).

Ключи

10
Ключ Значение
-L показать правила (-n без DNS, -v счётчики)
-t TABLE таблица: filter (умолч.), nat, mangle
-A CHAIN добавить правило в конец цепочки
-I CHAIN [N] вставить в начало / в позицию N
-D CHAIN N удалить правило N
-P CHAIN ACT политика цепочки по умолчанию
-F очистить цепочку (flush)
-p / --dport / -s / -i протокол / порт назначения / источник / интерфейс
-j действие: ACCEPT, DROP, REJECT, DNAT, SNAT, MASQUERADE
--line-numbers номера правил (для -D/-I)

Ничего не найдено. Попробуй запрос короче.

Рецепты

1

Чтение и правила

bash
sudo iptables -L -n -v                       # правила filter, без DNS, со счётчиками
sudo iptables -L INPUT -n --line-numbers     # INPUT с номерами (для удаления/вставки)
sudo iptables -t nat -L -n -v                # таблица NAT

# базовый набор INPUT (порядок важен!):
sudo iptables -A INPUT -i lo -j ACCEPT                                 # loopback
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  # ответы
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT                     # SSH (СНАЧАЛА!)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT                     # HTTP
sudo iptables -P INPUT DROP                                            # политика — drop

# точечные операции:
sudo iptables -I INPUT 1 -s 10.0.0.5 -j DROP    # вставить первым: забанить IP
sudo iptables -D INPUT 3                          # удалить правило №3
sudo iptables -F INPUT                            # очистить цепочку INPUT

# NAT (проброс порта на внутренний хост):
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.0.0.10:80
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE   # шлюз/SNAT

Правила iptables не сохраняются сами. Постоянство — пакет iptables-persistent (sudo netfilter-persistent save) или переход на nftables.

Неполадки

5

Закрыл себе SSH

Правило для 22/tcp должно идти до DROP-политики. Если уже заблокировал — зайди через консоль (KVM/IPMI), sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT. На удалёнке полезно ставить правила с авто-откатом (at now+5min на flush).

Правила пропали после ребута

iptables не персистентен. sudo netfilter-persistent save (с iptables-persistent), либо используй nftables/ufw (см. firewall).

Порядок имеет значение

Правила применяются сверху вниз до первого совпадения. Смотри --line-numbers, вставляй в нужное место через -I CHAIN N ..., а не только -A (в конец).

Счётчики не растут — правило не срабатывает

-L -v показывает счётчики пакетов на правило. Ноль = трафик не доходит до него (перехвачен выше) или не тот интерфейс/цепочка.

Не пойму, iptables или nftables на самом деле

В Ubuntu iptables часто = iptables-nft (бэкенд nftables). Реальный набор — sudo nft list ruleset (см. firewall).

Опасно

Опасно. iptables -F (flush) удаляет все правила текущей таблицы без подтверждения. Если перед этим уже стоит политика -P INPUT DROP, сброс правил не возвращает ACCEPT — соединение, включая текущую SSH-сессию, рвётся сразу. Перед -F на удалённой машине убедись, что есть доступ через консоль гипервизора, или ставь -P INPUT ACCEPT заранее.

Смена политики -P INPUT DROP без предварительного разрешающего правила для 22/tcp обрывает удалённый доступ мгновенно — правило для SSH добавляется до изменения политики, не после.

См. также

  • firewall — Фильтрация трафика — простой ufw и низкоуровневый nftables.
  • ss — Кто слушает порты и какие соединения открыты — современная замена netstat.
  • sysctl — Чтение и настройка параметров ядра во время работы и постоянно (sysctl.conf).
Загрузка…