Способы настройки брандмауэра UFW на системах Debian, Ubuntu и Linux Mint

Данный гид познакомит вас с использованием UFW (Uncomplicated FireWall) на системах Debian, Ubuntu и Linux Mint, иллюстрируя примеры из практики. Умение управлять брандмауэром является важным навыком, который должен освоить каждый администратор систем.

UFW — это упрощённый интерфейс для управления брандмауэром Netfilter, что отражено в его названии «Uncomplicated Firewall». Он предлагает командный интерфейс с синтаксисом, аналогичным Packet Filter в OpenBSD. UFW отлично подходит для использования в качестве брандмауэра на хосте и считается рекомендуемым интерфейсом для iptables в дистрибутивах Linux на основе Debian, где обычно предустановлен. По умолчанию UFW настраивает правила для работы как с адресами IPv4, так и с IPv6. Альтернативный интерфейс для iptables — это firewalld, который является стандартным решением для брандмауэров в RPM-дистрибутивах Linux (таких как RHEL, CentOS, Fedora и OpenSUSE).

начало работы с UFW

Выключение остальных служб, отвечающих за восстановление iptables.

Правила файрвола iptables, как вы, возможно, знаете, сбрасываются при отключении операционной системы, и сама программа iptables не восстанавливает эти правила. В отличие от этого, UFW по умолчанию восстанавливает настройки файрвола после перезагрузки. Прежде чем начать использовать UFW, важно убедиться, что на вашей системе не установлена другая служба для восстановления iptables. Наличие двух таких служб может привести к конфликтам, что зачастую делает веб-приложения недоступными после перезагрузки системы.

Если вы раньше работали с файрволом iptables напрямую и теперь хотите перейти на UFW, вам необходимо отключить службу восстановления iptables. В Debian/Ubuntu широко используется служба iptables-persistent для этой цели. Чтобы убедиться, что она запущена, используйте следующую команду.

systemctl status iptables-persistent

Если она функционирует, вы можете приостановить и выключить её.

sudo systemctl stop iptables-persistent sudo systemctl disable iptables-persistent

Или вы можете исключить её из своей системы.

sudo apt remove iptables-persistent

Если вы установили почтовый сервер с помощью iRedMail, не забудьте выполнить следующую команду для проверки функционирования службы iptables.

systemctl status iptables

Служба iptables, входящая в состав iRedMail, предназначена для восстановления правил файрвола iptables. Если она функционирует, вы можете её остановить и отключить.

sudo systemctl stop iptables sudo systemctl disable iptables

Теперь давайте разберёмся, как применить UFW.

Запуск UFW на сервере Debian, Ubuntu или Linux Mint

UFW чаще всего уже установлен на Debian, Ubuntu и Linux Mint, но вы всегда можете установить его, выполнив следующую команду.

sudo apt install ufw

Для установки UFW на Arch Linux используйте команду sudo pacman — S ufw. Также не забудьте активировать службу UFW в systemd, выполнив команду sudo systemctl enable ufw.

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

sudo ufw status

UFW по умолчанию устанавливает следующие политики: для входящих подключений — запрет, для пересылки — запрет, а для исходящих — разрешение. При этом осуществляется отслеживание состояний для новых соединений в случае входящих и пересылаемых подключений. Прежде чем активировать UFW, важно выяснить, какие порты открыты на публичном IP-адресе вашего сервера, что можно сделать с помощью инструмента nmap (Network Mapper).

Установите nmap на серверы Debian, Ubuntu или Linux Mint и выполните сканирование открытых портов на вашем публичном IP-адресе.

sudo apt install nmap sudo nmap 12.34.56.78

Подставьте вместо 12.34.56.78 реальный публичный IP-адрес вашего сервера. Как показано на изображении ниже, на моем сервере доступно несколько портов.

Существуют и открытые порты, которые прослушиваются исключительно на localhost. Их можно обнаружить, выполнив команду sudo nmap localhost, однако нам не стоит об этом переживать.

