Брандмауэр ufw: закрыть лишнее
Как за пять минут настроить ufw: разрешить нужные порты, закрыть остальное, ограничить доступ по адресу и не отрезать себе SSH.
Обновлено 23 августа 2026 г.
На свежей машине открыто всё, что слушает сеть. Часть служб вы поставили сознательно, часть пришла с пакетами. Брандмауэр решает эту задачу разом: запрещено всё, кроме перечисленного вами.
ufw — простая надстройка над правилами ядра. Её достаточно в подавляющем большинстве случаев; более сложные схемы — в статье про nftables.
Базовая настройка
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw enable
ufw status verbose
Порядок здесь важен: правило для SSH добавляется до включения. Иначе ufw enable оборвёт ваше подключение, и возвращаться придётся через консоль в панели /hosting/vds/m/<id> или диск восстановления.
Консоль в панели работает независимо от сети, поэтому полностью запереть себя нельзя — но времени это стоит.
Типовые правила
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow from 203.0.113.5 to any port 22 proto tcp
ufw limit 22/tcp
ufw delete allow 80/tcp
ufw status numbered
ufw delete 3
ufw limit притормаживает того, кто открывает больше шести подключений за 30 секунд, — дешёвая защита от перебора паролей. Более разборчивый инструмент для той же задачи — fail2ban.
Правило allow from полезно для служб, которые не должны быть публичными: базы данных, панели администрирования, экспортеры метрик.
ufw allow from 203.0.113.5 to any port 5432 proto tcp
Проверить, что получилось
ufw status verbose
ss -tulpn
ss показывает, что слушает система, ufw status — что пропускается снаружи. Разница между списками — это службы, которые вы закрыли, и это нормально. Плохо обратное: порт открыт в ufw, а слушателя нет.
Снаружи проверяйте портом, а не пингом:
nc -vz <адрес> 443
Docker и ufw
Если на машине есть Docker, помните: проброс портов контейнера правится в цепочках ядра раньше правил ufw. Контейнер, запущенный с -p 5432:5432, будет доступен снаружи, даже когда ufw status показывает deny. Привязывайте такие порты к локальному интерфейсу:
docker run -p 127.0.0.1:5432:5432 postgres
Частые ошибки
| Ошибка | Последствие | Решение |
|---|---|---|
ufw enable без правила для SSH | Потеря доступа по сети | Зайти через консоль панели, ufw allow 22/tcp |
| Сменили порт SSH, правило оставили старое | То же самое | Сначала правило, потом порт |
| Порт открыт, служба не отвечает | Служба слушает 127.0.0.1 | Изменить адрес привязки |
| Контейнер доступен вопреки запрету | Docker обходит ufw | Привязка к 127.0.0.1 |
Прежде чем закрывать порт, посмотрите
ss -tulpnи убедитесь, что понимаете, кто на нём сидит. Закрытый порт мониторинга выглядит потом как «сервис упал».