Это руководство объясняет, что такое UFW, как установить UFW на Linux и как настроить брандмауэр UFW в различных операционных системах Linux.
На самом деле, серверы, работающие в корпоративной среде, будут хорошо защищены. Большинство корпоративных компаний инвестируют миллионы долларов в защиту своей инфраструктуры. Там будет отдельная сетевая команда, множество брандмауэров, команда безопасности для защиты вашей среды и серверов Linux. Этого не произойдет, если вы используете Linux на своих настольных компьютерах или серверах. Вы должны знать, как защитить свои Linux-машины с помощью правильных инструментов. Одним из таких инструментов является UFW.
Чтобы проверить, установлен UFW или нет, выполните следующую команду:
Если он не установлен в вашем дистрибутиве, вы можете установить его с помощью менеджера пакетов по умолчанию вашего дистрибутива.
Чтобы установить UFW в Alpine Linux, выполните:
Установка UFW в Arch Linux и его разновидности, такие как EndeavourOS и Manjaro Linux:
Установка ufw в Debian, Ubuntu и их производных:
Установка UFW в Fedora:
UFW доступен в репозитории [EPEL] для операционных систем Enterprise Linux, таких как RHEL, CentOS, AlmaLinux и Rocky Linux.
Включите репозиторий [EPEL] и установите UFW в RHEL, CentOS, AlmaLinux, Rocky Linux, как показано ниже:
Установка UFW на openSUSE:
Выполните следующую команду, чтобы проверить состояние службы UFW:
Пример вывода:
Другой способ – проверить, включен ли и активен ли сервис UFW:
Если служба UFW не запускается автоматически после установки, выполните следующую команду для запуска службы UFW:
Ufw также должен быть включен для автоматического запуска между перезагрузками системы.
Или вы можете объединить обе команды в одну, чтобы включить и запустить службу UFW одним движением, как показано ниже:
Чтобы остановить службу UFW, просто выполните команду:
Если вы забыли синтаксис или вам нужна справка по определенной функции ufw, эти две команды будут очень кстати.
Вот содержимое этого файла:
В качестве альтернативы можно использовать команду ufw allow, чтобы установить политики по умолчанию для входящих и исходящих команд:
Вывод:
А для получения более подробной информации о состоянии используйте эту команду:
Вывод:
Чтобы просмотреть нумерованный формат, выполните команду:
Посмотрите на приведенные ниже команды:
[1]
[2]
[3]
[4]
Все команды служат одной цели.
[ 1] – В первой команде я разрешаю весь доступ к службе ssh. UFW знает, что по умолчанию ssh прослушивает порт 22. Поэтому, когда вы используете разрешить службу ssh, он также применит правило для порта 22.
[ 2 ] – Во второй команде я явно указываю разрешить входящие соединения для порта 22.
[ 3 ] – Третья команда аналогична второй. Она разрешает любой доступ к порту tcp 22. Поддерживаются оба протокола TCP и UDP.
[ 4 ] – В четвертой команде я разрешаю пользовательскому порту ssh (т.е. 2222) принимать входящие соединения.Вы можете использовать эти четыре команды не только для ssh, но и для любых служб и портов.
Например, если вы хотите подключиться к PostgreSQL, работающему на порту 5433, то правило должно быть добавлено следующим образом.
Аналогично, мы можем использовать команду ufw deny для отклонения входящих соединений:
Эта команда запретит трафик на порту 5433.
Чтобы правила вступили в силу, необходимо выполнить следующую команду:
Как я уже упоминал, используйте следующую команду для просмотра состояния правил брандмауэра UFW:
Вывод:
Чтобы отключить правила брандмауэра, выполните команду:
Допустим, если вы хотите, чтобы к вашему серверу можно было подключиться (ssh’ed) только с определенного IP, вы можете сделать это, добавив следующее правило.
[1]
[2]
[1] - Первая команда позволяет указанному IP подключаться на основе открытых портов.
[2] - Вторая команда указывает, что пользователь может подключиться к порту 2222 только с адреса 192.168.156.2.
Чтобы разрешить группе IP из одной подсети подключаться к ssh, вы можете использовать подсеть при добавлении правила, разрешая всем IP этой подсети подключаться к порту 2222.
Следующая команда создаст политику приема соединений для сетевого интерфейса en01 на порт 2222.
Например, при открытии порта SSH будет применено следующее:
Как видно из приведенного выше результата, команда ufw выводит только результирующие правила, но не применяет их, когда мы добавляем опцию –dry-run. Это удобно, когда вы хотите протестировать какие-либо политики брандмауэра.
Выполните следующую команду, которая выдаст вам политику вместе с ее приоритетом.
Пример вывода:
Посмотрите на [ 4 ] в приведенном выше выводе.
Любое подключение к порту 2222 из подсети 192.168.157.0/24 должно быть отброшено. Но когда я попытаюсь подключиться с любой машины из подсети, соединение будет разрешено, поскольку высокий приоритет был присвоен [ 2 ]. Чтобы отменить такое поведение, необходимо создать правила с приоритетом.
Вы можете удалить существующее правило и добавить новое правило с приоритетом и перезагрузить службу.
Посмотрите на приведенный выше результат.
Приоритет переназначен на [ 2 ] и теперь, если я попытаюсь подключиться к порту 2222 с адреса 192.168.157.0/24, мое соединение будет отклонено.
Чтобы отключить ведение журнала UFW, выполните следующую команду:
Чтобы включить ведение логов UFW, выполните команду:
Существует четыре уровня ведения логов, а именно: low, medium, high, и full. В зависимости от выбранного уровня логи будут генерироваться в файл /var/log/ufw.log. По умолчанию уровень логов будет low
Вы можете использовать приведенную ниже команду для установки нужного уровня:
Чтобы проверить состояние ведения журнала и уровень логов, выполните команду ufw status и найдите запись о ведении журнала.
Чтобы получить список профилей приложений, выполните следующую команду:
Пример вывода:
Это тестовая машина. Я установил только OpenSSH. Поэтому вы видите только два профиля.
Чтобы получить подробную информацию об этом профиле и о том, какую политику он применяет, выполните следующую команду:
Пример вывода:
Пример вывода:
Когда вы выполняете эту команду, ваши текущие правила будут сохранены перед сбросом к профилю по умолчанию.
Введение
Безопасность – это серьезное дело.
Работаете ли вы с операционной системой 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 ufwUFW доступен в репозитории [EPEL] для операционных систем Enterprise Linux, таких как RHEL, CentOS, AlmaLinux и Rocky Linux.
Включите репозиторий [EPEL] и установите UFW в RHEL, CentOS, AlmaLinux, Rocky Linux, как показано ниже:
sudo dnf install epel-releasesudo dnf install ufwУстановка UFW на openSUSE:
sudo zypper install ufw1.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 ufwUfw также должен быть включен для автоматического запуска между перезагрузками системы.
sudo systemctl enable ufwИли вы можете объединить обе команды в одну, чтобы включить и запустить службу UFW одним движением, как показано ниже:
sudo systemctl enable --now ufwЧтобы остановить службу UFW, просто выполните команду:
sudo systemctl stop ufw3. Настройка брандмауэра с помощью UFW в Linux
3.1. Получение помощи
Если вы новичок в UFW, первое, что нужно сделать после его установки, это обратиться к разделу справки и man-странице UFW, чтобы получить базовое представление об использовании UFW.ufw --help
man Если вы забыли синтаксис или вам нужна справка по определенной функции ufw, эти две команды будут очень кстати.
3.2. Установка правил по умолчанию
Используя UFW, вы можете создавать правила брандмауэра (или политики) для разрешения или запрета определенной службы. С помощью этих политик вы указываете UFW, какие порты, службы, IP-адреса и интерфейсы должны быть разрешены или запрещены. Существуют политики по умолчанию, которые поставляются с ufw. Политика по умолчанию отбрасывает все входящие соединения и разрешает все исходящие соединения.ВАЖНО: Если вы настраиваете ufw на удаленном сервере, убедитесь, что вы разрешили порт или службу ssh перед включением брандмауэра ufw.
Политика входящих соединений по умолчанию будет запрещать все входящие соединения.
Поэтому если вы не настроили правила для разрешения SSH, вы будете заблокированы в удаленной системе и не сможете войти в нее.
Политики по умолчанию определяются в файле /etc/default/ufw.Этого не произойдет, если вы запустите ufw на локальной системе.
Вот содержимое этого файла:
В качестве альтернативы можно использовать команду ufw allow, чтобы установить политики по умолчанию для входящих и исходящих команд:
sudo ufw default deny incomingsudo ufw default allow outgoing3.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 numbered3.2.2. Добавление правил
Давайте на примере SSH продемонстрируем, как добавлять правила брандмауэра с помощью команды ufw.Посмотрите на приведенные ниже команды:
[1]
sudo ufw allow ssh[2]
sudo ufw allow 22[3]
sudo ufw allow 22/tcp[4]
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 803.2.4. Включение, отключение и перезагрузка правил брандмауэра UFW
Это отличается от включения и запуска демона UFW. Запуск системного блока ufw не приведет к выполнению правил брандмауэра. UFW имеет специальные команды для включения, отключения и перезагрузки правил брандмауэра.Чтобы правила вступили в силу, необходимо выполнить следующую команду:
sudo ufw enableFirewall 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 disableFirewall stopped and disabled on system startup
После добавления любой политики перезагрузите ufw, чтобы политика вступила в силу, используя команду :Обратите внимание: приведенная выше команда отключит только правила брандмауэра. Демон UFW будет по-прежнему запущен и включен при перезагрузке.
sudo ufw reload3.2.5. Добавление политики для диапазона портов
Вы можете добавить политику для диапазона портов вместо того, чтобы создавать политику для одного порта:sudo ufw allow 8000:8080/tcpsudo ufw deny 8000:8080/tcp3.2.6. Добавление политики для определенных IP-адресов, подсетей и портов
С помощью ufw можно создавать более тонкие правила.Допустим, если вы хотите, чтобы к вашему серверу можно было подключиться (ssh’ed) только с определенного IP, вы можете сделать это, добавив следующее правило.
[1]
sudo ufw allow from 192.168.156.2[2]
sudo ufw allow from 192.168.156.2 to any port 2222[1] - Первая команда позволяет указанному IP подключаться на основе открытых портов.
[2] - Вторая команда указывает, что пользователь может подключиться к порту 2222 только с адреса 192.168.156.2.
Чтобы разрешить группе IP из одной подсети подключаться к ssh, вы можете использовать подсеть при добавлении правила, разрешая всем IP этой подсети подключаться к порту 2222.
sudo ufw allow from 192.168.156.1/24 to any port 22223.2.7. Добавление политики сетевого интерфейса
Вы также можете создавать политики на основе сетевых интерфейсов.Следующая команда создаст политику приема соединений для сетевого интерфейса en01 на порт 2222.
sudo ufw allow in on en01 to any port 22223.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 4Deleting:
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 offLogging disabled
5. Ведение логов UFW
Логи – лучший вариант, если что-то пошло не так.Чтобы отключить ведение журнала UFW, выполните следующую команду:
sudo ufw logging offLogging disabled
Чтобы включить ведение логов UFW, выполните команду:
sudo ufw logging onLogging enabled
Существует четыре уровня ведения логов, а именно: low, medium, high, и full. В зависимости от выбранного уровня логи будут генерироваться в файл /var/log/ufw.log. По умолчанию уровень логов будет low
Вы можете использовать приведенную ниже команду для установки нужного уровня:
sudo ufw logging [ high | medium | Full | Low ]Чтобы проверить состояние ведения журнала и уровень логов, выполните команду ufw status и найдите запись о ведении журнала.
sudo ufw status verboseStatus: 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'
Когда вы выполняете эту команду, ваши текущие правила будут сохранены перед сбросом к профилю по умолчанию.