Включили ufw и потеряли SSH: правильный порядок включения брандмауэра на удалённой машине

Что было. На сервере с Ubuntu 16.04 администратор выполнил ufw enable. Система предупредила, что команда может прервать SSH-сессию; он подтвердил. Сессия оборвалась, сайты стали недоступны. После перезагрузки ufw оказался выключен (правила не были сохранены как включённые), доступ вернулся, но включить брандмауэр он так и боялся.

Почему. ufw по умолчанию запрещает все входящие соединения. Если до включения не добавить правило для SSH, первым же действием он выгоняет вас с сервера. Предупреждение перед enable именно об этом. Участники предложили сброс к настройкам по умолчанию (ufw reset), затем ufw allow ssh и только потом ufw enable; итог автор не подтвердил.

Правильный порядок для удалённой машины.

  1. Открыть консоль виртуальной машины из панели управления во второй вкладке: она не зависит от брандмауэра.
  2. Посмотреть, на каком порту слушает SSH: ss -ltnp | grep sshd. Если порт нестандартный, ufw allow ssh не поможет: нужен ufw allow 2222/tcp.
  3. Добавить правила для SSH и для сервисов, которые должны быть доступны снаружи: ufw allow ssh, ufw allow 80,443/tcp.
  4. Проверить список до включения: ufw show added.
  5. Включить: ufw enable. Текущая SSH-сессия не рвётся, если правило для её порта есть.
  6. Проверить снаружи, что новая SSH-сессия открывается, и только после этого закрывать старую.

Дополнительные меры. Ограничить SSH по адресам, если они постоянные: ufw allow from 203.0.113.0/24 to any port 22 proto tcp. Включить защиту от перебора: ufw limit ssh. И помнить, что опубликованные порты Docker ufw не видит, об этом есть отдельная тема.

Если уже отрезало. Консоль из панели управления → ufw allow ssh (или свой порт) → ufw status. Отключать брандмауэр целиком не обязательно.

Настройка ufw описана в документации Ubuntu Server.