Как включить ufw на VPS, не отрезав себе SSH: разрешение портов в правильном порядке, проверка правил, доступ по IP, удаление правил, частые ошибки.
ufw (Uncomplicated Firewall) - надстройка над встроенным сетевым экраном Linux, которая позволяет управлять правилами короткими понятными командами. На свежем VPS фаервол обычно выключен: наружу открыты все порты, где что-то слушает. В инструкции - как включить ufw так, чтобы снаружи были доступны только нужные порты, и при этом не отрезать себе доступ по SSH.
Коротко. Порядок такой: сначала
ufw allow OpenSSH, потом остальные нужные порты, и только потомufw enable. Если включить фаервол, не разрешив SSH, вы потеряете доступ к серверу. Проверка правил -ufw status verbose. По умолчанию ufw блокирует все входящие соединения и разрешает все исходящие.
Что делает ufw
Без фаервола любая служба, которая слушает сетевой порт, доступна из интернета. Часто это лишнее: база данных, панель, отладочный веб-сервер должны быть видны только вам или только локально. ufw закрывает всё входящее по умолчанию и открывает точечно - порт за портом, при желании только для конкретных адресов.
Исходящие соединения ufw не трогает: сервер может ходить в интернет за обновлениями и на внешние API.
Что потребуется
- Ubuntu или Debian с доступом root (или пользователь с
sudo). В командах нижеsudoопущен - добавьте, если работаете не под root. На Ubuntu ufw уже установлен; на Debian при необходимости -apt install ufw. - Список портов, которые должны быть открыты. Как минимум - SSH (22). Плюс те, что реально нужны снаружи: 80 и 443 для сайта, другие - по задаче.
- Доступ к серверу на случай ошибки. Если случайно закроете SSH, понадобится веб-консоль или режим восстановления от провайдера.
Шаг 1. Проверьте текущее состояние
ufw status
На свежем сервере выведет Status: inactive - фаервол выключен, правил нет.
Шаг 2. Разрешите SSH - обязательно до включения
Это самый важный шаг. Если включить ufw без правила для SSH, текущее соединение оборвётся и зайти снова не получится.
ufw allow OpenSSH
OpenSSH - готовый профиль приложения, он открывает порт 22/tcp. Если SSH у вас на нестандартном порту, указывайте номер: ufw allow 2222/tcp.
Шаг 3. Разрешите остальные нужные порты
ufw allow 80/tcp
ufw allow 443/tcp
Формат: ufw allow <порт>/<протокол>. Протокол (tcp или udp) лучше указывать явно - иначе откроется и tcp, и udp. Диапазон портов: ufw allow 60000:61000/udp. Список профилей приложений, которые знает ufw: ufw app list.
Шаг 4. Включите фаервол
ufw enable
ufw переспросит, не разорвёт ли это текущее SSH-соединение. Если шаг 2 сделан - можно смело отвечать y. Фаервол включится сразу и будет подниматься при загрузке сервера.
Шаг 5. Проверьте правила
ufw status verbose
Покажет статус, политику по умолчанию (deny (incoming), allow (outgoing)) и список открытых портов - для IPv4 и IPv6.
Правила с номерами (номера нужны для удаления):
ufw status numbered
Открыть порт только для одного адреса
Базы данных, панели, вспомогательные сервисы не стоит открывать всему интернету. Разрешите доступ только со своего IP:
ufw allow from 203.0.113.10 to any port 5432 proto tcp
Теперь порт 5432 доступен только с адреса 203.0.113.10, для остальных он закрыт. Так же можно разрешить доступ целой подсети: from 203.0.113.0/24.
Удаление правил
По номеру из ufw status numbered (номера меняются после каждого удаления, сверяйтесь заново):
ufw delete 4
Или тем же описанием, которым правило добавляли:
ufw delete allow 80/tcp
Полезные команды
ufw disable- выключить фаервол (правила сохранятся, применятся при следующемenable).ufw reset- удалить все правила и вернуться к состоянию по умолчанию.ufw default deny incoming/ufw default allow outgoing- политика по умолчанию (обычно уже такая).ufw logging on- включить запись заблокированных пакетов в/var/log/ufw.log.ufw allow proto tcp from any to any port 80,443- несколько портов одним правилом.
Частые ошибки
- Потерян доступ по SSH после
ufw enable. Не было правила для SSH. Зайдите через веб-консоль или режим восстановления провайдера, выполнитеufw allow OpenSSH(илиufw disable), проверьте и включите заново. - Правило добавили, а порт всё равно закрыт. Проверьте
ufw status- возможно, забылиenable, или служба слушает только127.0.0.1(тогда дело не в фаерволе, а в настройке самой службы). - Открыли
80, а не80/tcp. Без протокола ufw открывает и tcp, и udp - лишнее. Указывайте протокол. - Правила для IPv4 есть, для IPv6 нет. ufw по умолчанию создаёт правила для обоих стеков; если IPv6-строк нет, проверьте
IPV6=yesв/etc/default/ufw. - Docker «пробивает» ufw. Docker пишет свои правила в iptables мимо ufw, и опубликованные контейнерные порты открыты, даже если ufw их не разрешал. Публикуйте порты как
127.0.0.1:8080:80или используйте отдельную настройку для связки Docker + ufw.
Что дальше
- Как подключиться к серверу по SSH из Windows - если нужно вернуть доступ или зайти впервые.
- Как выбрать VPS - разбор с верхнего уровня.
