1. Подготовка
Прежде чем трогать файрвол, выясните три вещи.
На каком порту работает SSH
Если в выводе :22 — порт стандартный. Если другое число — используйте его во всех командах ниже.
sudo ss -tlnp | grep -E 'sshd|systemd'Какие сервисы слушают сеть
Всё, что слушает 0.0.0.0 или [::], доступно извне. Решите, что из этого должно остаться открытым.
sudo ss -tulpnГде веб-консоль провайдера
Найдите в панели хостинга кнопку «Консоль», «VNC» или «Emergency console». Она работает в обход сети и спасёт, если вы закроете себе SSH.
2. Установка
sudo apt update
sudo apt install -y ufw
sudo ufw statusОжидаемый ответ — Status: inactive. Если UFW уже активен, посмотрите существующие правила (sudo ufw status numbered) перед изменениями.
3. Правило для SSH
Выберите один вариант.
Вариант А. Стандартный порт с защитой от перебора
sudo ufw limit 22/tcp comment 'SSH'Вариант Б. Нестандартный порт
# замените 2222 на свой порт
sudo ufw limit 2222/tcp comment 'SSH'Вариант В. Только с вашего IP
Самый строгий вариант. Узнать адрес, с которого вы сейчас подключены, можно прямо на сервере:
echo "${SSH_CLIENT%% *}"# замените 203.0.113.10 на свой IP
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'SSH admin'Если у вас динамический IP (домашний интернет, мобильная сеть), после его смены вы потеряете доступ. Используйте вариант В только со статическим адресом или VPN.
4. Политика по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoingВходящие соединения, не подпавшие ни под одно правило, будут отброшены. Ответы на исходящие запросы (обновления, DNS, API) UFW пропускает автоматически — отдельных правил для них не нужно.
5. Веб и другие сервисы
Сайт
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'Профили приложений
Пакеты вроде Nginx и OpenSSH регистрируют готовые профили. Посмотреть и использовать их:
sudo ufw app list
sudo ufw app info 'Nginx Full'
sudo ufw allow 'Nginx Full'База данных — только для своего сервера
Базы данных не стоит открывать в интернет. Если к ней ходит другой сервер, разрешите только его адрес:
# PostgreSQL только с адреса сервера приложения
sudo ufw allow from 198.51.100.20 to any port 5432 proto tcp comment 'Postgres app'6. Таймер-страховка
Необязательный, но очень полезный шаг перед первым включением. Мы планируем автоматическое выключение UFW через 5 минут. Если вы потеряете доступ, через 5 минут файрвол отключится сам.
sudo apt install -y at
echo "/usr/sbin/ufw disable" | sudo at now + 5 minutesТеперь включите UFW (следующий шаг) и проверьте вход из нового окна. Если всё работает — отмените таймер:
# показать задания: первая колонка — номер
sudo atq
# удалить задание (подставьте номер)
sudo atrm 17. Включение и проверка
sudo ufw enable
sudo ufw status verboseПроверьте в выводе:
Status: activeDefault: deny (incoming), allow (outgoing)- есть правило для вашего порта SSH;
- нет лишних открытых портов.
Затем с вашего компьютера (не с сервера) проверьте, что порты отвечают как ожидается:
# замените на IP сервера
nc -zv 203.0.113.50 22
nc -zv 203.0.113.50 3306 # должно быть «timed out»8. Логи
Уровня low достаточно для большинства серверов: в лог попадают заблокированные пакеты.
sudo ufw logging low
# Ubuntu/Debian с rsyslog
sudo tail -f /var/log/ufw.log
# системы без rsyslog
sudo journalctl -k -f | grep UFWСтроки [UFW BLOCK] показывают отброшенные пакеты: SRC — откуда, DPT — на какой порт стучались.
Дальше: шпаргалка команд для ежедневной работы и подводные камни, о которые чаще всего спотыкаются.