Читайте также:  10 причин перейти на ОС Linux

По умолчанию Nmap осуществляет сканирование только TCP-портов. Для проверки UDP-портов мы можем применить следующую команду.

sudo nmap - sU 12.34.56.78

Сканирование UDP портов может занимать значительное время. Если вам необходимо получить информацию быстрее, вы можете воспользоваться командой netstat для отображения списка активных UDP портов.

sudo netstat - lnpu

После получения перечня открытых TCP и UDP портов на вашем сервере необходимо определить, какие из них разрешить для входящих соединений. Если у вас запущен сервер openSSH, обязательно разрешите TCP порт 22 перед включением UFW. Это можно осуществить с помощью следующей команды.

sudo ufw allow 22/tcp

sudo ufw allow ssh

Если вы планируете разрешить трафик HTTP и HTTPS, выполните следующую команду для разрешения входящих соединений на TCP портах 80 и 443.

sudo ufw allow 80/tcp sudo ufw allow 443/tcp

При настройке почтового сервера следует открыть TCP порты 25 (SMTP), 587 (submission), 143 (IMAP) и 993 (IMAPS).

sudo ufw allow 25/tcp sudo ufw allow 587/tcp sudo ufw allow 143/tcp sudo ufw allow 993/tcp

Чтобы предоставить вашим пользователям возможность работать с протоколом POP3, необходимо открыть TCP порты 110 (POP3) и 995 (POP3S).

sudo ufw allow 110/tcp sudo ufw allow 995/tcp

При запуске сервера DNS BIND необходимо открыть порты 53 для TCP и UDP.

sudo ufw allow 53

Указанная команда позволит открыть как TCP, так и UDP порты. Если ваша цель — разрешить только UDP порт, тогда

sudo ufw allow 53/udp

Запуск нескольких портов одновременно.

Можно разрешить несколько портов, как указано ниже.

sudo ufw allow 80,443,25,587,465,143,993/tcp

Активация UFW

После настройки разрешённых портов в UFW необходимо активировать брандмауэр. Однако прежде чем это сделать, стоит включить ведение журнала с помощью следующей команды, чтобы иметь возможность контролировать корректность его функционирования.

sudo ufw logging on

Стандартный уровень логирования установлен на «низкий». Логи сохраняются в файле /var/log/ufw.log. Чаще всего я предпочитаю уровень логирования «средний».

sudo ufw logging medium

sudo ufw enable

Обратите внимание: при активации UFW ранее заданные правила iptables будут удалены.

sudo ufw status

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

sudo ufw status verbose

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

Теперь у вас есть возможность заново просканировать сервер и выяснить, какие порты остаются открытыми.

sudo nmap 12.34.56.78

Также активируйте службу systemd для UFW, чтобы она запускалась автоматически при старте системы.

sudo systemctl enable ufw

Как убрать правило брандмауэра

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

sudo ufw status numbered

Настройка UFW на Debian.

После этого вы можете убрать правило, к примеру, восьмое.

sudo ufw delete 8

Учтите, что после удаления правила номер ссылки изменится, поэтому вам потребуется заново выполнить команду sudo ufw status numbered, чтобы удалить другое правило.

Сброс конфигурации UFW.

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

sudo ufw reset

Это особенно важно для тех, кто только начинает.

Профиль приложения UFW можно переформулировать как: Настройки приложения для UFW.

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

sudo ufw app list

профиль приложения ufw

Мы можем предоставить данные о конкретном профиле приложения, например, о профиле «Apache Full».

sudo ufw app info "Apache Full"

Порты, применяемые в данном профиле, это TCP-порты 80 и 443. При активации этого приложения с помощью указанной команды, TCP-порты 80 и 443 будут открыты.

sudo ufw allow "Apache Full"

Настройка черного списка IP-адресов с помощью UFW.

