04. UFW: настройка фаервола
Что такое UFW
UFW (Uncomplicated Firewall) — это надстройка над стандартным iptables, которая позволяет управлять правилами фильтрации трафика простыми командами. Название говорит само за себя: «несложный фаервол».
Без фаервола любой порт на сервере доступен из интернета. Злоумышленники постоянно сканируют IP-адреса в поисках открытых портов. UFW закрывает всё, что не нужно, — и это первая линия обороны.
Установка UFW
В современных версиях Ubuntu UFW уже установлен, но проверить стоит:
sudo apt install -y ufw
Проверяем статус:
sudo ufw status
Вывод: Status: inactive — как и ожидалось.
Базовая стратегия
Классическая стратегия безопасности:
- Запретить всё входящее по умолчанию
- Разрешить всё исходящее — сервер должен иметь доступ к обновлениям, DNS и т.д.
- Открыть только нужные порты конкретным сервисам
Применяем политики по умолчанию:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Разрешение SSH
Прежде чем включить фаервол, нужно разрешить SSH, иначе мы потеряем доступ к серверу:
sudo ufw allow ssh
Эта команда — алиас для ufw allow 22/tcp. Результат:
Rule added
Rule added (v6)
Правило добавлено для IPv4 и IPv6.
Rate limiting для SSH
SSH-порт — главная цель для брутфорс-атак. UFW позволяет ограничить количество попыток подключения с одного IP:
sudo ufw limit ssh
limit разрешает не более 6 соединений с одного IP за 30 секунд. Если атакующий превысит лимит — UFW молча сбрасывает пакеты.
Важно: limit применяется поверх уже существующих правил. Сначала allow, потом limit.
Включение фаервола
Проверяем, какие правила будут применены:
sudo ufw show added
Должно быть что-то вроде:
ufw allow 22/tcp
ufw limit 22/tcp
Включаем:
sudo ufw enable
Система предупредит, что включение может нарушить текущие SSH-соединения. Отвечаем y.
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Проверяем статус:
sudo ufw status verbose
Вывод:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----
22/tcp LIMIT Anywhere
22/tcp (v6) LIMIT Anywhere (v6)
Проверка извне
Пока сессия открыта, откройте второй терминал на локальной машине (или используйте мобильный интернет) и попробуйте подключиться:
ssh sergey@95.216.42.187
Подключение должно пройти успешно — SSH работает.
Теперь попробуйте подключиться к другому порту, например к 80 или 443:
nc -zv 95.216.42.187 80
nc -zv 95.216.42.187 443
Оба должны ответить Connection refused или timed out. Если так — фаервол работает правильно.
Просмотр логов
UFW логирует заблокированные пакеты. Это полезно для отладки:
sudo journalctl -u ufw --since "5 minutes ago"
Или смотрим системный лог:
sudo tail -f /var/log/ufw.log
Вы увидите записи вроде:
[UFW BLOCK] IN=eth0 OUT=... SRC=185.220.101.42 DST=95.216.42.187 PROTO=TCP DPT=23
Это значит, что UFW заблокировал попытку подключения к порту 23 (Telnet) с IP 185.220.101.42.
Работа с правилами
Основные команды, которые пригодятся:
| Команда | Описание |
|---|---|
sudo ufw allow 80/tcp |
Открыть порт 80 HTTP |
sudo ufw allow 443/tcp |
Открыть порт 443 HTTPS |
sudo ufw allow 51820/udp |
Открыть UDP-порт WireGuard |
sudo ufw deny 23/tcp |
Закрыть порт (явный запрет) |
sudo ufw delete allow 80/tcp |
Удалить правило |
sudo ufw status numbered |
Показать правила с номерами |
sudo ufw delete 3 |
Удалить правило по номеру |
Все порты, кроме SSH, пока закрыты. В следующих статьях мы будем открывать их по мере установки сервисов.
Дополнительные соображения
Если сервер используется для личных нужд и к нему подключаетесь только вы, можно дополнительно ограничить SSH по IP-адресу:
sudo ufw allow from 77.88.55.66 to any port 22
Но это имеет смысл только если у вас статический IP дома. В остальных случаях rate limiting + Fail2ban (следующая статья) — более гибкое решение.
Итог
Фаервол настроен и активен:
- Входящие соединения по умолчанию запрещены
- SSH разрешён с ограничением количества попыток
- Все остальные порты закрыты
- Логи заблокированных пакетов пишутся в
/var/log/ufw.log
В следующей части усилим защиту — установим Fail2ban, который автоматически банит IP-адреса после нескольких неудачных попыток входа.
Комментарии
Комментарии пока не подключены.