Незащищённый VPS — мишень по умолчанию. Сканеры находят открытые порты за минуты после запуска сервера, брутфорс SSH начинается раньше, чем успеешь развернуть приложение. Настройка файрвола на Linux — первое, что нужно сделать после аренды VPS, ещё до установки веб-сервера. Три инструмента: ufw для быстрого старта, iptables для гибких правил и nftables как современная альтернатива. Команды, типовые наборы правил, типичные ошибки — всё, чтобы закрыть сервер по минимально необходимому принципу без потери доступа.
Что такое файрвол и как он работает на уровне ядра Linux
Файрвол на Linux — это не отдельная программа, а механизм ядра под названием netfilter. Любой входящий или исходящий пакет проходит через цепочки правил, прежде чем попасть к приложению или уйти в сеть. Netfilter появился в ядре 2.4 в 2000 году и с тех пор остаётся фундаментом всех инструментов управления трафиком в Linux.
Три основные цепочки правил: INPUT — трафик, адресованный локальному процессу; OUTPUT — трафик, исходящий с сервера; FORWARD — трафик, транзитом проходящий через сервер (актуально для роутеров и шлюзов). Каждое правило говорит: «если пакет соответствует условию, сделай X». Действия — ACCEPT (пропустить), DROP (отбросить без уведомления) или REJECT (отклонить с сообщением об ошибке).
Stateful firewall — более умная модель: файрвол отслеживает состояния соединений через модуль conntrack. Если вы разрешили исходящий запрос, ответный пакет пройдёт автоматически, без отдельного правила. Это избавляет от необходимости прописывать «зеркальные» правила для каждого соединения.
Чем отличаются iptables, ufw и nftables
| Инструмент | Уровень | Когда использовать | Дистрибутивы |
|---|---|---|---|
| iptables | Прямое управление netfilter | Гибкие правила, legacy-конфиги, любой дистрибутив | Все |
| ufw | Обёртка над iptables | Быстрый старт, стандартные задачи | Ubuntu, Debian |
| nftables | Замена iptables в ядре | Новые серверы, IPv4 + IPv6 в одном конфиге | Debian 10+, Ubuntu 20.04+, Fedora, RHEL 8+ |
iptables — классика, работает везде, тонны документации. ufw — удобная обёртка, скрывает синтаксис iptables за простыми командами. nftables — современная замена, появившаяся в ядре 3.13 (2014 г.); в 2019-м стала дефолтом в Debian 10. Если поднимаете новый сервер — выбирайте nftables или ufw. Если работаете со старой инфраструктурой — iptables никуда не делся.
Настройка ufw — быстрый старт для Ubuntu и Debian
ufw (Uncomplicated Firewall) — официальный инструмент Ubuntu для управления файрволом. Команды читаются как обычный английский, ошибиться сложнее, чем в iptables. На Debian нужна отдельная установка:
sudo apt install ufw
После установки ufw выключен. Включать — только после того, как прописали правило для SSH, иначе потеряете доступ. Подробнее об этом — в разделе про настройку SSH на VPS.
Базовые команды ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Порядок важен: сначала разрешить нужные порты, потом включать. default deny incoming закрывает всё входящее — открытыми остаются только явно разрешённые порты. default allow outgoing не ограничивает исходящий трафик — стандартная практика для веб-серверов. ufw status verbose показывает текущие правила и статус (active/inactive), помогает убедиться, что всё применилось корректно.
Разрешение диапазона портов и конкретных IP
Стандартные сценарии: разрешить MySQL только с определённого IP, открыть диапазон портов для приложения, заблокировать конкретную подсеть.
sudo ufw allow from 203.0.113.0/24 to any port 3306
sudo ufw allow 8000:8100/tcp
sudo ufw deny from 192.0.2.0/24
Первая команда открывает порт 3306 (MySQL) только для подсети 203.0.113.0/24. Вторая разрешает весь диапазон портов 8000–8100 по TCP — удобно для приложений с динамической конфигурацией. Третья блокирует всю подсеть — пригодится при первых признаках брутфорса. Флаг -p tcp --dport в синтаксисе iptables здесь уже встроен в команды ufw.
Удаление правил и логирование
sudo ufw delete allow 80/tcp
sudo ufw logging on
Удаление правил — через delete перед тем же правилом, которым добавляли. Логирование включается командой logging on, записи попадают в /var/log/ufw.log и помогают понять, какой трафик блокируется. Полный синтаксис — в официальной man-странице ufw.
Настройка iptables — гибкие правила для опытных
iptables работает напрямую с netfilter. Синтаксис объёмнее, зато возможности — без ограничений ufw. Основные таблицы: filter (основная — управляет тем, пропускать ли пакет), nat (NAT, переадресация), mangle (изменение заголовков пакетов). Для файрвола почти всегда достаточно таблицы filter.
Синтаксис правила читается линейно: -A INPUT — добавить в цепочку INPUT; -p tcp — протокол TCP; --dport 22 — порт назначения 22; -j ACCEPT — действие ACCEPT.
Минимальный безопасный набор правил iptables
# Сбросить все правила
iptables -F
iptables -X
# Политики по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Разрешить loopback
iptables -A INPUT -i lo -j ACCEPT
# Разрешить established-соединения
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP / HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ICMP (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Логика: сначала всё дропается (-P INPUT DROP), затем добавляются исключения. Правило для loopback-интерфейса (-i lo) — обязательно, без него сломаются многие локальные сервисы. Правило conntrack с состоянием ESTABLISHED,RELATED разрешает ответы на уже установленные соединения — это и есть stateful-файрвол на практике.
Сохранение правил iptables при перезагрузке
По умолчанию правила iptables хранятся только в памяти — перезагрузка сбрасывает всё. Для Debian/Ubuntu:
sudo apt install iptables-persistent
sudo netfilter-persistent save
Пакет iptables-persistent сохраняет правила в файлы /etc/iptables/rules.v4 и /etc/iptables/rules.v6 и восстанавливает их при загрузке через systemd. Модуль conntrack корректно работает и после рестарта — состояния не теряются между правилами.
Блокировка конкретного IP и защита от перебора
iptables -A INPUT -s 198.51.100.5 -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --name SSH_BRUTE --set
iptables -A INPUT -p tcp --dport 22 -m recent --name SSH_BRUTE --rcheck --seconds 60 --hitcount 5 -j DROP
Первая команда блокирует один IP. Вторая и третья — простая защита от брутфорса: если с одного адреса за 60 секунд пришло 5 и более запросов на порт 22, они дропаются. Это не замена полноценному решению, но снижает шум. Для серьёзной защиты — fail2ban читает логи и блокирует IP динамически, интегрируется с iptables автоматически.
Настройка nftables — современная альтернатива
nftables появился в ядре Linux 3.13 в 2014 году как единая замена iptables, ip6tables, arptables и ebtables. До этого IPv4 и IPv6 требовали отдельных наборов правил — nftables закрывает оба стека одним конфигом. Синтаксис читается лучше, производительность выше за счёт нового бэкенда.
Базовый конфиг nftables с нуля
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Тип inet охватывает сразу IPv4 и IPv6 — это главное преимущество перед iptables. Синтаксис tcp dport { 80, 443 } позволяет перечислять несколько портов в одном правиле. Применение и автозапуск:
sudo nft -f /etc/nftables.conf
sudo systemctl enable nftables
Просмотр и отладка правил nftables
sudo nft list ruleset
sudo nft list table inet filter
Первая команда выводит все таблицы и правила — удобно для аудита. Вторая — только конкретную таблицу. Для сравнения: в iptables нужно запускать отдельные команды для каждой таблицы. Полный справочник — в официальном quick reference nftables.
Типовые сценарии — что открывать на веб-сервере

Практическая шпаргалка: какой порт, чем разрешать, чем закрывать. Установка SSL-сертификата на сервер предполагает открытый порт 443 — без этого правила HTTPS не заработает.
| Сервис | Порт | ufw | iptables |
|---|---|---|---|
| SSH | 22/tcp | ufw allow 22/tcp |
-A INPUT -p tcp --dport 22 -j ACCEPT |
| HTTP | 80/tcp | ufw allow 80/tcp |
-A INPUT -p tcp --dport 80 -j ACCEPT |
| HTTPS | 443/tcp | ufw allow 443/tcp |
-A INPUT -p tcp --dport 443 -j ACCEPT |
| MySQL (закрыть) | 3306/tcp | ufw deny 3306/tcp |
-A INPUT -p tcp --dport 3306 -j DROP |
| PostgreSQL (закрыть) | 5432/tcp | ufw deny 5432/tcp |
-A INPUT -p tcp --dport 5432 -j DROP |
Базы данных — MySQL и PostgreSQL — по умолчанию должны быть закрыты снаружи. Если к базе нужен внешний доступ, открывайте только для конкретного IP: ufw allow from 203.0.113.5 to any port 5432. О мониторинге состояния сервера после настройки файрвола — в статье про настройку мониторинга сервера. Для выделенных серверов логика та же, но добавляются правила для управляющих интерфейсов (IPMI, iDRAC).
IPv6 — не забудьте про второй стек
Типичная ошибка: администратор тщательно настраивает правила iptables для IPv4 и забывает про IPv6. Если VPS получил IPv6-адрес, а ip6tables остался с политикой ACCEPT по умолчанию — сервер открыт по второму стеку полностью.
При использовании iptables нужно зеркально прописывать правила через ip6tables — отдельный набор команд с тем же синтаксисом. nftables решает проблему кардинально: тип таблицы inet охватывает оба стека сразу, один конфиг — одни правила. Это одна из причин, почему на новых серверах nftables предпочтительнее.
Проверить IPv6-адреса на сервере: ip -6 addr show. Если адреса есть — правила для IPv6 обязательны.
Частые ошибки при настройке файрвола

Ошибки здесь дороже, чем в большинстве других задач — некоторые блокируют доступ к серверу. Подробнее об инцидентах и алертах — в разделе про мониторинг сервера.
- Включили файрвол до разрешения SSH. Результат — потеря доступа. Порядок правильный: сначала
ufw allow 22/tcp, потомufw enable. Если доступ уже потерян — нужна консоль провайдера (KVM, VNC). - Не сохранили правила. После перезагрузки сервер снова без файрвола. Для ufw сохранение автоматическое. Для iptables — нужен
iptables-persistent. Для nftables —systemctl enable nftables. - Открыли порт 3306 для всех. MySQL доступен из любой точки интернета. Правильно — закрыть полностью или открыть только для 127.0.0.1 / конкретного IP.
- Смешали ufw и ручные правила iptables. ufw управляет iptables под капотом — если добавлять правила iptables вручную параллельно, возникнут конфликты. Выберите один инструмент.
При выборе надёжного VPS для защищённой инфраструктуры — смотрите раздел как выбрать VPS: там критерии по сети, поддержке и доступности KVM-консоли.
Ну и в заключение — какой инструмент выбрать
- ufw — если нужно быстро, сервер на Ubuntu/Debian, задачи стандартные: SSH, HTTP, HTTPS, блокировка по IP.
- iptables — если нужна полная гибкость, много legacy-конфигов, или работаете с дистрибутивом без ufw.
- nftables — на новых серверах, когда важен один конфиг для IPv4 и IPv6, более читаемый синтаксис и меньше накладных расходов.
Настроили файрвол — значит, сервер уже в разы безопаснее большинства. Следующий шаг — выбрать надёжный VPS у проверенного провайдера. В каталоге free-hosting.ru собраны VPS-хостинги с защитой и нормальной поддержкой — выбирайте с фильтрами по локации, ОС и цене.