iptables / UFW
iptables — классический интерфейс к сетевому фильтру ядра Linux, UFW — простая надстройка над ним для типовых правил.
Что такое iptables
iptables — утилита для настройки netfilter, межсетевого экрана, встроенного в ядро Linux. Сам фильтр живёт в ядре и проверяет каждый проходящий пакет; iptables — способ сказать ему, какие пакеты пропускать, а какие отбрасывать.
Правила сгруппированы в цепочки (chains), цепочки — в таблицы (tables). На практике достаточно знать три цепочки таблицы filter:
| Цепочка | Какие пакеты |
|---|---|
INPUT |
входящие, адресованные самому серверу |
OUTPUT |
исходящие от сервера |
FORWARD |
транзитные — сервер как маршрутизатор, NAT, Docker |
Пакет идёт по цепочке сверху вниз до первого совпадения — порядок правил решает всё. Правило, разрешающее SSH, поставленное после DROP all, не сработает никогда.
iptables -L -n -v --line-numbers # показать правила с номерами и счётчиками
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # дописать в конец
iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT # вставить первым
iptables -D INPUT 3 # удалить правило №3
Ключевая ловушка: правила iptables живут в памяти и исчезают после перезагрузки. Сохранять их надо отдельно — пакетом iptables-persistent в Debian и Ubuntu или iptables-save > /etc/iptables/rules.v4. Отдельно ведутся правила для IPv6 — команда ip6tables, файл rules.v6. Забыть про IPv6 — распространённый способ оставить открытым порт, который считали закрытым.
Что такое UFW
UFW (Uncomplicated Firewall) — надстройка над тем же netfilter, созданная в Ubuntu, чтобы типовые задачи решались одной понятной строкой вместо простыни ключей. UFW не заменяет фильтр — он генерирует для него правила.
ufw default deny incoming # всё входящее запрещено
ufw default allow outgoing # исходящее разрешено
ufw allow 22/tcp # SSH — ДО включения!
ufw allow 80,443/tcp # веб
ufw allow from 10.0.0.0/24 to any port 5432 proto tcp # Postgres только из своей подсети
ufw limit 22/tcp # тормозить перебор: 6 попыток за 30 секунд с одного IP
ufw enable
ufw status numbered
Разрешите SSH до ufw enable. Иначе политика deny incoming вступит в силу вместе с включением, ваша текущая сессия оборвётся, и вернуться на сервер получится только через консоль провайдера или IPMI.
Что выбрать
| UFW | iptables / nftables | |
|---|---|---|
| Порог входа | минимальный | высокий |
| Типовой сервер (web + SSH) | достаточно | избыточно |
| Сохранение после перезагрузки | само | вручную |
| IPv6 | автоматически вместе с IPv4 | отдельными командами |
| Сложный NAT, маркировка, лимиты | неудобно | всё возможно |
Практическое правило: на одиночном VPS берите UFW и не усложняйте. iptables нужен, когда UFW перестаёт хватать — сложный NAT, проброс между интерфейсами, тонкий rate limiting.
Про смену поколений: netfilter давно переехал на nftables, и в свежих Debian, Ubuntu и RHEL команда iptables — это обёртка iptables-nft, транслирующая старый синтаксис в новый движок. Старые команды работают, но nft list ruleset покажет реальную картину правил.
Docker обходит UFW
Неприятный сюрприз, стоивший многим утёкшей базы: Docker при публикации порта (-p 5432:5432) пишет собственные правила в цепочку FORWARD и таблицу nat, минуя INPUT, куда пишет UFW. Контейнер оказывается доступен всему интернету, а ufw status при этом честно показывает, что порт закрыт.
Правильное решение — не публиковать порт наружу вовсе: -p 127.0.0.1:5432:5432. Тогда доступ есть только с самой машины, а снаружи — через SSH-туннель.
Firewall — не вся защита
Сетевой фильтр отсекает доступ по IP и портам. Он не спасёт от атаки на открытый по определению 443-й порт: SQL-инъекции и подбор паролей идут по разрешённому трафику. Для этого нужен WAF, а от DDoS объёмом в десятки гигабит iptables не поможет — канал забьётся до сервера, здесь работает только фильтрация на стороне провайдера.
Связанные термины
- Межсетевые экраны / WAF — общее понятие файрвола
- Сетевые порты — то, чем оперируют правила
- SSH — первое, что нужно разрешить, и последнее, что стоит терять
- NAT — вторая большая задача netfilter
- Маска подсети и CIDR — как записывают диапазоны в правилах
- DDoS-атаки — то, от чего локальный файрвол не защищает
Готовы запустить GPU-задачу?
Запустить GPU-сервер