iptables — что это и зачем
iptables — классический брандмауэр Linux: набор правил, по которым ядро пропускает или блокирует сетевые пакеты. На современной Ubuntu заменён на nftables и обычно скрыт за UFW; саму команду `iptables` напрямую трогают редко, но понимать её стоит — на ней построена вся сетевая безопасность.
iptables
iptables — классический брандмауэр Linux: набор правил, по которым ядро пропускает или блокирует сетевые пакеты. На современной Ubuntu заменён на nftables и обычно скрыт за UFW; саму команду iptables напрямую трогают редко, но понимать её стоит — на ней построена вся сетевая безопасность.
Что это в одном абзаце
Когда сетевой пакет приходит на сервер или уходит с него, ядро Linux прогоняет его через цепочку правил — это и есть netfilter, фреймворк фильтрации в ядре. iptables — это CLI-утилита, через которую вы добавляете и просматриваете эти правила. Каждое правило говорит: «если пакет с такими-то признаками — сделать с ним вот это». Базовые действия: ACCEPT (пропустить), DROP (молча выбросить), REJECT (отбить ошибкой).
# Показать все текущие правила
sudo iptables -L -n -v
# Заблокировать входящие с конкретного IP
sudo iptables -A INPUT -s 1.2.3.4 -j DROP
# Разрешить SSH из приватной сети
sudo iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 22 -j ACCEPT
В чистом виде iptables-команды громоздкие, поэтому для рутинной работы используют надстройки: UFW на Ubuntu, firewalld на RHEL/Fedora.
Цепочки и таблицы
iptables-правила сгруппированы в цепочки. Стандартные цепочки:
- INPUT — пакеты, адресованные этому серверу (включая SSH-подключения извне).
- OUTPUT — пакеты, исходящие с сервера.
- FORWARD — пакеты, проходящие сквозь сервер (для маршрутизатора или Docker-хоста).
У каждой цепочки есть политика по умолчанию (что делать, если ни одно правило не сработало): обычно ACCEPT, но в строгих конфигурациях ставят DROP — «всё запрещено, кроме явно разрешённого».
Цепочки сгруппированы в таблицы:
filter— основная фильтрация (ACCEPT/DROP). По умолчанию.nat— преобразование адресов (для проброса портов и NAT-роутинга, в том числе у Docker).mangle— модификация заголовков пакетов (TOS, TTL).raw— раннее вмешательство до conntrack.
В типовой работе вы видите только filter — на остальные таблицы натыкаетесь редко.
Переход с iptables на nftables
С 2018 года в Linux появилась более современная подсистема — nftables. Она:
- Объединяет IPv4 и IPv6 правила в одной утилите (
nft), вместо параллельныхiptablesиip6tables. - Имеет более чистый и читаемый синтаксис.
- Быстрее на больших правилосписках (тысячи правил).
Начиная с Debian 11 и Ubuntu 22.04, iptables — это обёртка: ваши команды iptables -A INPUT ... транслируются в правила nftables под капотом. Команда называется iptables-nft, и она сосуществует со старой iptables-legacy (которая до сих пор в комплекте, но не используется по умолчанию).
Проверить, какой бэкенд у вас активен:
sudo update-alternatives --display iptables
sudo iptables -V # должно содержать "(nf_tables)"
Поэтому фраза «iptables в nftables» — это не о миграции правил, а о том, что они уже работают через nftables: команда iptables физически работает с nft-таблицами. Прямо писать в nft стоит, если вы делаете что-то новое; старые скрипты с iptables-restore будут работать.
Кто использует iptables на Ubuntu
В чистом виде — почти никто. Поверх iptables/nftables работают надстройки:
- UFW (Uncomplicated Firewall) — стандартный фронт на Ubuntu. Команды типа
sudo ufw allow 22/tcpпод капотом транслируются в правила netfilter. Подробно — UFW на Ubuntu. - fail2ban — сервис, который читает логи (
auth.log, nginx access) и при подозрительной активности сам пишет правила в iptables/nftables. Подробно — fail2ban для SSH. - Docker — при старте контейнера с
-p 80:80Docker сам создаёт правила в таблицеnatдля проброса порта. Поэтому при включённом UFW могут возникать неожиданности — Docker обходит UFW через цепочкуDOCKER-USER. - Kubernetes / kube-proxy — для маршрутизации сервисов внутри кластера тоже использует netfilter.
В обычной серверной практике — пользуйтесь UFW и fail2ban, не лезьте в iptables руками.
Когда лезть в iptables напрямую
- Отладка, когда правило, поставленное через UFW или Docker, делает не то, что ожидалось.
sudo iptables -L -n -v --line-numbersпокажет полную картину. - Сценарии, которые UFW не покрывает: NAT-проброс портов, маркировка пакетов, детальная фильтрация по conntrack-состояниям.
- Контейнеры: понимать цепочки
DOCKER-USER,DOCKER,DOCKER-INGRESS.
Перед редактированием — всегда делайте дамп текущих правил, чтобы было куда откатиться:
sudo iptables-save > /root/iptables.before.$(date +%Y%m%d)
И помните: правила iptables живут в памяти ядра. После ребута они пропадут, если их не сохранил какой-нибудь сервис (netfilter-persistent, UFW, Docker).
Частые вопросы
Что такое iptables простыми словами
Это утилита, через которую вы говорите ядру Linux, какие сетевые пакеты пускать на сервер, а какие выбрасывать. Стандарт брандмауэра Linux с конца 1990-х. Сейчас под капотом работает через nftables, но команда iptables всё ещё актуальна.
iptables и nftables — это одно и то же
Не одно и то же, но связанное. nftables — современная подсистема фильтрации в ядре. iptables — более старая, частично вытесненная. На Ubuntu 22.04+ команда iptables под капотом транслируется в nftables-правила (iptables-nft-режим), поэтому в реальной системе работают именно nftables, а не «классический» iptables.
Чем UFW отличается от iptables
UFW — это упрощённая обёртка над iptables/nftables. Команды UFW (sudo ufw allow 22/tcp) транслируются в полноценные правила netfilter, но синтаксис понятнее и короче. UFW не делает того, что не умеет iptables — это просто удобный фасад.
Сохраняются ли правила iptables после ребута
По умолчанию нет — правила хранятся в памяти ядра. Чтобы они применялись при загрузке, нужен пакет iptables-persistent (или netfilter-persistent), который сохраняет правила в /etc/iptables/rules.v4 и rules.v6 и восстанавливает при старте. UFW и Docker имеют свои механизмы сохранения и применяют правила при старте сервиса.
Где смотреть текущие правила iptables
sudo iptables -L -n -v — все правила в таблице filter. -n — не резолвить IP в DNS (быстрее), -v — детальный вывод со счётчиками пакетов и байтов. С --line-numbers — увидите номера строк, по которым удобно делать iptables -D INPUT 5 (удалить пятую строку).
Что почитать
- UFW на Ubuntu — стандартный фронт для управления iptables/nftables. Команды короче и понятнее, под капотом — те же netfilter-правила.
- fail2ban для SSH — пример сервиса, который автоматически пишет правила в iptables при подозрительных попытках входа.
- SSH-ключи Ubuntu — типовой стек защиты SSH: ключи (отключаем парольный вход), UFW (закрываем лишние порты), fail2ban (банит ботов через iptables).