iptables — пользовательская утилита для настройки netfilter — фреймворка фильтрации пакетов в ядре Linux. Обрабатывает все входящие, исходящие и транзитные пакеты. Используется как основа многих Linux-фаерволов (UFW, firewalld работают поверх iptables/nftables).
Структура iptables
Таблицы (tables): filter (фильтрация), nat (трансляция адресов), mangle (модификация заголовков). Цепочки (chains): INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING. Действия (targets): ACCEPT, DROP, REJECT, LOG.
Основные команды
# Посмотреть правила
iptables -L -n -v
# Разрешить SSH (порт 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешить HTTP и HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# Заблокировать IP
iptables -A INPUT -s 192.168.1.100 -j DROP
# Политика по умолчанию: блокировать всё входящее
iptables -P INPUT DROP
iptables -P FORWARD DROP
# Разрешить уже установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Сохранить правила
iptables-save > /etc/iptables/rules.v4
UFW — упрощённый интерфейс
ufw allow 22/tcp
ufw allow 80,443/tcp
ufw deny from 192.168.1.100
ufw enable
ufw status verbose
История
Linux netfilter появился в ядре 2.4 (2001) как замена ipchains (ядро 2.2, 1998). iptables — инструмент управления netfilter с 2001 года. nftables появился в ядре 4.18 (2013) и постепенно заменяет iptables. FirewallD (RHEL 7+) и UFW (Ubuntu) — frontend поверх iptables/nftables.
Связь с хостингом
iptables — первая линия защиты VDS. Минимальная конфигурация: заблокировать всё входящее, разрешить SSH/HTTP/HTTPS и ESTABLISHED-соединения. fail2ban использует iptables для автоматической блокировки брутфорс-атак. В Docker и Kubernetes iptables используется для маппинга портов и Service-сетей.
История iptables
iptables создан как часть проекта Netfilter и включён в ядро Linux 2.4.0 в 2001 году, заменив ipchains (1.2, 1997) и ipfwadm (1995). Разработан Хармом ван ден Хельденом. nftables — современная замена iptables — впервые появилась в ядре 3.13 (2014) и стала рекомендованной с Debian 10 (2019). В Ubuntu 20.04+ iptables является фронтендом над nftables. ufw (Uncomplicated Firewall) — упрощённый интерфейс над iptables, стандарт Ubuntu.
Основная структура iptables
# Таблицы: filter (по умолчанию), nat, mangle, raw
# Цепочки: INPUT, OUTPUT, FORWARD (filter), PREROUTING, POSTROUTING (nat)
iptables -L -n -v # просмотр правил
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # разрешить SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # разрешить HTTP
iptables -A INPUT -j DROP # блокировать всё остальное
iptables-save > /etc/iptables/rules.v4 # сохранить
iptables vs nftables vs UFW vs firewalld
| Инструмент | Уровень | Дистрибутив |
|---|---|---|
| iptables | низкий | универсальный |
| nftables | низкий (новый) | Debian 10+, Ubuntu 20.04+ |
| ufw | высокий | Ubuntu |
| firewalld | высокий | RHEL, Fedora |
Типичные ошибки
- Блокировка SSH без разрешения собственного IP — потеря доступа к VPS.
- Правила не сохранены: после перезагрузки iptables очищается без iptables-persistent.
- Конфликт iptables и Docker: Docker создаёт собственные правила, iptables-DROP может блокировать контейнерный трафик.
В связке с Docker iptables конфигурируется автоматически: Docker создаёт цепочки DOCKER и DOCKER-USER. Правила в DOCKER-USER применяются до правил Docker и позволяют контролировать трафик контейнеров. Cloudflare IP-ranges (список публикуется на сайте) стоит добавить в whitelist для корректной работы сайта. На Ubuntu Server рекомендуется UFW как фронтенд.