Предположим, что существует спамер, который регулярно пытается отправлять спам на ваш почтовый сервер. Вы можете применить UFW для блокировки IP-адреса спамера, чтобы он не имел доступа к TCP-порту 25 вашего почтового сервера. Используйте следующую команду, заменив 12.34.56.78 на IP-адрес спамера.

sudo ufw insert 1 deny in from 12.34.56.78 to any port 25 proto tcp

Обратите внимание, что новые правила для межсетевого экрана по умолчанию размещаются в конце списка. Если вы уже открыли доступ к порту 25 для всех источников, вам следует добавить правило запрета в начало, как указано выше, чтобы оно имело приоритет. Вы всегда можете разместить новое правило запрета на первом месте.

Читайте также:  Свой репозиторий для CentOS

sudo ufw insert 1 deny in from 78.56.34.12 to any port 25 proto tcp

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

sudo ufw insert 1 deny in from 192.168.0.0/24 to any port 25 proto tcp

Для того чтобы ограничить доступ к вашему серверу с определённого IP-адреса ко всем портам, выполните следующие действия:

sudo ufw insert 1 deny in from 12.34.56.78

Настройка белого списка IP-адресов в UFW.

Предположим, у вас работает сервер OpenSSH, и вы хотите ограничить доступ к нему через SSH только для определенных IP-адресов. Для этого можно воспользоваться UFW, чтобы создать белый список разрешенных IP-адресов. Например, у меня нет статического IP-адреса для домашнего подключения, но я настроил несколько VPN-серверов в облаке. Теперь я могу настроить UFW так, чтобы разрешить входящие соединения на порт 22 исключительно с IP-адреса моего VPN-сервера.

Сначала внесите IP-адрес в список допуска.

sudo ufw insert 1 allow in from 12.34.56.78 to any port 22 proto tcp

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

sudo ufw status numbered sudo ufw delete reference-number

Разрешить IP в UFW

Обратите внимание, что необходимо удалить правила как для IPv4, так и для IPv6. Учтите, что если вы сначала удалите верхнее правило, то номер ссылки на нижнее правило будет изменен.

Теперь доступ к TCP-порту 22 будет разрешён только с вашего IP-адреса.

Использование IPv6-адресов в UFW

Сначала проверьте, установлен ли параметр IPV6=yes в файле /etc/default/ufw. Если он отсутствует, добавьте его в этот файл и перезапустите UFW с помощью команды (sudo systemctl restart ufw).

После этого вы можете просто заменить адрес IPv4 на IPv6 в командах ufw, как показано далее.

sudo ufw allow in from 2607:f8b0:4005:804::200e to any port 587

Учтите, что вставка правил для IPv6 между правилами для IPv4 невозможна. Все правила для IPv6 должны находиться после правил для IPv4.

Как установить IP-маскарад с использованием UFW.

Иногда возникает необходимость создать свой собственный VPN-сервер, и в этом случае потребуется настроить IP-маскарад, чтобы ваш сервер выполнял функции виртуального маршрутизатора для клиентов VPN. К сожалению, UFW не предлагает простого метода для этой задачи. Необходимо будет внести команду iptables в конфигурационный файл UFW.

sudo nano /etc/ufw/before. rules

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

# Правила для таблицы NAT *nat :POSTROUTING ACCEPT [0:0] # Направляем трафик через eth0 - Замените eth0 на соответствующий интерфейс вашей сети - A POSTROUTING - o eth0 - j MASQUERADE # Завершите каждую таблицу строкой 'COMMIT', иначе правила не будут обработаны COMMIT

UFW NAT

Имейте в виду, что если ваш основной сетевой интерфейс отличается от eth0, вам следует заменить eth0 на имя вашего сетевого интерфейса. Это имя можно узнать с помощью команды ip addr. Поскольку мы добавляем правила брандмауэра в новую таблицу, а именно в таблицу nat, необходимо также добавить строку ‘COMMIT’.

