Перейти к содержимому
VDS · Сеть, адрес и домены

Брандмауэр 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 и убедитесь, что понимаете, кто на нём сидит. Закрытый порт мониторинга выглядит потом как «сервис упал».