UFW — фронтенд к Что показывает
Пример вывода:
iptables/nftables, ориентированный на простоту. Под капотом UFW управляет собственными цепочками в iptables (или nftables в режиме совместимости) и предоставляет удобный интерфейс для типовых задач: «разрешить SSH/HTTP/HTTPS, заблокировать остальное, ограничить bruteforce, разрешить доступ из подсетей и т. п.
Эта шпаргалка охватывает:
- установку, диагностику и внутреннее устройство;
- политики, правила, удаление и редактирование правил;
- работу с цепочками (в терминах UFW и iptables);
- логирование, rate limit, IPv6;
- интеграцию с Docker, 1С, веб-серверами, СУБД;
- готовые конфиги и скрипты для бэкапа/восстановления.
1. Установка и проверка статуса
# Debian/Ubuntu
sudo apt update
sudo apt install ufw
# Проверка статуса
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered
Что показывает ufw status verbose
Пример вывода:
Status: active Logging: on (medium) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere 22/tcp (v6) ALLOW IN Anywhere (v6)
- Default— политики по умолчанию для входящих/исходящих/транзитных пакетов.
- Logging — уровень логирования.
- To/Action/From — список активных правил.
2. Включение/выключение UFW
# Включить (с подтверждением)
sudo ufw enable
# Выключить
sudo ufw disable
# Перезагрузить правила
sudo ufw reload
# Сбросить все правила (осторожно!)
sudo ufw reset
⚠️ Важно: перед enable обязательно добавьте правила для SSH и других критичных сервисов, иначе можно потерять удалённый доступ.
3. Политики по умолчанию
# Рекомендуемая база для сервера
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny routed
# Или «всё разрешить, кроме явных запретов"
sudo ufw default allow incoming
sudo ufw default deny outgoing
- incoming — пакеты, адресованные локальному хосту.
- outgoing — пакеты, созданные локально.
- routed — транзитные пакеты (forward), актуально для роутеров/шлюзов.
4. Внутреннее устройство: как UFW работает с iptables/nftables
UFW не создаёт «свои цепочки» в пользовательском смысле, а управляет набором цепочек iptables:- ufw-before-input
- ufw-before-output
- ufw-before-forward
- ufw-after-input
- ufw-after-output
- ufw-after-forward
- ufw-user-input
- ufw-user-output
- ufw-user-forward
- и вспомогательные цепочки для logging, rate-limit, ICMP и т. п.
ufw allow/deny, попадают преимущественно в ufw-user-* цепочки.
Посмотреть iptables-цепочки UFW
# Показать все цепочки iptables
sudo iptables -L -n -v
#Только цепочки UFW
sudo iptables -L ufw-user-input -n -v
sudo iptables -L ufw-before-input -n -v
В режиме nftables (если используется)
В некоторых дистрибутивах UFW может работать поверх nftables через модуль совместимости. Проверка:# Посмотреть, чем управляется firewall
sudo ufw status verbose
# Если используется nftables, правила будут видны через:
sudo nft list ruleset | grep -i ufw
Для большинства задач вам не нужно лезть в iptables/nftables напрямую. Но понимание структуры помогает при отладке конфликтов с Docker, Kubernetes, 1С-серверами и другими сервисами, которые сами манипулируют firewall.
5. Добавление правил: базовые примеры
Разрешить порты/протоколы
# Разрешить SSH (порт 22/tcp)
sudo ufw allow 22/tcp
# Разрешить HTTP и HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Разрешить диапазон портов
sudo ufw allow 6000:6010/tcp
# Разрешить UDP (например, DNS)
sudo ufw allow 53/udp
# Разрешить и TCP, и UDP на порт
sudo ufw allow 53
Разрешить с конкретного IP/подсети
# Разрешить SSH только с 192.168.1.100 sudo ufw allow from 192.168.1.100 to any port 22 proto tcp # Разрешить доступ к 3306 (MySQL) только из подсети 10.0.0.0/24 sudo ufw allow from 10.0.0.0/24 to any port 3306 proto tcp # Разрешить 1С-сервер (обычно 1540-1541/tcp + 1560-1591/tcp) из подсети sudo ufw allow from 10.10.10.0/24 to any port 1540:1591 proto tcp
Запретить порты/протоколы
# Запретить доступ к порту 23 (telnet)
sudo ufw deny 23/tcp
# Запретить ICMP (ping)
sudo ufw deny proto icmp
# Запретить доступ к порту 5432 (PostgreSQL) со всего мира
sudo ufw deny 5432/tcp
Разрешить/запретить по интерфейсу
UFW не имеет прямой опции «разрешить только на eth1″, но можно комбинировать сroute/ip rule или использовать nftables/iptables напрямую. Для большинства серверных сценариев достаточно фильтрации по IP/подсети.
6. Удаление и редактирование правил
Удаление по номеру (надёжный способ)
# Показать правила с номерами
sudo ufw status numbered
# Пример вывода:
# [ 1] 22/tcp ALLOW IN Anywhere
# [ 2] 80/tcp ALLOW IN Anywhere
# [ 3] 443/tcp ALLOW IN Anywhere
# Удалить правило №2
sudo ufw delete 2
Удаление по спецификации
# Удалить ранее добавленное правило sudo ufw delete allow 22/tcp sudo ufw delete deny 23/tcp sudo ufw delete allow from 192.168.1.100 to any port 22 proto tcp
Если правило не удаляется, проверьте точное совпадение спецификации (протокол, порт, IP, подсеть).
«Редактирование» правил
UFW не поддерживает прямое редактирование правил. Чтобы изменить правило: 1. Удалить старое правило (по номеру или спецификации). 2. Добавить новое правило. Пример:# Было: разрешить SSH со всего мира sudo ufw allow 22/tcp # Нужно: разрешить SSH только из 10.0.0.0/8 sudo ufw delete allow 22/tcp sudo ufw allow from 10.0.0.0/8 to any port 22 proto tcp
7. Логирование
# Включить логирование sudo ufw logging on # Уровень логирования: off, low, medium, high, full sudo ufw logging medium # Просмотр логов sudo tail -f /var/log/ufw.log # или через journalctl sudo journalctl -u ufw -fПример записи в логе:
[UFW BLOCK] IN=eth0 OUT= MAC=... SRC=203.0.113.5 DST=192.168.1.10 ... DPT=3389
8. Просмотр и сброс правил
# Полный дамп правил (включая номера) sudo ufw status verbose sudo ufw status numbered # Сброс всех правил (осторожно!) sudo ufw resetПосле
reset UFW возвращает политики по умолчанию и удаляет все пользовательские правила.
9. Работа с приложениями (app profiles)
UFW поддерживает профили приложений, описанные в/etc/ufw/applications.d/.
# Список профилей приложений sudo ufw app list # Информация о профиле (например, 'Nginx Full') sudo ufw app info 'Nginx Full' # Разрешить приложение sudo ufw allow 'Nginx Full'
Создать свой app profile
Пример для 1С-сервера: 1. Создать файл/etc/ufw/applications.d/1c-server:
[1C-Server] title=1C:Enterprise Server description=Ports for 1C server (1540-1541, 1560-1591) ports=1540:1591/tcp2. Обновить список приложений:
sudo ufw app update 1C-Server sudo ufw app list3. Разрешить приложение:
sudo ufw allow '1C-Server'
10. Продвинутые примеры
Ограничение частоты подключений (защита от bruteforce)
# Ограничить SSH (максимум 6 попыток за 30 секунд) sudo ufw limit 22/tcp # Ограничить RDP sudo ufw limit 3389/tcp
Разрешить только определённые сервисы с определённых IP
# PostgreSQL (5432) только из 10.10.10.0/24 sudo ufw allow from 10.10.10.0/24 to any port 5432 proto tcp # RDP (3389) только с 192.168.100.50 sudo ufw allow from 192.168.100.50 to any port 3389 proto tcp # 1С-сервер только из внутренней сети sudo ufw allow from 10.0.0.0/8 to any port 1540:1591 proto tcp
IPv6
# Проверка включения IPv6 в /etc/default/ufw grep IPV6 /etc/default/ufw # Должно быть: IPV6=yes # Пример правила для IPv6 sudo ufw allow from 2001:db8::1 to any port 22 proto tcp
11. Интеграция с Docker, Kubernetes, 1С, веб-серверами
Docker
Docker сам управляет iptables/nftables для NAT и проброса портов. При использовании UFW:- UFW по умолчанию не фильтрует трафик, созданный Docker-правилами в
DOCKER-цепочках. - Для строгой изоляции нужно либо:
- отключить манипуляции Docker с iptables (
"iptables": falseв/etc/docker/daemon.json) и настроить сеть вручную, либо - использовать nftables/iptables напрямую, либо
- аккуратно согласовывать правила UFW и Docker.
- отключить манипуляции Docker с iptables (
# Разрешить доступ к портам контейнеров только из доверенных подсетей sudo ufw allow from 10.0.0.0/8 to any port 8080 proto tcp sudo ufw allow from 10.0.0.0/8 to any port 8443 proto tcpЕсли требуется жёсткая изоляция, рассмотрите переход на nftables с явным контролем
forward и nat.
Kubernetes
Kubernetes активно использует iptables/nftables для Service, NodePort, NetworkPolicy. UFW в таких окружениях обычно:- оставляют с политиками
allow outgoing,deny incoming; - разрешают порты kubelet/kube-apiserver/etc. только из доверенных сетей;
- основную фильтрацию реализуют через NetworkPolicy и CNI.
# Разрешить kubelet API только из master-нод sudo ufw allow from 10.0.0.0/24 to any port 10250 proto tcp # Разрешить NodePort диапазон (если используется) sudo ufw allow 30000:32767/tcp
1С-сервер
Типичные порты 1С:- 1540–1541/tcp — основные порты сервера 1С;
- 1560–1591/tcp — рабочие порты кластера;
- 1545/tcp — порт менеджера кластера (зависит от версии и конфигурации).
# Разрешить 1С только из внутренней сети sudo ufw allow from 10.0.0.0/8 to any port 1540:1591 proto tcp # Если используется веб-клиент 1С через Apache/Nginx sudo ufw allow 80/tcp sudo ufw allow 443/tcp
Веб-сервер (Nginx/Apache)
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw limit 22/tcp # защита от bruteforce sudo ufw enable
12. Сохранение и перенос конфигурации
Где хранятся правила UFW
Основные файлы:/etc/ufw/user.rules— правила для IPv4./etc/ufw/user6.rules— правила для IPv6./etc/ufw/ufw.conf— основной конфиг (включение, логирование, политики)./etc/default/ufw— параметры ядра (в т. ч.IPV6=yes/no).
Бэкап конфигурации
# Создать бэкап sudo mkdir -p /root/ufw-backup sudo cp -a /etc/ufw /root/ufw-backup/ufw-$(date +%F_%H%M) # Проверить бэкап ls -l /root/ufw-backup
Восстановление конфигурации
# Остановить UFW sudo ufw disable # Восстановить файлы sudo cp -a /root/ufw-backup/ufw-YYYY-MM-DD_HHMM /etc/ufw # Перезагрузить правила sudo ufw reload sudo ufw enable
Экспорт правил в человекочитаемый вид
# Дамп правил sudo ufw status verbose > ufw-rules-$(date +%F).txt sudo ufw status numbered >> ufw-rules-$(date +%F).txt
13. Скрипты для автоматизации
Скрипт быстрого бэкапа UFW
Сохраните как/usr/local/bin/ufw-backup:
#!/usr/bin/env bash
set -euo pipefail
BACKUP_DIR="/root/ufw-backup"
TIMESTAMP=$(date +%F_%H%M)
mkdir -p "${BACKUP_DIR}"
cp -a /etc/ufw "${BACKUP_DIR}/ufw-${TIMESTAMP}"
echo "UFW backup created: ${BACKUP_DIR}/ufw-${TIMESTAMP}"
Сделать исполняемым:
sudo chmod +x /usr/local/bin/ufw-backupЗапуск:
sudo ufw-backup
Скрипт восстановления из последнего бэкапа
#!/usr/bin/env bash
set -euo pipefail
BACKUP_DIR="/root/ufw-backup"
LATEST=$(ls -1d "${BACKUP_DIR}"/ufw-* | sort | tail -n1)
if [ -z "${LATEST}" ]; then
echo "No UFW backups found in ${BACKUP_DIR}"
exit 1
fi
echo "Restoring UFW from: ${LATEST}"
ufw disable
cp -a "${LATEST}" /etc/ufw
ufw reload
ufw enable
echo "UFW restored from: ${LATEST}"
Сохраните как /usr/local/bin/ufw-restore, сделайте исполняемым и используйте с осторожностью.
14. Типовые сценарии
Базовая защита веб-сервера
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw limit 22/tcp # защита от bruteforce sudo ufw enable
Сервер баз данных (доступ только из внутренней сети)
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow from 10.0.0.0/8 to any port 3306 proto tcp # MySQL sudo ufw allow from 10.0.0.0/8 to any port 5432 proto tcp # PostgreSQL sudo ufw allow 22/tcp # SSH (в продакшене ограничить по IP!) sudo ufw enable
1С-сервер в корпоративной сети
sudo ufw default deny incoming sudo ufw default allow outgoing # SSH только с админских подсетей sudo ufw allow from 10.10.10.0/24 to any port 22 proto tcp # 1С-порты из внутренней сети sudo ufw allow from 10.0.0.0/8 to any port 1540:1591 proto tcp # Веб-клиент 1С (если используется) sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
Почтовый сервер (SMTP/IMAP)
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp # SSH sudo ufw allow 25/tcp # SMTP sudo ufw allow 465/tcp # SMTPS sudo ufw allow 587/tcp # Submission sudo ufw allow 993/tcp # IMAPS sudo ufw allow 995/tcp # POP3S sudo ufw limit 22/tcp sudo ufw enable
15. Частые ошибки и решения
| Проблема | Решение |
|---|---|
После ufw enable пропал SSH |
Добавить ufw allow 22/tcp до включения; при потере доступа — консоль/IPMI |
| Правила не применяются | Проверить, что UFW включён: ufw status; проверить порядок правил через ufw status numbered |
| Конфликт с iptables/nftables (Docker, Kubernetes) | Не редактировать iptables напрямую; согласовывать правила UFW и сторонних систем; при сложной сети — переход на nftables |
| Не работает IPv6 | Проверить IPV6=yes в /etc/default/ufw; перезагрузить UFW; добавить правила для IPv6 |
| UFW «игнорирует» правила для Docker-контейнеров | Помнить, что Docker обходит UFW через свои цепочки; ограничивать доступ по IP/подсети или использовать nftables напрямую |
| Слишком много логов | Снизить уровень логирования: ufw logging low или отключить для отдельных правил через правку /etc/ufw/user.rules |
16. Отладка и диагностика
# Полный статус ufw status verbose # Правила с номерами ufw status numbered # Логи в реальном времени journalctl -u ufw -f tail -f /var/log/ufw.log # Проверка, какие цепочки iptables затронуты iptables -L -n -v | grep -E 'ufw|DROP|ACCEPT' # Тест правил с другого хоста nmap -p 22,80,443 <ip-сервера>
17. Быстрые команды (шпаргалка в одну строку)
# Статус ufw status verbose # Включить/выключить ufw enable && ufw status # Добавить правило ufw allow 22/tcp # Удалить правило по номеру ufw delete 3 # Логирование ufw logging on && tail -f /var/log/ufw.log # Бэкап mkdir -p /root/ufw-backup && cp -a /etc/ufw /root/ufw-backup/ufw-$(date +%F)
18. Готовые конфиги для копирования
Минимальный безопасный сервер
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp sudo ufw limit 22/tcp sudo ufw enable
Веб-сервер с 1С-фронтендом
sudo ufw default deny incoming sudo ufw default allow outgoing # SSH только с админской подсети sudo ufw allow from 10.10.10.0/24 to any port 22 proto tcp # Веб sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 1С-порты из корпоративной сети sudo ufw allow from 10.0.0.0/8 to any port 1540:1591 proto tcp sudo ufw limit 22/tcp sudo ufw enable
Рубрики: Linux