По умолчанию UFW блокирует пересылку пакетов, что является положительным моментом, поскольку это защищает ваш сервер от использования злоумышленниками из Интернета для выполнения вредоносных действий. Однако нам необходимо разрешить пересылку в рамках нашей частной сети. Найдите в этом файле цепочку ufw-before-forward и добавьте следующие три строки, которые позволят пересылку пакетов, если IP-адрес источника или назначения попадает в диапазон 10.10.10.0/24.

# разрешить пересылку для доверенной сети - A ufw-before-forward - s 10.10.10.0/24 - j ACCEPT - A ufw-before-forward - d 10.10.10.0/24 - j ACCEPT

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

sudo ufw disable sudo ufw enable

sudo systemctl restart ufw

Несмотря на то что это не относится к настройкам UFW, для маршрутизации пакетов также требуется активировать пересылку IP. Это достигается путём добавления соответствующего параметра в конец файла /etc/sysctl.conf.

net. ipv4.ip_forward = 1

После этого внесите изменения, используя следующую команду.

sudo sysctl - p

Настройка перенаправления портов в UFW.

Если на вашем маршрутизаторе используется UFW и вы хотите перенаправлять пакеты, например, HTTP-запросы, на внутренние узлы локальной сети, вам потребуется настроить перенаправление портов. Для этого откройте файл /etc/ufw/before. rules для редактирования.

Читайте также:  Как оперативно получить данные о системе Linux через терминал, используя Screenfetch

sudo nano /etc/ufw/before. rules

Добавьте следующие строки в таблицу NAT перед строкой COMMIT. Замените 12.34.56.78 на внешний IP-адрес вашего маршрутизатора.

:PREROUTING ACCEPT [0:0] # перенаправить порт 80 с 12.34.56.78 на 192.168.1.100:80 # перенаправить порт 443 с 12.34.56.78 на 192.168.1.100:443 - A PREROUTING - i eth0 - d 12.34.56.78-p tcp --dport 80 - j DNAT --to-destination 192.168.1.100:80 - A PREROUTING - ieth0 - d 12.34.56.78 - p tcp --dport 443 - j DNAT --to-destination 192.168.1.100:443

Это означает, что UFW применяет цель DNAT для перенаправления HTTP — и HTTPS-запросов к хосту 192.168.1.100 в локальной сети.

Проброс портов с помощью ufw

DNAT (Destination NAT) преобразует адрес назначения. Наиболее распространённый пример этого — переадресация портов. SNAT (Source NAT) изменяет исходный IP-адрес. Классический пример — когда устройство, находящееся за маршрутизатором Wi-Fi, пытается подключиться к интернету.

Удалите настройки правил таблицы NAT.

sudo iptables - F - t nat

Перезапустите UFW, чтобы применить все настройки NAT.

sudo systemctl restart ufw

Также следует добавить IP-маршрутизацию в файл /etc/sysctl.conf, как было указано ранее.

Если на хосте 192.168.1.100 активирован UFW, необходимо открыть порты 80 и 443 в настройках UFW.

sudo ufw allow 80/tcp sudo ufw allow 443/tcp

Учтите, что для хоста в локальной сети с адресом 192.168.1.100 необходимо настроить маршрутизатор UFW в качестве шлюза. В случае использования другого IP-адреса для шлюза, функция переадресации портов не будет функционировать.

Как ограничить доступ к трафику BitTorrent на облачных серверах

При запуске сервера в облаке стоит задуматься о блокировке трафика BitTorrent. Это важно, так как в случае, если вы или кто-то другой случайно загрузите защищенный авторским правом контент (например, фильмы или сериалы) с помощью BitTorrent и вас поймают, ваш провайдер хостинга может приостановить действие вашего аккаунта.

Современные клиенты BitTorrent используют шифрование для защиты трафика между пользователями, что затрудняет его идентификацию среди других видов трафика. Несмотря на отсутствие универсального метода для блокировки BitTorrent, существует простое решение.

