Введение / Зачем это нужно
UFW (Uncomplicated Firewall) — это простой в использовании интерфейс для управления iptables в Linux. Он идеально подходит для быстрой настройки базовой защиты сервера или рабочей станции без углубления в сложные правила iptables. С помощью этого гайда вы за 10-15 минут настроите файрвол, который будет блокировать нежелательный входящий трафик и пропускать только разрешённые вами соединения (например, для веб-сервера или SSH).
После выполнения вы получите работающий файрвол с правилами по умолчанию и открытыми необходимыми портами.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к терминалу Linux (Ubuntu, Debian, Mint или производных).
- Вы обладаете правами sudo (администратора).
- Критически важно: Подключение к серверу через SSH уже установлено, и вы не планируете его прерывать до настройки правил для SSH. В противном случае вы можете потерять доступ к серверу.
- Вы знаете, какие порты и протоколы должны быть открыты для ваших сервисов (например,
22/tcpдля SSH,80/tcpдля HTTP,443/tcpдля HTTPS).
Шаг 1: Установка и предварительное разрешение SSH
UFW обычно предустановлен в Ubuntu/Debian. Если его нет, установите:
sudo apt update
sudo apt install ufw -y
Важно: Прежде чем включать файрвол, сразу разрешите порт SSH (по умолчанию 22). Это гарантирует, что активное SSH-соединение не будет разорвано при активации.
# Разрешить входящие соединения на порт 22 (SSH) для любого IP
sudo ufw allow ssh
# Или явно указать порт и протокол (если SSH слушает нестандартный порт)
# sudo ufw allow 2222/tcp
Шаг 2: Настройка политик по умолчанию
Установите "закрытую" политику для входящего трафика и "открытую" для исходящего. Это основа безопасности: всё, что не разрешено явно — запрещено.
# Запретить все входящие соединения по умолчанию
sudo ufw default deny incoming
# Разрешить все исходящие соединения по умолчанию (сервер может сам выходить в сеть)
sudo ufw default allow outgoing
💡 Совет: Политику
deny outgoingиспользовать не рекомендуется для большинства серверов, так как это сломает работу пакетных менеджеров (apt update), DNS-запросы и обновления.
Шаг 3: Добавление правил для ваших сервисов
Добавьте правила для каждого порта/сервиса, который должен быть доступен извне. Ниже примеры для типичного веб-сервера.
# HTTP (порт 80)
sudo ufw allow http
# HTTPS (порт 443)
sudo ufw allow https
# Если нужен доступ к базе данных (например, MySQL) ТОЛЬКО с определённого IP:
# sudo ufw allow from 10.0.0.5 to any port 3306
# Разрешить пинг (ICMP) — опционально, для диагностики
sudo ufw allow icmp
Проверьте добавленные правила:
sudo ufw status numbered
Вывод будет примерно таким:
Status: active
Logging: off
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
Шаг 4: Активация файрвола
После проверки всех правил активируйте UFW:
sudo ufw enable
Система запросит подтверждение. Подтвердите, и файрвол начнёт работать сразу.
⚠️ Важно: Если вы забыли добавить правило для SSH (
allow ssh) передufw enable, ваше текущее SSH-соединение может быть разорвано. В таком случае потребуется доступ через консоль управления (например, в панели VPS).
Шаг 5: Управление и проверка
Проверка статуса
sudo ufw status verbose
Покажет детальную информацию, включая политики по умолчанию и исходящие правила.
Просмотр логов (если включено)
Включите логирование для отладки (установите уровень low или medium):
sudo ufw logging low
Логи будут в /var/log/ufw.log (или через journalctl -u ufw).
Удаление/изменение правила
- Узнайте номер правила через
sudo ufw status numbered. - Удалите правило по номеру:
sudo ufw delete 3 - Чтобы изменить правило, удалите старое и добавьте новое.
Отключение файрвола (на крайний случай)
sudo ufw disable
Не делайте этого на production-сервере без крайней необходимости!
Проверка результата
- Локальная проверка: С самого сервера убедитесь, что файрвол активен:
sudo ufw status
Должно бытьStatus: active. - Внешняя проверка: Попробуйте подключиться к открытым портам (SSH, HTTP, HTTPS) с другого компьютера. Подключение должно успешно устанавливаться.
- Проверка закрытых портов: Попробуйте подключиться к порту, который вы не разрешали (например, 3306, если MySQL не открывался). Соединение должно быть отклонено (timeout или "connection refused").
- Просмотр правил в iptables (для уверенности):
sudo iptables -L -n -v
Вы увидите цепочки, созданные UFW (ufw-user-inputи т.д.).
Возможные проблемы
❌ "Connection timed out" после включения UFW
Причина: Правило для SSH не было добавлено до ufw enable, или вы подключились с IP, который не разрешён (если правило allow ssh ограничено по IP).
Решение:
- Получите доступ к серверу через консоль управления (VPS) или KVM.
- Добавьте правило для вашего текущего IP:
sudo ufw allow from <ваш_IP> to any port 22. - Переподключитесь.
❌ Правило не применяется, порт всё равно закрыт
Причина: Возможно, конфликт с другим правилом (более позднее правило deny перекрывает allow). Или сервис слушает не на 0.0.0.0, а только на 127.0.0.1.
Решение:
- Проверьте порядок правил:
sudo ufw status numbered. Правила проверяются сверху вниз. - Убедитесь, что сервис (например, nginx) слушает на всех интерфейсах:
sudo ss -tulpn | grep :80. - Если нужно, удалите конфликтующее правило и добавьте заново.
❌ Не работает пакетный менеджер (apt update завершается с ошибкой)
Причина: По умолчанию ufw default allow outgoing разрешает все исходящие соединения. Если вы меняли политику на deny outgoing, DNS-запросы и HTTP-доступ к репозиториям будут блокироваться.
Решение: Верните политику allow outgoing или создайте явные правила для DNS (порт 53) и HTTP/HTTPS к репозиториям.
❌ Логи UFW не пишутся
Причина: Логирование отключено или уровень слишком высок (только ошибки).
Решение: sudo ufw logging low (логируются все блокировки). Проверьте файл /var/log/ufw.log или sudo tail -f /var/log/ufw.log.
Расширенные сценарии (кратко)
Блокировка конкретного IP
sudo ufw deny from 192.0.2.100
Запретит все входящие соединения с этого адреса.
Ограничение по количеству подключений (защита от брутфорса)
# Ограничить SSH: не более 6 подключений в 30 секунд с одного IP
sudo ufw limit ssh
UFW автоматически создаст правила с модулем conntrack.
Разрешить диапазон портов
# Разрешить порты 6000-6010 (например, для X11 forwarding)
sudo ufw allow 6000:6010/tcp
Удаление по номеру (если правило сложное)
# Правило: deny 80/tcp с IP 1.2.3.4
sudo ufw status numbered
# Вывод: 3 DENY IN 80/tcp FROM 1.2.3.4
sudo ufw delete 3
Заключение
Вы успешно настроили базовый файрвол UFW на своём Linux-сервере. Ключевые моменты:
- Всегда добавляйте правило для SSH перед активацией файрвола.
- Используйте политику
deny incomingпо умолчанию. - Разрешайте только те порты, которые действительно нужны для работы сервисов.
- Для тонкой настройки (например, разных правил для разных интерфейсов) может потребоваться переход на прямой
iptablesилиnftables.
UFW отлично подходит для 80% случаев защиты сервера. Для более сложных сценариев (прозрачные прокси, сложная маршрутизация) изучайте iptables или nftables.