В данное статье ознакомимся, что такое UFW, как установить UFW на Linux и как настроить брандмауэр UFW в различных операционных системах Linux.
UFW (Uncomplicated Firewall) — это программа межсетевого экрана, которая по умолчанию предустановлена в дистрибутивах на базе Ubuntu.
1. Iptables VS UFW
UFW является интерфейсом командной строки для управления iptables.
Он обеспечивает основу для управления и манипулирования брандмауэром netfilter.
UFW доступен по умолчанию во всех установках Ubuntu после версии 8.04 LTS.
Существует также графический интерфейс для UFW под названием Gufw.
2. Установка UFW на Linux
UFW поставляется предустановленным в большинстве дистрибутивов на базе Debian и Arch.
Чтобы проверить, установлен UFW или нет, выполните следующую команду:
$ which ufw /usr/sbin/ufw
$ ufw version ufw 0.36 Copyright 2008-2015 Canonical Ltd.
Если он не установлен в вашем дистрибутиве, вы можете установить его с помощью менеджера пакетов по умолчанию вашего дистрибутива.
Чтобы установить UFW в Alpine Linux, выполните:
$ sudo apk add ufw
Установка UFW в Arch Linux и его разновидности, такие как EndeavourOS и Manjaro Linux:
$ sudo pacman -S ufw
Установка ufw в Debian, Ubuntu и их производных:
$ sudo apt update $ sudo apt install ufw
Установка UFW в Fedora:
$ sudo dnf install ufw
UFW доступен в репозитории [EPEL] для операционных систем Enterprise Linux, таких как RHEL, CentOS, AlmaLinux и Rocky Linux.
Включите репозиторий [EPEL] и установите UFW в RHEL, CentOS, AlmaLinux, Rocky Linux, как показано ниже:
$ sudo dnf install epel-release
$ sudo dnf install ufw
Установка UFW на openSUSE:
$ sudo zypper install ufw
3. Включение, запуск и остановка службы UFW
В системах на базе Debian демон UFW обычно запущен и включен автоматически.
Выполните следующую команду, чтобы проверить состояние службы UFW:
$ systemctl status ufw
Другой способ – проверить, включен ли и активен ли сервис UFW:
$ systemctl is-enabled ufw $ systemctl is-active ufw
Выполните следующую команду для запуска службы UFW в автоматическом режиме после запуска системы:
$ sudo systemctl enable ufw
4. Настройка брандмауэра UFW в Linux
Политики по умолчанию определяются в файле /etc/default/ufw.
Можно использовать команду ufw allow, чтобы установить политики по умолчанию для входящих и исходящих команд:
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
Данные команды разрешают все исходящие соединения и запрещают все входящие подключения к серверу. Изначально, рекомендуется проверить, какие порты у вас уже открыты.
Добавление правил
Разрешим доступ к службе ssh. UFW знает, что по умолчанию ssh прослушивает порт 22.
$ sudo ufw allow ssh
Данная команда аналогична первой указываем разрешить входящие соединения для порта 22 по TCP и UDP портам.
$ sudo ufw allow 22
Командой ниже разрешаем подключение только по порту 22 TCP протоколу.
$ sudo ufw allow 22/tcp
Например, если вы хотите подключиться к PostgreSQL, работающему на порту 5433, то правило должно быть добавлено следующим образом.
$ sudo ufw allow 5433
Аналогично, мы можем использовать команду ufw deny для отклонения входящих соединений:
$ sudo ufw deny 5433
Эта команда запретит трафик на порту 5433.
Удаление правил межсетевого экрана UFW
Чтобы удалить правило или политику, вы можете использовать команду ufw delete.
Например, если вы больше не хотите разрешать HTTP-трафик, просто выполните команду:
sudo ufw delete allow 80
Добавление политики для диапазона портов
Вы можете добавить политику для диапазона портов вместо того, чтобы создавать политику для одного порта:
$ sudo ufw allow 8000:8080/tcp
Добавление политики для определенных IP-адресов, подсетей и портов
С помощью ufw можно создавать более тонкие правила.
Допустим, если вы хотите, чтобы к вашему серверу можно было подключиться только с определенного IP, вы можете сделать это, добавив следующее правило.
$ sudo ufw allow from 192.168.156.2 to any port 22
Добавление политики сетевого интерфейса
Вы также можете создавать политики на основе сетевых интерфейсов.
Следующая команда создаст политику входящих подключений для сетевого интерфейса en01 на порт 22.
$ sudo ufw allow in on en01 to any port 22
Тестирование правил без их применения с помощью опции dry-run
UFW имеет опцию –dry-run для тестирования правил без их фактического применения.
Например, при открытии порта SSH будет применено следующее:
$ sudo ufw --dry-run allow ssh
Приоритет важен, когда вы создаете несколько правил для одной и той же службы/порта.
5. Приоритет правил UFW
Политики получают приоритет в порядке их создания.
Выполните следующую команду, которая выдаст вам политику вместе с ее приоритетом.
$ sudo ufw status numbered
Пример вывода:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 2222 ALLOW IN Anywhere
[ 3] 2222 ALLOW IN 192.168.156.2
[ 4] 2222 DENY IN 192.168.157.0/24
[ 5] 22 (v6) ALLOW IN Anywhere (v6)
[ 6] 2222 (v6) ALLOW IN Anywhere (v6)
Посмотрите на [ 4 ] в приведенном выше выводе.
Любое подключение к порту 2222 из подсети 192.168.157.0/24 должно быть отброшено.
Но когда я попытаюсь подключиться с любой машины из подсети, соединение будет разрешено, поскольку высокий приоритет был присвоен [ 2 ].
Чтобы отменить такое поведение, необходимо создать правила с приоритетом.
Вы можете удалить существующее правило и добавить новое правило с приоритетом и перезагрузить службу.
$ sudo ufw delete 4 Deleting: deny from 192.168.157.0/24 to any port 2222 Proceed with operation (y|n)? y Rule deleted
$ sudo ufw insert 2 deny from 192.168.157.0/24 to any port 2222 Rule inserted
$ sudo ufw reload Firewall reloaded
$ sudo ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 2222 DENY IN 192.168.157.0/24 [ 3] 2222 ALLOW IN Anywhere [ 4] 2222 ALLOW IN 192.168.156.2 [ 5] 22 (v6) ALLOW IN Anywhere (v6) [ 6] 2222 (v6) ALLOW IN Anywhere (v6)
Посмотрите на приведенный выше результат.
Приоритет переназначен на [ 2 ] и теперь, если я попытаюсь подключиться к порту 2222 с адреса 192.168.157.0/24, мое соединение будет отклонено.
$ sudo ufw logging off Logging disabled
6. Включение, отключение и перезагрузка правил брандмауэра UFW
UFW имеет специальные команды для включения, отключения и перезагрузки правил брандмауэра.
Чтобы правила вступили в силу, необходимо выполнить следующую команду:
$ sudo ufw enable Firewall is active and enabled on system startup
Как я уже упоминал, используйте следующую команду для просмотра состояния правил брандмауэра UFW:
$ sudo ufw status
Вывод:
Status: active To Action From -- ------ ---- SSH ALLOW Anywhere 224.0.0.251 mDNS ALLOW Anywhere SSH (v6) ALLOW Anywhere (v6) ff02::fb mDNS ALLOW Anywhere (v6)
Чтобы отключить правила брандмауэра, выполните команду:
$ sudo ufw disable Firewall stopped and disabled on system startup
После добавления любой политики перезагрузите ufw, чтобы политика вступила в силу, используя команду :
$ sudo ufw reload
7. Ведение логов UFW
Логи – лучший вариант, если что-то пошло не так.
Чтобы отключить ведение журнала UFW, выполните следующую команду:
$ sudo ufw logging off Logging disabled
Чтобы включить ведение логов UFW, выполните команду:
$ sudo ufw logging on Logging enabled
Существует четыре уровня ведения логов, а именно: low, medium, high, и full.
В зависимости от выбранного уровня логи будут генерироваться в файл /var/log/ufw.log.
По умолчанию уровень логов будет low
Вы можете использовать приведенную ниже команду для установки нужного уровня:
$ sudo ufw logging [ high | medium | Full | Low ]
Чтобы проверить состояние ведения журнала и уровень логов, выполните команду ufw status и найдите запись о ведении журнала.
$ sudo ufw status verbose Status: active Logging: on (high) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip
8. Профили приложений
Когда вы устанавливаете какие-либо пакеты с помощью менеджера пакетов (например, apt или pacman), в ufw будет создан профиль приложения, определяющий правила для этого пакета.
Например, если вы устанавливаете сервер OpenSSH с помощью apt, то профиль будет создан для порта 22.
Все профили приложений хранятся в каталоге /etc/ufw/applications.d.
Чтобы получить список профилей приложений, выполните следующую команду:
$ sudo ufw app list
Пример вывода:
Available applications: CUPS OpenSSH
Чтобы получить подробную информацию об этом профиле и о том, какую политику он применяет, выполните следующую команду:
$ sudo ufw app info 'OpenSSH'
Пример вывода:
Profile: OpenSSH Title: Secure shell server, an rshd replacement Description: OpenSSH is a free implementation of the Secure Shell protocol. Port: 22/tcp
9. Сброс брандмауэра UFW к политике по умолчанию
Если вы хотите очистить все созданные вами правила и сбросить их к политике по умолчанию, вы можете сделать это, выполнив команду ufw reset.
$ sudo ufw reset
Пример вывода:
Resetting all rules to installed defaults. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210705_131655' Backing up 'before.rules' to '/etc/ufw/before.rules.20210705_131655' Backing up 'after.rules' to '/etc/ufw/after.rules.20210705_131655' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210705_131655' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210705_131655' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210705_131655'
Когда вы выполняете эту команду, ваши текущие правила будут сохранены перед сбросом к профилю по умолчанию.
10. Краткий сборник команд UFW для настройки
Основные команды:
- ufw default deny incoming – запретить все входящие соединения (состояние по умолчанию).
- ufw default allow outgoing – разрешить все исходящие соединения (состояние по умолчанию).
- ufw allow ssh – разрешить входящие соединения SSH через порт 22, например для управления удаленным сервером.
- ufw allow port_number – указать порт для входящих соединений.
- ufw enable – включить брандмауэр.
- ufw status – проверка состояния брандмауэра и ufw status verbose – просмотр всех установленных правил.
- ufw allow http или ufw allow 80 – разрешить входящие соединения с незашифрованных серверов через HTTP.
- ufw allow https или ufw allow 443 – разрешить входящие подключения с незашифрованных серверов по HTTP.
- ufw allow port_number:port_number/tcp и ufw allow port_number:port_number/udp – разрешает диапазон портов с указанными протоколами TCP/UDP.
- ufw allow from your_ip_address – разрешить подключения с указанного IP. Можно добавить к любому порту port_number, чтобы направить IP на определенный порт.
- ufw deny http – запрет HTTP-соединений и ufw deny from your_ip_address – запрет всех соединений с определенного IP.
- ufw status numbered – создать пронумерованный список правил брандмауэра.
- ufw delete – удалить правила с помощью пронумерованного списка или правила allow (например, ufw delete allow http).
- ufw disable – деактивация всех созданных правил.
- ufw reset – отключить UFW и удалить все созданные правила.