Защита сервера в Ubuntu 22.04 начинается с правильной настройки брандмауэра. UFW позволяет легко управлять входящими и исходящими подключениями. Рассказываем, как открыть порты и ограничить доступ по IP, как создавать правила и работать с профилями приложений.
Брандмауэр — неотъемлемая часть защиты любой системы, и Ubuntu 22.04 предлагает для этого мощный встроенный инструмент: Uncomplicated Firewall (UFW). Это интерфейс для iptables, который упрощает управление сетевым трафиком, заменяя сложные команды iptables на интуитивно понятные правила. UFW контролирует входящие и исходящие соединения, блокируя неавторизованный доступ и снижая риски атак.
Из этой статьи вы узнаете, как включить и настроить UFW на Ubuntu 22.04 для разных сценариев — от базовой защиты домашнего сервера до тонкой настройки корпоративной инфраструктуры.
Установка и активация брандмауэра
В Ubuntu 22.04 UFW предустановлен, но если его нет, выполните:
apt update
apt install ufw
Первая команда обновляет список доступных пакетов, а вторая — устанавливает пакет брандмауэра. После этого он будет установлен, но ещё не активен.
Важно!
Эта и все последующие команды выполняются с sudo или от имени root-пользователя.
Если вы настраиваете брандмауэр на удалённом сервере, то сначала разрешите SSH-подключения, и только после этого активируйте его. Это нужно, чтобы не потерять доступ, так как UFW с дефолтными настройками блокирует весь входящий трафик.
ufw allow ssh
Так вы откроете 22 порт для TCP. Если SSH работает на нестандартном порту (например, 2222), укажите его явно:
ufw allow 2222/tcp
Затем активируйте брандмауэр:
ufw enable
После этого UFW начнёт блокировать весь трафик, за исключением явно разрешённого в правилах. Проверка статуса службы:
ufw status verbose
Вывод будет содержать Status: active (что подтверждает работу брандмауэра) и список правил.
Список текущих правил
По умолчанию в UFW все исходящие соединения разрешены, а все входящие запрещены, но мы можем задать правила, которые будут применяться выборочно по определённым признакам.
Разрешение доступа
Чтобы открыть порт по протоколу:
ufw allow 80/tcp # HTTP-трафик
Где:
- allow — разрешает трафик;
- 80/tcp — порт 80 с протоколом TCP. Для HTTPS — 443/tcp, для UDP укажите 80/udp.
Кроме порта можно использовать имена служб из /etc/services. Чтобы разрешить HTTP-трафик:
ufw allow http
Запрет соединений
Точно так же можно задать и блокировку:
ufw deny 23/tcp # Запрет Telnet
Удаление правил и сброс настроек
Если вы создали правило, которое больше не актуально, его можно удалить. Посмотрите список правил с номерами и найдите нужное:
ufw status numbered
Удалите его по номеру в списке:
ufw delete 2 # Удалит правило №2 (в выводе numbered)
Если правила настроены некорректно, сбросьте настройки:
ufw reset # Отключит брандмауэр и сотрёт все правила
Настройка для конкретных IP и подсетей
Чтобы упростить настройку доступа для популярных сервисов, UFW поддерживает профили приложений — готовые наборы правил для Apache, OpenSSH и других служб. Их можно использовать вместо ручного ввода портов и протоколов.
Разрешение по IP
Файрвол может разрешать подключение с доверенных IP. Пример для веб-сервера, доступного только из локальной сети 192.168.1.0/24:
ufw allow from 192.168.1.0/24 to any port 80 proto tcp
Разбор команды:
- from 192.168.1.0/24 — исходная подсеть,
- to any — разрешение доступа к любому IP сервера,
- port 80 proto tcp — порт и протокол.
Блокировка по IP
Запретите подключения с подозрительного адреса:
ufw deny from 203.0.113.5
Приоритет правил
В UFW (как и в большинстве брандмауэров) правила обрабатываются сверху вниз, в том порядке, в котором они добавлены.
Это означает следующее:
- Важно, в каком порядке вы добавляете правила! Каждое новое правило (если не указан его номер) попадает в конец списка.
- Первое совпавшее правило определяет судьбу пакета.
- Как только трафик соответствует условиям правила, дальнейшие проверки прекращаются.
- Правила, расположенные выше, имеют приоритет над нижними.
Если разрешающее правило находится выше запрещающего, то трафик, подпадающий под оба условия, будет разрешён. И наоборот: если запрещающее правило расположено выше разрешающего, трафик будет заблокирован, даже если ниже есть разрешение.
Как разрешить доступ для части диапазона
Допустим, вы хотите разрешить доступ с IP 192.168.1.10 и запретить всю подсеть 192.168.1.0/24.
Правильная настройка:
ufw allow from 192.168.1.10 # Правило 1: разрешение
ufw deny from 192.168.1.0/24 # Правило 2: запрет
Что произойдёт при попытке соединения: трафик с 192.168.1.10 совпадёт с первым правилом и будет разрешён. Остальные адреса из 192.168.1.0/24 попадут под второе правило и будут заблокированы.
Если же поменять порядок:
ufw deny from 192.168.1.0/24 # Правило 1: запрет
ufw allow from 192.168.1.10 # Правило 2: разрешение
То трафик с 192.168.1.10 сначала совпадёт с запретом для подсети и будет блокироваться. Разрешающее правило ниже не сработает, так как проверка прекратится после первого совпадения.
Доступ для определённых портов
Если нужно закрыть порт 22 (SSH), но сделать исключение для IP-адреса 203.0.113.5, то правильная настройка:
ufw allow from 203.0.113.5 to any port 22 # Разрешение
ufw deny 22 # Запрет
В итоге трафик с 203.0.113.5 на порт 22 разрешён, а все остальные подключения на этот порт запрещены. Если задать правила в обратном порядке, то любой трафик на порт 22 сначала попадёт под запрет. Разрешение не будет работать, так как проверка остановится на первом правиле.
Как управлять порядком правил
Посмотрите текущие правила. В выводе они будут пронумерованы:
ufw status numbered
Вы увидите:
Status: active
To Action From
-- ------ ----
[1] 22/tcp ALLOW IN 203.0.113.5
[2] 22/tcp DENY IN Anywhere
Чтобы изменить очерёдность, удалите правило и задайте его заново, указав позицию:
ufw delete 2 # Удалить правило No2
ufw insert 1 deny 22 # Вставить запрет на позицию 1
Теперь порядок станет:
[1] 22/tcp DENY IN Anywhere
[2] 22/tcp ALLOW IN 203.0.113.5
В результате SSH будет запрещён для всех, кроме 203.0.113.5.
Рекомендации. Нижние правила не перезаписывают верхние, если трафик уже обработан. Всегда размещайте узкие (специфичные) правила и исключения выше широких (общих), чтобы обеспечить корректную работу брандмауэра. Порядок добавления правил критичен: ошибка может привести к блокировке легитимного трафика или, наоборот, к открытию уязвимостей.
Таким образом:
- Разрешение для конкретного IP → выше запрета для всей подсети.
- Разрешение для порта → выше глобального запрета.
Проверяйте порядок через:
ufw status numbered
и тестируйте правила перед применением. Используйте telnet или nmap, чтобы проверить доступность портов:
nmap -p 22 ваш_сервер # Проверка SSH
Работа с приложениями
Предустановленные профили
UFW, установленный через пакетный менеджер, уже включает в себя профили для некоторых служб. Они хранятся в:
/etc/ufw/applications.d
Посмотрите список:
ufw app list
Вывод:
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Например, Apache Full открывает порты 80 (HTTP) и 443 (HTTPS). Чтобы активировать его, выполните:
ufw allow 'Apache Full'
Одинарные кавычки обязательны здесь и в любом другом названии профиля, которое содержит пробелы.
Чтобы запретить:
ufw deny 'имя'
Чтобы просмотреть информацию по конкретному профилю:
ufw app info 'имя'
Создание пользовательских профилей приложений
Допустим, вы запустили кастомный сервис на порту 8080. Создайте файл профиля:
nano /etc/ufw/applications.d/myapp
Добавьте конфигурацию:
[MyApp]
title=Custom Application
description=TCP port 8080 for custom service
ports=8080/tcp
Обновите список профилей:
ufw app update MyApp
Разрешите трафик:
ufw allow 'MyApp'
Настройка политик по умолчанию
UFW позволяет задать глобальные правила для необработанного трафика. Помните, что они должны находиться в конце списка:
ufw default deny incoming # Блокировать все входящие соединения, кроме разрешённых
ufw default allow outgoing # Разрешить серверу инициировать все исходящие соединения (обновления, запросы к API)
Расширенные возможности
Логирование
Включите запись блокируемых соединений:
ufw logging on
Логи сохраняются в:
/var/log/ufw.log
Возможные уровни детализации:
- low — минимальная информация,
- high — подробные данные (настройка в /etc/ufw/ufw.conf).
Разрешение пересылки (форвардинга)
Forwarding позволяет перенаправлять входящий трафик с одного порта на другой. Это нужно, если у системы несколько сетевых интерфейсов и она пересылает пакеты между ними: для маскировки внутренних IP, перенаправления портов, VPN-серверам. В примере разрешим передачу пакетов через систему на порт 8080:
ufw route allow proto tcp from any to any port 8080
Эта команда разрешит TCP-трафик через систему на порт 8080:
- route allow — указывает, что правило применяется к трафику, проходящему через систему (форвардинг), а не к трафику, направленному непосредственно на сам хост. Это актуально, если система работает как роутер, шлюз или выполняет NAT.
- proto tcp — правило действует только для TCP-протокола.
- from any to any — разрешает трафик от любого источника (IP/сеть) к любому получателю (IP/сеть).
- port 8080 — применяется к трафику, направленному на указанный порт (порт назначения).
Форвардинг трафика при этом должен быть включён в системе:
sudo sysctl -w net.ipv4.ip_forward=1
Если нужна более тонкая настройка, то придётся вручную настраивать правила iptables (в файле /etc/ufw/before.rules).
Завершив настройку, перезагрузите UFW:
ufw reload
Заключение

UFW в Ubuntu 22.04 — это просто и эффективно: базовую защиту можно настроить за 15 минут. Брандмауэр интегрирован с iptables и позволяет гибко настроить профили приложений, но для сложных сценариев придётся задавать правила iptables вручную.
Не забывайте следующее:
- Всегда тестируйте правила перед применением в продакшне (production).
- Регулярно обновляйте UFW командой «apt upgrade ufw».
- Используйте логи для анализа аномалий.
Читайте в блоге:
- Как назначить статический IP-адрес в Ubuntu 22.04
- Установка и настройка Apache на Ubuntu 22.04 LTS и Debian 12
- Как защитить Apache с помощью Let's Encrypt в Ubuntu 20.04 и 22.04