Как настроить брандмауэр с UFW на Debian 11

Введение

UFW, или Uncomplicated Firewall, – это упрощенный интерфейс управления брандмауэром, который скрывает сложность технологий фильтрации пакетов более низкого уровня, таких как iptables и nftables. Если вы хотите начать обеспечивать безопасность своей сети и не уверены, какой инструмент использовать, UFW может быть правильным выбором для вас.

Этот учебник покажет вам, как настроить брандмауэр с помощью UFW в Debian 11.

Предварительные требования

Для выполнения этого учебника вам понадобится один сервер Debian 11 с пользователем sudo не root, который вы можете настроить, следуя Шагам 1 по 3 в учебнике Начальная настройка сервера с Debian 11.

Шаг 1 – Установка UFW

Debian по умолчанию не устанавливает UFW. Если вы следовали всему руководству по начальной настройке сервера, то уже установили и включили UFW. Если нет, установите его сейчас, используя apt:

  1. sudo apt install ufw

Вы настроите UFW и включите его в следующих шагах.

Шаг 2 — Использование IPv6 с UFW (По желанию)

Это руководство написано с учетом IPv4, но будет работать и для IPv6, если вы его включите. Если ваш сервер Debian имеет включенный IPv6, вам следует убедиться, что UFW настроен на поддержку IPv6. Это гарантирует, что UFW будет управлять правилами брандмауэра для IPv6, кроме IPv4. Чтобы настроить это, откройте файл конфигурации UFW /etc/default/ufw с помощью nano или вашего любимого редактора:

  1. sudo nano /etc/default/ufw

Найдите IPV6 в файле и убедитесь, что значение yes:

/etc/default/ufw excerpt
IPV6=yes

Сохраните и закройте файл. Если вы используете nano, нажмите CTRL+X, затем Y, затем ENTER, чтобы сохранить и выйти из файла.

Теперь, когда UFW включен, он будет настроен на запись правил брандмауэра как для IPv4, так и для IPv6. Однако прежде чем включить UFW, убедитесь, что ваш брандмауэр настроен на разрешение подключения через SSH. Начните с установки политик по умолчанию.

Шаг 3 — Настройка Политик По Умолчанию

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

Установите свои правила UFW обратно по умолчанию, чтобы быть уверенным, что вы сможете следовать этому руководству. Чтобы установить значения по умолчанию, используемые UFW, используйте эти команды:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

Вы получите вывод, подобный следующему:

Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

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

Шаг 4 — Разрешение SSH-соединений

Вы не можете включить свой брандмауэр UFW в данный момент, так как это приведет к блокировке всех входящих соединений, включая ваши попытки доступа к серверу. Это означает, что вам нужно будет создать правила, которые явно разрешают законные входящие соединения – например, соединения по протоколам SSH или HTTP – если вы хотите, чтобы ваш сервер отвечал на такие запросы. Если вы используете облачный сервер, скорее всего, вы захотите разрешить входящие соединения по SSH, чтобы иметь возможность подключаться к серверу и управлять им.

Для настройки сервера на разрешение входящих соединений по SSH используйте эту команду:

  1. sudo ufw allow ssh

Это создаст правила брандмауэра, которые разрешат все соединения на порту 22, который является портом, на который по умолчанию слушает демон SSH. UFW знает, какой порт связан с разрешить ssh, потому что он указан как служба в файле /etc/services.

Однако вы также можете написать эквивалентное правило, указав порт вместо названия службы. Например, эта команда даст тот же результат, что и приведенная выше:

  1. sudo ufw allow 22

Если вы настроили свой демон SSH на использование другого порта, вам придется указать соответствующий порт. Например, если ваш SSH-сервер слушает порт 2222, вы можете использовать эту же команду, но заменить 22 на 2222.

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

Шаг 5 – Включение UFW

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

  1. sudo ufw enable

Вы получите предупреждение, которое сообщит о возможном нарушении существующих SSH-соединений. Вы уже настроили правило брандмауэра, которое разрешает SSH-соединения, поэтому продолжать должно быть безопасно. Ответьте на запрос, введя y и нажав ENTER.

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

  1. sudo ufw status verbose

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

Шаг 6 — Разрешение других соединений

На данном этапе вам следует разрешить все остальные соединения, необходимые для нормального функционирования вашего сервера. Какие именно соединения разрешать зависит от ваших конкретных потребностей. Вы уже знаете, как написать правила, разрешающие соединения на основе имени службы или порта; вы это сделали для SSH на порту 22.

Вы можете сделать это для HTTP на порту 80, который используется нешифрованными веб-серверами. Чтобы разрешить этот тип трафика, вы бы набрали:

  1. sudo ufw allow http

Вы также можете сделать это для HTTPS на порту 443, который используется шифрованными веб-серверами. Чтобы разрешить этот тип трафика, вы бы набрали:

  1. sudo ufw allow https

В обоих сценариях также можно указать порты: HTTP — 80, HTTPS — 443. Например:

  1. sudo ufw allow 80

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

Конкретные диапазоны портов

