MAATRIX / Блог / iptables: базовый фаервол с нуля

iptables: базовый фаервол с нуля

iptables: базовый фаервол с нуля на VPS
Блог MAATRIX · 2026-07-07

iptables — классический межсетевой экран Linux. Понять его логику стоит даже если вы пользуетесь ufw: под капотом работает именно он.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Как устроен iptables

Трафик проходит через таблицы и цепочки правил. Для базовой защиты сервера нам нужна таблица filter и три цепочки: INPUT (входящий трафик), OUTPUT (исходящий) и FORWARD (транзитный, для маршрутизации). Каждое правило описывает условие (порт, протокол, состояние соединения) и действие: ACCEPT (пропустить), DROP (молча отбросить) или REJECT (отклонить с ответом).

Правила проверяются сверху вниз до первого совпадения. Поэтому порядок критичен: сначала разрешаем нужное, в самом конце ставим политику «запретить всё остальное». Если политику DROP выставить раньше, чем правило для SSH, вы мгновенно отрежете себе доступ. На VPS MAATRIX с полным root-доступом вы управляете правилами напрямую, а консоль в панели остаётся запасным входом на случай ошибки.

Стоит понимать понятие состояния соединения (conntrack). Соединение бывает NEW (новое), ESTABLISHED (установленное) и RELATED (связанное). Разрешив ESTABLISHED и RELATED, вы автоматически пропускаете ответы на исходящие запросы, не открывая лишних портов.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для своих проектов

Проверка текущих правил

Сначала посмотрите, что уже настроено. Пустой набор с политикой ACCEPT означает, что фаервол фактически выключен и сервер принимает всё подряд.

iptables -L -n -v --line-numbers

Флаг -n отключает медленное разрешение имён, -v добавляет счётчики пакетов, а --line-numbers нумерует правила — удобно, чтобы удалять конкретные строки командой iptables -D INPUT НОМЕР.

Базовый набор правил

Соберём минимальную рабочую конфигурацию: разрешаем localhost, уже установленные соединения, SSH, HTTP/HTTPS и ICMP, всё остальное отбрасываем.

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT

Теперь устанавливаем политики по умолчанию. Важно: правило для SSH (порт 22) должно быть добавлено ДО смены политики INPUT на DROP, иначе текущее подключение оборвётся.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Разрешение loopback (lo) обязательно: многие локальные сервисы общаются через 127.0.0.1, и без этого правила они сломаются. ICMP лучше не запрещать полностью — он нужен для ping-диагностики и корректного определения MTU.

Защита от простого флуда

iptables умеет ограничивать частоту новых соединений — это отсекает примитивный перебор и медленный флуд на SSH прямо на уровне ядра, ещё до fail2ban.

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
  -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
  -m recent --update --seconds 60 --hitcount 5 --name SSH -j DROP

Эти два правила банят IP, открывший больше 5 новых SSH-соединений за 60 секунд. Модуль recent ведёт список адресов в памяти ядра, поэтому реакция мгновенная и не требует внешних демонов.

Сохранение правил

По умолчанию правила живут только до перезагрузки — при рестарте сервера всё обнулится. Чтобы сохранить их, поставьте iptables-persistent.

apt install iptables-persistent -y
netfilter-persistent save

После любых правок повторяйте netfilter-persistent save, иначе изменения потеряются при следующем ребуте. Сохранённые правила лежат в /etc/iptables/rules.v4 — их можно редактировать текстом и применять командой iptables-restore.

Частые ошибки

  • Сменить политику INPUT на DROP до правила для SSH — мгновенная потеря доступа к серверу.
  • Забыть про conntrack ESTABLISHED — тогда ответы на ваши исходящие запросы (apt, curl) будут блокироваться.
  • Не сохранить правила и удивляться, что после перезагрузки фаервол пуст.
  • Блокировать ICMP полностью — ломает диагностику и определение MTU.
  • Забыть разрешить loopback и получить сбои локальных сервисов.

Если правила запутались, панель MAATRIX даёт доступ к консоли — можно сбросить фаервол командой iptables -F и вернуть политику ACCEPT даже без работающего SSH. Освоив iptables вручную, вы будете лучше понимать и ufw, и nftables, которые лишь надстройки над этим механизмом.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для своих проектов

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

iptables или nftables?

nftables — современная замена, в новых дистрибутивах команда iptables часто уже транслируется в nftables. Синтаксис из статьи работает и там через слой совместимости iptables-nft.

Чем ufw отличается от iptables?

ufw — удобная обёртка над iptables/nftables с простыми командами. Для типовых задач достаточно ufw; ручной iptables нужен для тонких правил и понимания механики.

Как быстро сбросить все правила?

Команды iptables -F (очистить цепочки) и iptables -P INPUT ACCEPT вернут открытый доступ. Делайте это только с консоли панели, если потеряли SSH.