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

UFW (Uncomplicated Firewall) — простой фронтенд для iptables/nftables, который облегчает управление сетевыми правилами в Debian. Установите пакет, определите базовые политики (входящие/исходящие), добавьте правила для сервисов и протестируйте доступность. В статье — пошаговые команды, проверки, откат и рекомендации по безопасности.
Что такое UFW
UFW (Uncomplicated Firewall) — это удобный интерфейс для управления правилами брандмауэра на Linux. Он упрощает работу с низкоуровневыми инструментами (iptables/nftables), предоставляя понятные команды для разрешения или блокировки трафика.
Определение в одну строку: UFW — инструмент для декларативного управления входящими и исходящими соединениями через понятные команды.
Важно: UFW сам по себе — не антивирус; он контролирует сеть, а не содержимое файлов.
Перед началом: термины и предпосылки
- Правило (rule): инструкция, разрешающая или блокирующая трафик по порту, протоколу или IP.
- Политика по умолчанию (default policy): поведение файрвола для непопадающего под правило трафика.
- Сервисы: имена, сопоставляемые с портами из /etc/services (например, ssh → 22).
Требования: доступ к терминалу с правами sudo и базовое понимание сетевых портов.
Как установить UFW на Debian
Обновите список пакетов и установите ufw:
sudo apt update
sudo apt install ufw -yПосле установки можно включить UFW:
sudo ufw enableПримечание: команда enable активирует правила и сохраняет состояние между перезагрузками.
Базовая модель и политики по умолчанию
Рекомендованная базовая модель безопасности:
- По умолчанию запрещать входящие соединения (deny incoming).
- По умолчанию разрешать исходящие соединения (allow outgoing).
Установите эти политики:
sudo ufw default deny incoming
sudo ufw default allow outgoingВажно: после изменения политик проверьте, что вы не потеряли доступ по SSH (если настраиваете удалённый сервер).
Основные команды и примеры правил
Разрешить порт по номеру:
sudo ufw allow 22Разрешить порт по имени (если сервис зарегистрирован):
sudo ufw allow sshЗапретить порт:
sudo ufw deny 443Разрешить трафик с конкретного IP:
sudo ufw allow from 192.168.9.12Заблокировать трафик с IP:
sudo ufw deny from 192.168.9.12Разрешить диапазон адресов (пример сети):
sudo ufw allow from 192.168.0.0/24 to any port 3306 proto tcpРазрешить конкретный порт для определённого интерфейса (например, только на eth0):
sudo ufw allow in on eth0 to any port 80 proto tcpПерезапустить службу (применить изменения через systemd):
sudo systemctl restart ufwПоказать статус и активные правила:
sudo ufw status verbose
sudo ufw status numberedСброс всех правил к заводским (очистка):
sudo ufw resetУдаление пакета:
sudo apt purge ufw gufw -yЧастые сценарии и примеры
- Оставить SSH доступ при запуске UFW (критично для удалённых серверов):
sudo ufw allow ssh
sudo ufw enable- Разрешить веб-трафик (HTTP/HTTPS):
sudo ufw allow http
sudo ufw allow https- Разрешить только исходящие HTTPS и DNS для сервера, блокируя всё остальное:
sudo ufw default deny incoming
sudo ufw default deny outgoing
sudo ufw allow out 443/tcp
sudo ufw allow out 53/udp
sudo ufw enableПримечание: при строгих исходящих политиках следите за зависимостями сервисов (обновления, NTP).
Проверка и тесты (как убедиться, что всё работает)
- Локальная проверка портов: ss -tuln | grep <порт>
- С удалённой машины: nmap -Pn
-p 22,80,443 - Логи UFW: /var/log/ufw.log или через journalctl -u ufw
Пример команды для быстрого теста SSH:
ssh -vvv user@server.example.comОткат и аварийное восстановление доступа
Если вы потеряли доступ по SSH после изменения правил:
- Если есть консольный доступ (KVM/панель хостера) — подключитесь и выполните sudo ufw disable или sudo ufw reset.
- Через другую сеть/адрес, у которого есть доступ — откатьте правило, используя sudo ufw delete <номер_правила> (номер можно получить через sudo ufw status numbered).
Команды для быстрого отключения:
sudo ufw disable
sudo ufw resetЧитер-лист команд (быстрое руководство)
# Установка и включение
sudo apt update
sudo apt install ufw -y
sudo ufw enable
# Базовые политики
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Разрешить сервисы/порты
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow from 10.0.0.0/8 to any port 3306
# Просмотр и удаление
sudo ufw status verbose
sudo ufw status numbered
sudo ufw delete 2
# Откат
sudo ufw reset
# Удаление пакета
sudo apt purge ufw gufw -yРекомендации по безопасности и hardening
- Всегда добавляйте правило для SSH перед включением UFW на удалённом сервере.
- Используйте сквозную аутентификацию (ключи SSH) и отключите пароли, если возможно.
- Ограничьте доступ по IP для административных сервисов (порталы управления, базы данных).
- Включите логирование и периодически просматривайте /var/log/ufw.log.
- Рассмотрите использование fail2ban совместно с UFW для автоматической блокировки брутфорса.
Сравнение и альтернативы
- iptables: более гибкий и низкоуровневый, но сложнее в управлении.
- nftables: современная замена iptables, предоставляет мощный набор возможностей; UFW в некоторых системах работает поверх nftables.
- Gufw: графическая оболочка для UFW, удобна на рабочих станциях.
Выбор: UFW подходит для большинства серверных задач, когда нужна простая и предсказуемая политика. Для тонкой настройки или высокопроизводительных сценариев стоит рассмотреть прямую работу с nftables/iptables.
Роль‑ориентированный чек‑лист
Системный администратор:
- Добавить правило для SSH и протестировать.
- Установить политики по умолчанию.
- Настроить логирование.
Девопс/инженер приложения:
- Открыть только необходимые порты для сервиса.
- Ограничить доступ к базам данных по сети.
- Автоматизировать правила в infra‑repo (Ansible/Terraform).
Инженер по безопасности:
- Провести аудит правил и логов.
- Настроить интеграцию с SIEM/лог‑агрегатором.
- Внедрить fail2ban и мониторинг попыток взлома.
Критерии приёмки
- UFW включён и активен.
- Политики по умолчанию заданы: входящие запрещены, исходящие разрешены (или другие согласованные политики).
- Все необходимые сервисы доступны с ожидаемых IP/сетей.
- Логи собираются и анализируются.
Модель принятия решений (Mermaid)
flowchart TD
A[Нужен ли внешний доступ?] -->|Да| B[Какие сервисы доступны?]
A -->|Нет| C[Закрыть входящие полностью]
B --> D{Только SSH?}
D -->|Да| E[Разрешить SSH, тестировать]
D -->|Нет| F[Разрешить нужные порты по списку]
F --> G[Ограничить по IP, если возможно]
E --> H[Включить UFW]
G --> H
C --> HЧастые ошибки и когда UFW может не подойти
- Ошибка: включение UFW на удалённом сервере без добавления правила для SSH — приводит к потере доступа.
- UFW не обеспечивает фильтрацию приложений на уровне L7 (HTTP-инспекция) — для этого нужны WAF/proxy.
- Для очень сложной балансировки и динамических политик (microsegmentation) лучше решения на уровне SDN/контейнерной сети.
Краткое руководство по миграции с iptables/nftables
- Экспортируйте текущие правила и протестируйте эквивалентные правила в UFW.
- Перенесите критичные правила по одному, проверяя доступность сервисов.
- Тестируйте в staging среде перед production.
Часто задаваемые вопросы
Как проверить, какие правила разрешают доступ по порту?
Выполните:
sudo ufw status verbose
sudo ufw status numberedКак разрешить доступ только для подсети?
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcpМожно ли управлять UFW программно?
Да — вы можете вызывать команды ufw из скриптов или применять конфигурации через инструменты управления конфигурацией (Ansible, Salt, Puppet).
Сводка
UFW — быстрый и надёжный способ настроить базовую защиту сети на Debian. Начните с корректных политик по умолчанию, обязательно оставьте доступ по SSH при удалённой настройке и тестируйте изменения. Для сложных сценариев используйте nftables/iptables или специализированные сетевые решения.
Дополнительные ресурсы: изучите логи /var/log/ufw.log и интегрируйте UFW в процессы CI/CD для повторяемости конфигурации.