🖧 Как настроить брандмауэр UFW в системах Linux

Мануал

Это руководство объясняет, что такое UFW, как установить UFW на Linux и как настроить брандмауэр UFW в различных операционных системах Linux.

Введение

Безопасность – это серьезное дело.

Работаете ли вы с операционной системой Linux в центрах обработки данных или на своем ноутбуке, вы должны защитить свою операционную систему от всех возможных угроз.

На самом деле, серверы, работающие в корпоративной среде, будут хорошо защищены.

Большинство корпоративных компаний инвестируют миллионы долларов в защиту своей инфраструктуры.

Там будет отдельная сетевая команда, множество брандмауэров, команда безопасности для защиты вашей среды и серверов Linux.

Этого не произойдет, если вы используете Linux на своих настольных компьютерах или серверах.

Вы должны знать, как защитить свои Linux-машины с помощью правильных инструментов.

Одним из таких инструментов является UFW.

Что такое UFW?

UFW, расшифровывается как Uncomplicated Firewall, это программа межсетевого экрана, которая по умолчанию предустановлена в дистрибутивах на базе Ubuntu.

Почему UFW, а не iptables?

Вы можете задаться этим вопросом.

Если вы еще не знаете, Netfilter – это система фильтрации пакетов, поставляемая с ядром Linux, а iptables используется для управления сетевыми фильтрами с помощью набора команд.

Освоение iptables может занять много времени и оказаться сложной задачей.

Чтобы упростить управление брандмауэром, было создано множество дополнений к iptables.

UFW является одним из них.

UFW является интерфейсом командной строки для управления iptables.

Он обеспечивает основу для управления и манипулирования брандмауэром netfilter.

UFW доступен по умолчанию во всех установках Ubuntu после версии 8.04 LTS.

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

О нем мы расскажем в отдельном руководстве.

В этой статье мы сосредоточимся на использовании ufw из командной строки.

Без лишних слов, давайте посмотрим, как установить и настроить брандмауэр UFW в Linux.

1. Установка 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

1.1. Включение, запуск и остановка службы UFW

В системах на базе Debian демон UFW будет запущен и включен автоматически.

Выполните следующую команду, чтобы проверить состояние службы UFW:

$ systemctl status ufw

Пример вывода:

