02.08.2023

Настройка UFW на Linux (Ubuntu)

В Linux используется межсетевой экран под названием iptables. Для удобства конфигурирования используют различные графические оболочки. Рассмотрим одну из них — Uncomplicated Firewall (UFW).

Краткое описание

С английского языка название дословно переводится как несложный (упрощенный) брандмауэр. Особенность продукта — минимализм с графической оболочкой на основе командной строки. Если кратко, то UFW используют для базовых настроек межсетевого экрана. Он содержит необходимый минимум функций для стандартной защиты корпоративных ресурсов. Создание более сложных правил и тонкая настройка доступны в iptables.

Изначально решение разрабатывалось для операционных систем семейства Debian и Ubuntu. Дальнейшие действия выполняются под управлением Ubuntu.

Предварительная подготовка

Если UFW не установлен на серверной платформе, используем стандартную утилиту:

sudo apt-get install ufw

Второй вариант – утилита установлена, но неактивна, тогда прописываем:

sudo ufw enable

Важно! Любые действия, связанные с конфигурированием продукта, выполняются с правами суперпользователя.

После инсталляции проверим состояние программы:

sudo ufw status verbose

Скриншот №1. Проверка состояния программы

Стандартная конфигурация программы блокирует входящий трафик, но разрешает исходящий. Чтобы изменить параметры, открываем системный файл:

sudo nano /etc/default/ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing

Первая строка отвечает за блокировку, а вторая за исходящие подключения.

Настройка

UFW распределяет правила согласно профилям программ. Они хранятся по следующему пути:

/etc/ufw/applications.d

Создание нового или редактирование текущего профиля проводится администратором в ручном режиме. Для начала ознакомимся с текущими профилями:

sudo ufw app list

Просмотр подробной информации по любой записи осуществляется при помощи следующей команды:

sudo ufw app info 'name'

Где name — наименование профиля, которое заключается в одинарные кавычки.

Например, просмотрим сервис OpenSSH:

Скриншот №2. Сервис OpenSSH

Первая строка — имя новой записи в UFW. Вторая описывает заголовок, по которому профиль будет идентифицироваться. Третья содержит краткое описание сервиса (рекомендуется использовать 1-2 предложения). Последняя строка указывает порты, которые необходимо открыть для работы приложения.

Сохраняем файл и перезагружаем межсетевой экран:

ufw reload

Следующий шаг — прописываем политику для новой записи. Доступно два режима: разрешить (Allow) и запретить (Deny). Синтаксис выглядит следующим образом:

ufw <action> <name_profile>

Где action – одно из двух значений Allow или Deny, а name_profile — наименование профиля.

Операции с портами

Для открытия/закрытия портов также используется команды Allow/Deny, в зависимости от требований администратора. Синтаксис выглядит следующим образом:

sudo ufw <action> <port>/<name_protocol>

Расшифровка:

1. action — одно из двух действий: разрешить (Allow) или запретить (Deny);
2. port — цифровое имя порта, для которого применяется правило;
3. name_protocol — наименование протокола.

Если требуется указать перечень портов, используем двоеточие между начальной и конечной точкой. Альтернативный вариант — использовать имя службы, для которой создается запись. Например, откроем порт для сервиса HTTP:

sudo ufw allow http

Важно! UFW разрешает стандартный порт, который закреплен за службой. Если значение отличается от общепринятых, то создавать правило по имени сервиса нельзя — оно не активируется.

Операции с IP-адресами

Аналогично портам правила создаются правила и для IP-адресов. Синтаксис идентичен предыдущему пункту:

sudo ufw <action> from <IP-адрес>

Action – принимает значение Allow или Deny, IP-адрес – адрес оборудования, которому предоставляется/запрещается доступ к серверу.

Например, команду разрешить устройству с IP-адресом 10.68.23.15 доступ к всем портам сервера можно записать так:

sudo ufw allow from 10.68.23.15

Также доступна опция идентификации порта, например:

sudo ufw allow from 10.68.23.15 to any port 22

Добавление словосочетания to any port (name) задает конкретное значение порта, для которого доступ будет открыт. Вместо name указываем номер порта.

Если требуется создать правило для нескольких IP-адресов, используем видоизмененный синтаксис:

sudo ufw allow from 10.68.23.0/24

Операции с сетевым интерфейсом

При создании профилей также применяют имена сетевых интерфейсов. Синтаксис представлен ниже:

sudo ufw in on <имя интерфейса> to any port <порт>
sudo ufw <action> in on <name_interface>

Поле action, как и в предыдущих разделах, принимает состояние Allow и Deny, а опция name_interface отвечает за наименование сетевого интерфейса, для которого создается правило.

Для просмотра списка активных интерфейсов вводим в терминале команду:

ifconfig -a

Также доступна дополнительная опция to any port — для однозначной идентификации порта.

Удаление записей

Чтобы удалить созданное ранее правило, используем ключ delete. В общем виде команда выглядит так:

sudo ufw delete <number>

Где number — порядковый номер записи в таблице конфигурации UFW. Чтобы проставить цифровые значения для каждой строки, укажем в терминале:

sudo ufw status numbered

После этого просто указываем номер записи в таблице. Допустим:

sudo ufw delete 7

Перезагрузка не требуется.