Вы можете указать диапазоны портов с помощью UFW. Например, некоторые приложения используют несколько портов вместо одного.

Например, чтобы разрешить соединения X11, которые используют порты 60006007, используйте эти команды:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

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

Конкретные IP-адреса

При работе с UFW вы также можете указывать IP-адреса. Например, если вы хотите разрешить соединения с определенного IP-адреса, такого как рабочий или домашний IP-адрес 203.0.113.4, вам нужно указать from, а затем IP-адрес:

  1. sudo ufw allow from 203.0.113.4

Вы также можете указать конкретный порт, к которому разрешено подключение по IP-адресу, добавив to any port, за которым следует номер порта. Например, если вы хотите разрешить 203.0.113.4 подключаться к порту 22 (SSH), используйте эту команду:

  1. sudo ufw allow from 203.0.113.4 to any port 22

Подсети

Если вы хотите разрешить подсеть IP-адресов, вы можете сделать это, используя нотацию CIDR для указания маски подсети. Например, если вы хотите разрешить все IP-адреса в диапазоне от 203.0.113.1 до 203.0.113.254, вы можете использовать эту команду:

  1. sudo ufw allow from 203.0.113.0/24

Точно так же вы можете указать порт назначения, к которому разрешено подключение подсети 203.0.113.0/24. Снова используя порт 22 (SSH) в качестве примера:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

Подключения к конкретному сетевому интерфейсу

Если вы хотите создать правило брандмауэра, которое применяется только к определенному сетевому интерфейсу, вы можете сделать это, указав allow in on, а затем имя сетевого интерфейса.

Будет полезно просмотреть ваши сетевые интерфейсы перед продолжением. Для этого используйте эту команду:

  1. ip addr
Output
. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

Выделенный вывод указывает имена сетевых интерфейсов. Они обычно имеют имена, например, eth0 или enp3s2.

Если, например, ваш сервер имеет публичный сетевой интерфейс с именем eth0, вы можете разрешить на него трафик HTTP с помощью этой команды:

  1. sudo ufw allow in on eth0 to any port 80

Это позволит вашему серверу получать запросы HTTP из общедоступного интернета.

Или, если вы хотите, чтобы сервер базы данных MySQL (порт 3306) прослушивал соединения на частном сетевом интерфейсе eth1, вы можете использовать эту команду:

  1. sudo ufw allow in on eth1 to any port 3306

Это позволит другим серверам в вашей частной сети подключаться к вашей базе данных MySQL.

Шаг 7 — Отклонение соединений

Если вы не изменили политику по умолчанию для входящих соединений, UFW настроен на отклонение всех входящих соединений. Обычно это упрощает процесс создания безопасной политики брандмауэра, требуя создания правил, которые явно разрешают определенные порты и IP-адреса.

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

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

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

  1. sudo ufw deny http

Или если вы хотите запретить все соединения с 203.0.113.4, вы можете использовать эту команду:

  1. sudo ufw deny from 203.0.113.4

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

Шаг 8 — Удаление Правил

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

По Номеру Правила

Если вы используете номер правила для удаления правил брандмауэра, первое, что вам следует сделать, это получить список ваших правил брандмауэра. Команда UFW status имеет опцию numbered, которая отображает номера рядом с каждым правилом:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

Если вы решите удалить правило 2, которое разрешает соединения HTTP на порту 80, вы можете указать это в следующей команде UFW delete:

  1. sudo ufw delete 2

Это вызовет окно подтверждения, на которое вы можете ответить y/n. Ввод y затем удалит правило 2. Обратите внимание, что если у вас включен IPv6, вы захотите удалить соответствующее правило IPv6 также.

По Фактическому Правилу

Альтернативой номерам правил является указание конкретного правила для удаления. Например, если вы хотите удалить правило allow http, вы можете написать это следующим образом:

  1. sudo ufw delete allow http

Вы также можете указать правило с помощью allow 80 вместо имени службы:

  1. sudo ufw delete allow 80

Этот метод удалит как IPv4, так и IPv6 правила, если они существуют.

Шаг 9 — Проверка статуса и правил UFW

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

  1. sudo ufw status verbose

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

Output
Status: inactive

Если UFW активен, что должно быть, если вы следовали Шагу 3, вывод будет сообщать, что он активен, и перечислит любые правила, которые вы установили. Например, если брандмауэр настроен на разрешение подключений SSH (порт 22) откуда угодно, вывод может выглядеть примерно так:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

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

Шаг 10 — Отключение или сброс UFW (по желанию)

Если вы решите не использовать UFW, вы можете отключить его с помощью этой команды:

  1. sudo ufw disable

Любые правила, которые вы создали с помощью UFW, больше не будут активными. Вы всегда можете выполнить sudo ufw enable, если вам нужно активировать их позже.

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

  1. sudo ufw reset

Это отключит UFW и удалит все ранее определенные правила. Имейте в виду, что значения по умолчанию не изменятся на свои исходные настройки, если вы их когда-либо изменяли. Это даст вам свежий старт с UFW.

Заключение

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

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian