Введение
UFW, или Uncomplicated Firewall, является упрощенным интерфейсом управления брандмауэром, который скрывает сложность технологий фильтрации пакетов более низкого уровня, таких как iptables
и nftables
. Если вы хотите начать обеспечивать безопасность вашей сети и не уверены, какой инструмент использовать, то UFW может быть правильным выбором для вас.
В этом учебнике будет показано, как настроить брандмауэр с помощью UFW на Debian 11.
Предварительные требования
Для выполнения этого учебника вам понадобится один сервер Debian 11 с пользователем sudo
непривилегированным root, который вы можете настроить, следуя Шагам 1-3 в учебнике Настройка начального сервера с Debian 11.
Шаг 1 – Установка UFW
Debian по умолчанию не устанавливает UFW. Если вы следовали всему руководству по настройке начального сервера, то у вас уже установлен и включен UFW. В противном случае установите его сейчас, используя apt
:
- sudo apt install ufw
Вы настроите UFW и включите его в следующих шагах.
Шаг 2 — Использование IPv6 с UFW (необязательно)
Это руководство написано с учетом IPv4, но будет работать и для IPv6, если его включить. Если на вашем сервере Debian включен IPv6, вы захотите убедиться, что UFW настроен для поддержки IPv6. Это обеспечит управление правилами брандмауэра UFW как для IPv4, так и для IPv6. Чтобы настроить это, откройте файл конфигурации UFW /etc/default/ufw
с помощью nano
или вашего любимого редактора:
- sudo nano /etc/default/ufw
Найдите IPV6
в файле и убедитесь, что значение равно yes
:
IPV6=yes
Сохраните и закройте файл. Если вы используете nano
, нажмите CTRL+X
, затем Y
, затем ENTER
, чтобы сохранить и выйти из файла.
Теперь, когда UFW включен, он будет настроен на запись правил брандмауэра как для IPv4, так и для IPv6. Однако перед включением UFW вы захотите убедиться, что ваш брандмауэр настроен на разрешение подключения через SSH. Начните с установки политик по умолчанию.
Шаг 3 — Настройка стандартных политик
Если вы только начинаете работу с вашим брандмауэром, первые правила, которые следует определить, – это ваши стандартные политики. Эти правила обрабатывают трафик, который явно не соответствует никаким другим правилам. По умолчанию UFW настроен на отклонение всех входящих соединений и разрешение всех исходящих соединений. Это означает, что любой, кто пытается подключиться к вашему серверу, не сможет это сделать, в то время как любое приложение внутри сервера сможет связаться с внешним миром.
Верните свои правила UFW к значениям по умолчанию, чтобы быть уверенным, что вы сможете следовать этому руководству. Для установки значений по умолчанию, используя UFW, выполните эти команды:
- sudo ufw default deny incoming
- sudo ufw default allow outgoing
Вы получите вывод, аналогичный следующему:
OutputDefault 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-соединений, используйте эту команду:
- sudo ufw allow ssh
Это создаст правила брандмауэра, которые разрешат все соединения на порту 22
, который по умолчанию слушает демон SSH. UFW знает, что порт связан с allow ssh
, потому что он перечислен как служба в файле /etc/services
.
Однако вы также можете написать эквивалентное правило, указав порт вместо имени службы. Например, эта команда даст тот же результат, что и указанная выше:
- sudo ufw allow 22
Если вы настроили демон SSH для использования другого порта, вам придется указать соответствующий порт. Например, если ваш SSH-сервер слушает порт 2222
, вы можете использовать ту же команду, но заменить 22
на 2222
.
Теперь, когда ваш брандмауэр настроен на разрешение входящих SSH-соединений, вы можете его включить.
Шаг 5 — Включение UFW
Чтобы включить UFW, используйте эту команду:
- sudo ufw enable
Вы получите предупреждение, которое говорит, что выполнение этой команды может нарушить существующие SSH-соединения. Вы уже настроили правило брандмауэра, которое разрешает SSH-соединения, поэтому можно продолжить. Ответьте на запрос с y
и нажмите ENTER
.
Брандмауэр теперь активен. Чтобы увидеть установленные вами правила, выполните эту команду:
- sudo ufw status verbose
Остальная часть этого руководства расскажет о том, как более подробно использовать UFW, включая разрешение и запрещение различных типов соединений.
Шаг 6 — Разрешение других соединений
На этом этапе вы должны разрешить все остальные соединения, которые необходимы для правильной работы вашего сервера. Какие соединения разрешить, зависит от ваших конкретных потребностей. Вы уже знаете, как написать правила, разрешающие соединения на основе имени службы или порта; вы сделали это для SSH на порту 22
.
Вы можете сделать это для HTTP на порту 80
, который используется нешифрованными веб-серверами. Чтобы разрешить этот тип трафика, вы бы ввели:
- sudo ufw allow http
Вы также можете сделать это для HTTPS на порту 443
, который используется шифрованными веб-серверами. Чтобы разрешить этот тип трафика, вы бы ввели:
- sudo ufw allow https
В обоих сценариях также работало бы указание портов, с HTTP 80
, а с HTTPS 443
. Например:
- sudo ufw allow 80
Однако есть и другие способы разрешения соединений, помимо указания порта или известной службы. Об этом будет рассказано далее.
Конкретные диапазоны портов
Вы можете указать диапазоны портов с помощью UFW. Например, некоторые приложения используют несколько портов вместо одного.
Например, для разрешения подключений X11
, которые используют порты 6000
–6007
, используйте эти команды:
- sudo ufw allow 6000:6007/tcp
- sudo ufw allow 6000:6007/udp
При указании диапазонов портов с UFW необходимо указать протокол (tcp
или udp
), к которому должны применяться правила. Об этом не упоминалось ранее, потому что не указание протокола автоматически разрешает оба протокола, что в большинстве случаев подходит.
Конкретные IP-адреса
При работе с UFW вы также можете указывать IP-адреса. Например, если вы хотите разрешить подключения с определенного IP-адреса, такого как рабочий или домашний IP-адрес 203.0.113.4
, вам необходимо указать from
, а затем IP-адрес:
- sudo ufw allow from 203.0.113.4
Вы также можете указать конкретный порт, к которому разрешено подключение с указанного IP-адреса, добавив to any port
, за которым следует номер порта. Например, если вы хотите разрешить подключение 203.0.113.4
к порту 22
(SSH), используйте эту команду:
- sudo ufw allow from 203.0.113.4 to any port 22
Подсети
Если вы хотите разрешить подсеть IP-адресов, вы можете сделать это, используя нотацию CIDR для указания маски подсети. Например, если вы хотите разрешить все IP-адреса в диапазоне от 203.0.113.1
до 203.0.113.254
, вы можете использовать следующую команду:
- sudo ufw allow from 203.0.113.0/24
Точно так же вы можете указать порт назначения, к которому разрешено подключение из подсети 203.0.113.0/24
. Снова воспользуйтесь портом 22
(SSH) в качестве примера:
- sudo ufw allow from 203.0.113.0/24 to any port 22
Подключения к конкретному сетевому интерфейсу
Если вы хотите создать правило брандмауэра, которое применяется только к конкретному сетевому интерфейсу, вы можете сделать это, указав allow in on
, за которым следует имя сетевого интерфейса.
Будет полезно узнать ваши сетевые интерфейсы перед продолжением. Для этого используйте следующую команду:
- 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-трафик к нему с помощью этой команды:
- sudo ufw allow in on eth0 to any port 80
Это позволит вашему серверу получать HTTP-запросы из общедоступного интернета.
Или, если вы хотите, чтобы сервер базы данных MySQL (порт 3306
) прослушивал соединения на частном сетевом интерфейсе eth1
, вы можете использовать эту команду:
- sudo ufw allow in on eth1 to any port 3306
Это позволит другим серверам в вашей частной сети подключаться к вашей базе данных MySQL.
Шаг 7 — Отклонение соединений
Если вы не изменили политику по умолчанию для входящих соединений, UFW настроен так, чтобы отклонять все входящие соединения. Обычно это упрощает процесс создания безопасной политики брандмауэра, требуя от вас создания правил, явно разрешающих определенные порты и IP-адреса.
Иногда вам захочется отклонить конкретные соединения на основе IP-адреса и подсети исходящего трафика, возможно, потому, что вы знаете, что ваш сервер атакуется оттуда. Также, если вы хотите изменить политику входящих соединений на allow
(что не рекомендуется), вам придется создать правила deny
для любых служб или IP-адресов, для которых вы не хотите разрешать соединения.
Чтобы написать правила deny
, вы можете использовать описанные выше команды, заменив allow
на deny
.
Например, чтобы отклонить соединения HTTP, вы можете использовать эту команду:
- sudo ufw deny http
Или если вы хотите отклонить все соединения от 203.0.113.4
, вы можете использовать эту команду:
- sudo ufw deny from 203.0.113.4
Теперь вы можете узнать, как реализовать правила удаления.
Шаг 8 — Удаление правил
Знание того, как удалять правила брандмауэра, так же важно, как и знание того, как их создавать. Существует два способа указать, какие правила удалять: по номеру правила или само правило. Это аналогично тому, как правила были указаны при их создании.
По номеру правила
Если вы используете номер правила для удаления правил брандмауэра, первое, что вам нужно сделать, это получить список ваших правил брандмауэра. Команда UFW status
имеет опцию numbered
, которая отображает номера рядом с каждым правилом:
- sudo ufw status numbered
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Если вы решите удалить правило 2
, которое разрешает соединения HTTP на порту 80
, вы можете указать это в следующей команде UFW delete
:
- sudo ufw delete 2
Это вызовет запрос подтверждения, на который вы можете ответить y/n
. Ввод y
затем удалит правило 2
. Обратите внимание, что если у вас включен IPv6, вы захотите удалить соответствующее правило IPv6.
По фактическому правилу
Альтернативой номерам правил является указание конкретного правила для удаления. Например, если вы хотите удалить правило allow http
, вы можете написать так:
- sudo ufw delete allow http
Вы также можете указать правило с помощью allow 80
вместо имени службы:
- sudo ufw delete allow 80
Этот метод удалит как правила IPv4, так и IPv6, если они существуют.
Шаг 9 — Проверка статуса и правил UFW
В любое время вы можете проверить статус UFW с помощью этой команды:
- sudo ufw status verbose
Если UFW отключен, что является значением по умолчанию, вывод будет таким:
OutputStatus: inactive
Если UFW активен, что должно быть, если вы следовали Шагу 3, вывод будет указывать на то, что он активен, и перечислит любые установленные вами правила. Например, если брандмауэр настроен на разрешение подключений SSH (порт 22
) откуда угодно, вывод может содержать что-то вроде этого:
OutputStatus: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Используйте команду status
, если хотите проверить, как UFW настроил брандмауэр.
Шаг 10 — Отключение или сброс UFW (по желанию)
Если вы решите не использовать UFW, вы можете отключить его этой командой:
- sudo ufw disable
Любые правила, которые вы создали с помощью UFW, больше не будут активны. Вы всегда можете запустить sudo ufw enable
, если вам нужно будет активировать его позже.
Если у вас уже настроены правила UFW, но вы решите начать сначала, вы можете использовать команду сброса:
- sudo ufw reset
Это отключит UFW и удалит любые правила, которые вы ранее определили. Имейте в виду, что значения по умолчанию не вернутся к своим первоначальным настройкам, если вы их изменяли в любой момент. Это даст вам свежий старт с UFW.
Вывод
Ваш брандмауэр теперь настроен на разрешение (по крайней мере) соединений SSH. Обязательно разрешите любые другие входящие соединения, которые нужны вашему серверу, ограничивая при этом ненужные соединения. Это обеспечит функциональность и безопасность вашего сервера.
Чтобы узнать о более распространенных конфигурациях UFW, ознакомьтесь с этим руководством по Основы UFW: Общие правила и команды брандмауэра.