По умолчанию отключите исходящий трафик.

sudo ufw default deny outgoing

Затем откройте определённые исходящие порты. К примеру, необходимо предоставить доступ к порту DNS.

sudo ufw allow out 53

Также необходимо открыть порты 80 и 443, чтобы обеспечить обновление программного обеспечения из репозитория.

sudo ufw allow out 80/tcp sudo ufw allow out 443/tcp

Если это ваш почтовый сервер, необходимо открыть порт 25.

sudo ufw allow out 25/tcp

Перезагрузите UFW, чтобы изменения начали действовать.

sudo systemctl restart ufw

Хотя данное решение нельзя назвать идеальным, поскольку некоторые пользователи могут настроить свои BitTorrent-клиенты на использование портов 80 или 443, на практике такие случаи встречаются редко. В основном, пользователи придерживаются стандартных настроек, и мой BitTorrent-клиент на сервере сразу же прекратил все загрузки и выгрузки после применения указанных правил в брандмауэре. Если он продолжает работать, попробуйте перезапустить свой BitTorrent-клиент или сервер.

Ограничение исходящих соединений к определённому IP-адресу.

Для начала следует разрешить исходящий поток данных.

sudo ufw default allow outgoing

После этого ограничьте доступ для определённого IP-адреса с помощью:

sudo ufw insert 1 deny out to 12.34.56.78

sudo systemctl restart ufw

UFW и fail2ban — это инструменты для обеспечения безопасности системы, которые помогают защищать серверы от несанкционированного доступа.

Fail2ban — это приложение, которое применяет брандмауэр iptables для защиты от атак с использованием подбора паролей. UFW и Fail2ban могут работать одновременно, не создавая конфликтов.

Ошибка UFW.

Если вы проверяете состояние ufw и видите такую ошибку, скорее всего, это связано с установкой нового ядра Linux.

modprobe: ERROR: ../libkmod/libkmod-module. c:191 kmod_module_parse_depline() ctx=0x564bf80c82a0 path=/lib/modules/5.4.0-89-generic/kernel/net/netfilter/x_tables. ko error=No such file or directory modprobe: ERROR: could not insert 'ip_tables': Unknown symbol in module, or unknown parameter (see dmesg) iptables v1.8.4 (legacy): can't initialize iptables table `filter': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.

Убедитесь, какое ядро у вас установлено.

uname - r

5.4.0-89-generic

Проверьте, какие версии ядра Linux у вас установлены.

sudo update-grub

Использование файла `/etc/default/grub' Использование файла `/etc/default/grub. d/init-select.cfg' Генерация файла конфигурации grub. Найдено изображение linux: /boot/vmlinuz-5.4.0-121-generic Найдено изображение initrd: /boot/initrd. img-5.4.0-121-generic Найдено изображение linux: /boot/vmlinuz-5.4.0-120-generic Найдено изображение initrd: /boot/initrd. img-5.4.0-120-generic готово

Ядро 5.4.0-89-generic было удалено в результате обновления. Чтобы воспользоваться новым ядром Linux, перезагрузите сервер. Если перезагрузка сейчас вам не нужна, можно вернуть старое ядро с помощью следующей команды:

sudo apt install linux-modules-5.4.0-89-generic linux-modules-extra-5.4.0-89-generic

Теперь у вас снова должна быть возможность использовать UFW.

Рекомендация: Если вы решили продолжать использовать устаревшее ядро Linux, не забудьте воспользоваться сервисом Canonical Livepatch для обновления ядра в Ubuntu без необходимости перезагрузки системы.

Gufw

Gufw представляет собой графический интерфейс для управления ufw.

  • Установка и использование Gufw Firewall на настольной версии Ubuntu.

Заключение

На этом все! Надеюсь, эта статья оказалась полезной для вас в освоении UFW на Debian, Ubuntu и Linux Mint. Как всегда, если вам понравился этот материал, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.