● ufw.service - Uncomplicated firewall
     Loaded: loaded (/usr/lib/systemd/system/ufw.service; enabled; vendor prese>
     Active: active (exited) since Mon 2021-07-05 20:08:01 IST; 44s ago
       Docs: man:ufw(8)
             man:ufw-framework(8)
             file://usr/share/doc/ufw/README
    Process: 21690 ExecStart=/usr/libexec/ufw/ufw-init start (code=exited, stat>
   Main PID: 21690 (code=exited, status=0/SUCCESS)
        CPU: 169ms

Jul 05 20:08:01 itsecforu systemd[1]: Starting Uncomplicated firewall...
Jul 05 20:08:01 itsecforu systemd[1]: Finished Uncomplicated firewall.

Другой способ – проверить, включен ли и активен ли сервис UFW:

$ systemctl is-enabled ufw
enabled
$ systemctl is-active ufw
active

Если служба UFW не запускается автоматически после установки, выполните следующую команду для запуска службы UFW:

$ sudo systemctl start ufw

Ufw также должен быть включен для автоматического запуска между перезагрузками системы.

$ sudo systemctl enable ufw

Или вы можете объединить обе команды в одну, чтобы включить и запустить службу UFW одним движением, как показано ниже:

$ sudo systemctl enable --now ufw

Чтобы остановить службу UFW, просто выполните команду:

$ sudo systemctl stop ufw

3. Настройка брандмауэра с помощью UFW в Linux

3.1. Получение помощи

Если вы новичок в UFW, первое, что нужно сделать после его установки, это обратиться к разделу справки и man-странице UFW, чтобы получить базовое представление об использовании UFW.

$ ufw --help
$ man ufw

Если вы забыли синтаксис или вам нужна справка по определенной функции ufw, эти две команды будут очень кстати.

3.2. Установка правил по умолчанию

Используя UFW, вы можете создавать правила брандмауэра (или политики) для разрешения или запрета определенной службы.

С помощью этих политик вы указываете UFW, какие порты, службы, IP-адреса и интерфейсы должны быть разрешены или запрещены.

Существуют политики по умолчанию, которые поставляются с ufw.

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

ВАЖНО: Если вы настраиваете ufw на удаленном сервере, убедитесь, что вы разрешили порт или службу ssh перед включением брандмауэра ufw.

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

Поэтому если вы не настроили правила для разрешения SSH, вы будете заблокированы в удаленной системе и не сможете войти в нее.

Этого не произойдет, если вы запустите ufw на локальной системе.

Политики по умолчанию определяются в файле /etc/default/ufw.

Вот содержимое этого файла:

 

В качестве альтернативы можно использовать команду ufw allow, чтобы установить политики по умолчанию для входящих и исходящих команд:

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

3.2.1. Проверка состояния правил межсетевого экрана 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 status verbose

Вывод:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (SSH)               ALLOW IN    Anywhere                  
224.0.0.251 5353/udp (mDNS) ALLOW IN    Anywhere                  
22/tcp (SSH (v6))          ALLOW IN    Anywhere (v6)             
ff02::fb 5353/udp (mDNS)   ALLOW IN    Anywhere (v6)

Чтобы просмотреть нумерованный формат, выполните команду:

$ sudo ufw status numbered

3.2.2. Добавление правил

Давайте на примере SSH продемонстрируем, как добавлять правила брандмауэра с помощью команды ufw.
Посмотрите на приведенные ниже команды:
$ sudo ufw allow ssh
$ sudo ufw allow 22
$ sudo ufw allow 22/tcp
$ sudo ufw allow 2222/tcp

Все команды служат одной цели.

[ 1] – В первой команде я разрешаю весь доступ к службе ssh. UFW знает, что по умолчанию ssh прослушивает порт 22. Поэтому, когда вы используете разрешить службу ssh, он также применит правило для порта 22.
[ 2 ] – Во второй команде я явно указываю разрешить входящие соединения для порта 22.
[ 3 ] – Третья команда аналогична второй. Она разрешает любой доступ к порту tcp 22. Поддерживаются оба протокола TCP и UDP.
[ 4 ] – В четвертой команде я разрешаю пользовательскому порту ssh (т.е. 2222) принимать входящие соединения.

Вы можете использовать эти четыре команды не только для ssh, но и для любых служб и портов.

Например, если вы хотите подключиться к PostgreSQL, работающему на порту 5433, то правило должно быть добавлено следующим образом.

$ sudo ufw allow 5433

Аналогично, мы можем использовать команду ufw deny для отклонения входящих соединений:

$ sudo ufw deny 5433

Эта команда запретит трафик на порту 5433.

3.2.3. Удаление правил межсетевого экрана UFW

Чтобы удалить правило или политику, вы можете использовать команду ufw delete.

Например, если вы больше не хотите разрешать HTTP-трафик, просто выполните команду:

sudo ufw delete allow 80

3.2.4. Включение, отключение и перезагрузка правил брандмауэра UFW

Это отличается от включения и запуска демона UFW.

Запуск системного блока 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 будет по-прежнему запущен и включен при перезагрузке.

После добавления любой политики перезагрузите ufw, чтобы политика вступила в силу, используя команду :

$ sudo ufw reload

3.2.5. Добавление политики для диапазона портов

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

$ sudo ufw allow 8000:8080/tcp
$ sudo ufw deny 8000:8080/tcp

3.2.6. Добавление политики для определенных IP-адресов, подсетей и портов

С помощью ufw можно создавать более тонкие правила.

Допустим, если вы хотите, чтобы к вашему серверу можно было подключиться (ssh’ed) только с определенного IP, вы можете сделать это, добавив следующее правило.

$ sudo ufw allow from 192.168.156.2
$ sudo ufw allow from 192.168.156.2 to any port 2222

Первая команда позволяет указанному IP подключаться на основе открытых портов.

Вторая команда указывает, что пользователь может подключиться к порту 2222 только с адреса 192.168.156.2.

Чтобы разрешить группе IP из одной подсети подключаться к ssh, вы можете использовать подсеть при добавлении правила, разрешая всем IP этой подсети подключаться к порту 2222.

$ sudo ufw allow from 192.168.156.1/24 to any port 2222

3.2.7. Добавление политики сетевого интерфейса

Вы также можете создавать политики на основе сетевых интерфейсов.

Следующая команда создаст политику приема соединений для сетевого интерфейса en01 на порт 2222.

$ sudo ufw allow in on en01 to any port 2222

3.2.8. Тестирование правил без их применения с помощью опции dry-run

UFW имеет опцию –dry-run для тестирования правил без их фактического применения.

Например, при открытии порта SSH будет применено следующее:

$  sudo ufw --dry-run allow ssh
Как видно из приведенного выше результата, команда ufw выводит только результирующие правила, но не применяет их, когда мы добавляем опцию –dry-run.
Это удобно, когда вы хотите протестировать какие-либо политики брандмауэра.

4. Какое правило получает приоритет?

Приоритет важен, когда вы создаете несколько правил для одной и той же службы/порта.
Политики получают приоритет в порядке их создания.
Выполните следующую команду, которая выдаст вам политику вместе с ее приоритетом.
$ 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

5. Ведение логов UFW

Логи – лучший вариант, если что-то пошло не так.

Чтобы отключить ведение журнала UFW, выполните следующую команду:

$ sudo ufw logging off
Logging disabled

Чтобы включить ведение логов UFW, выполните команду:

$ sudo ufw logging on
Logging enabled

Существует четыре уровня ведения логов, а именно: lowmediumhigh, и 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

6. Профили приложений

Когда вы устанавливаете какие-либо пакеты с помощью менеджера пакетов (например, apt или pacman), в ufw будет создан профиль приложения, определяющий правила для этого пакета.

Например, если вы устанавливаете сервер OpenSSH с помощью apt, то профиль будет создан для порта 22.

Все профили приложений хранятся в каталоге /etc/ufw/applications.d.

Чтобы получить список профилей приложений, выполните следующую команду:

$ sudo ufw app list

Пример вывода:

Available applications:
CUPS
OpenSSH

Это тестовая машина.

Я установил только 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

7. Сброс брандмауэра 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'

Когда вы выполняете эту команду, ваши текущие правила будут сохранены перед сбросом к профилю по умолчанию.

Заключение

В этом руководстве мы рассмотрели, что такое UFW, как установить и настроить брандмауэр UFW в Linux с помощью примеров команд.

Теперь настала ваша очередь протестировать ufw на вашей машине.

Я рекомендую протестировать ufw на любой виртуальной машине, прежде чем внедрять его на вашем компьютере или сервере.

Ufw также имеет множество графических интерфейсов.

Мы обсудим это в отдельной статье в ближайшее время.

Спонсор статьи –https://svcnet.ru

Добавить комментарий

  1. guest

    Где-то видел, что _перед_ установкой и включением ufw настоятельно рекомендуется полностью остановить iptables на постоянной основе, тк они могут конфликтовать. Напишите, пожалуйста, верно ли это и если да, то как это сделать.

    Ответить
    1. cryptoparty автор

      Первый раз слышу 🙂

      Ответить