Настройка файрвола UFW в Ubuntu

UFW (Uncomplicated Firewall) — обёртка над iptables/nftables, штатно идущая в Ubuntu. Разберём базовую настройку файрвола для типового веб-сервера: SSH + Nginx (80/443), всё остальное закрыто по умолчанию.

Устанавливаем и проверяем статус

В большинстве версий Ubuntu UFW уже стоит из коробки, но на всякий случай:

sudo apt install ufw -y
sudo ufw status verbose

Важно: сначала разрешаем SSH

Это самый частый способ отрубить себе доступ к серверу — включить UFW с политикой «запретить всё» и забыть разрешить SSH. Прежде чем включать файрвол, обязательно разрешите порт, на котором у вас висит SSH:

# если SSH на стандартном 22 порту
sudo ufw allow 22/tcp

# если SSH перевешен на нестандартный порт, например 2222
sudo ufw allow 2222/tcp

Разрешаем веб-трафик

Для Nginx в Ubuntu есть готовые профили UFW, можно разрешать не по номеру порта, а по имени профиля:

sudo ufw app list

# посмотреть, что входит в профиль
sudo ufw app info "Nginx Full"

# разрешить HTTP + HTTPS одной командой
sudo ufw allow "Nginx Full"

Если сертификата ещё нет и HTTPS пока не поднят, можно временно разрешить только HTTP:

sudo ufw allow "Nginx HTTP"

Задаём политику по умолчанию и включаем

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable

Система спросит подтверждение, что может порвать текущее SSH-соединение — раз мы уже разрешили нужный порт выше, отвечаем «y».

Проверяем итоговый список правил:

sudo ufw status numbered

Полезные команды на каждый день

# удалить правило по номеру (номер смотрим в status numbered)
sudo ufw delete 3

# разрешить доступ конкретному IP на конкретный порт (например, к панели БД)
sudo ufw allow from 203.0.113.10 to any port 3306

# ограничить количество попыток подключения (защита от брутфорса SSH)
sudo ufw limit 22/tcp

# полностью выключить файрвол
sudo ufw disable

# посмотреть логи блокировок
sudo tail -f /var/log/ufw.log

ufw limit — недооценённая штука: она не просто открывает порт, а автоматически блокирует IP, если с него идёт больше 6 попыток подключения за 30 секунд. Для SSH, торчащего в интернет, это простая и бесплатная защита от перебора паролей без установки fail2ban.