Как настроить брандмауэр с помощью UFW на Ubuntu

Введение

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

Этот учебник покажет вам, как настроить брандмауэр с помощью UFW на Ubuntu v18.04 и выше.

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

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

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

  • Сервер, работающий под управлением Ubuntu, а также пользователь без прав администратора с привилегиями sudo. Для руководства по настройке этих параметров выберите свое распределение из этого списка и следуйте нашему Руководству по первоначальной настройке сервера.

  • UFW устанавливается по умолчанию в Ubuntu. Если по какой-то причине он был удален, вы можете установить его с помощью sudo apt install ufw.

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

  1. Включение IPv6
  2. Установка стандартных политик
  3. Разрешение SSH-соединений
  4. Включение UFW
  5. Разрешение любых других необходимых соединений
  6. Отклонение соединений
  7. Удаление правил брандмауэра
  8. Проверка статуса и правил UFW
  9. Как отключить или сбросить брандмауэр на Ubuntu

Шаг 1 — Убедитесь, что включен IPv6

В последних версиях Ubuntu IPv6 включен по умолчанию. На практике это означает, что большинство правил брандмауэра, добавленных на сервер, будут включать как IPv4, так и IPv6 версии, последние определены ключевым словом v6 в выводе команды статуса UFW. Чтобы убедиться, что IPv6 включен, вы можете проверить файл конфигурации UFW по пути /etc/default/ufw. Откройте этот файл, используя nano или ваш редактор командной строки:

  1. sudo nano /etc/default/ufw

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

/etc/default/ufw excerpt
  1. IPV6=yes

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

Когда UFW будет включен на следующем этапе этого руководства, он будет настроен на запись правил брандмауэра как для IPv4, так и для IPv6.

Шаг 2 — Настройка стандартных политик

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

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

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

Чтобы установить стандартную политику входящего трафика UFW на deny, выполните:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

Чтобы установить стандартную политику исходящего трафика UFW на allow, выполните:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

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

Шаг 3 — Разрешение SSH-подключений

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

Разрешение профиля приложения OpenSSH для UFW

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

  1. sudo ufw app list
Output
Available applications: OpenSSH

Чтобы включить профиль приложения OpenSSH, выполните:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

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

Разрешение SSH по имени службы

Другой способ настройки UFW для разрешения входящих соединений SSH – ссылаться на его имя службы: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW знает, какие порты и протоколы использует служба, основываясь на файле /etc/services.

Разрешение SSH по номеру порта

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

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

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

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

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

Шаг 4 — Включение UFW

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

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

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

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

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

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

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

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

  • HTTP на порту 80, который используют незашифрованные веб-серверы, используя sudo ufw allow http или sudo ufw allow 80
  • HTTPS на порту 443, который используют зашифрованные веб-серверы, можно разрешить с помощью sudo ufw allow https или sudo ufw allow 443
  • Apache с поддержкой как HTTP, так и HTTPS, используя sudo ufw allow ‘Apache Full’
  • Nginx с поддержкой как HTTP, так и HTTPS, используя sudo ufw allow ‘Nginx Full’

Не забудьте проверить, какие профили приложений доступны для вашего сервера с помощью sudo ufw app list.

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

Определенные диапазоны портов

Вы можете указать диапазоны портов с помощью 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
Output
Rule added

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

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Подсети

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

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

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

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

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

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

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

  1. ip addr
Output Excerpt
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 (порт 80) для него с помощью этой команды:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

Таким образом, ваш сервер сможет принимать HTTP-запросы из общедоступного Интернета.

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

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

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

Шаг 6 — Отклонение подключений

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

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

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

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

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

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

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

В некоторых случаях вы также можете захотеть заблокировать исходящие соединения с сервера. Чтобы запретить всем пользователям использование порта на сервере, например порта 25 для SMTP-трафика, вы можете использовать запретить исходящее, за которым следует номер порта:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Это заблокирует все исходящие SMTP-трафик на сервере.

Шаг 7 — Удаление правил

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

Удаление правила UFW по номеру

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

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

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

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

Это попросит подтверждение, а затем удалит правило 2, которое разрешает HTTP-соединения. Обратите внимание, что если у вас включен IPv6, вам также следует удалить соответствующее правило IPv6.

Удаление правила UFW по имени

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

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

Команда delete работает таким же образом для правил, которые были созданы с ссылкой на сервис по его имени или порту. Например, если вы ранее установили правило для разрешения HTTP-соединений с помощью sudo ufw allow http, так можно удалить это правило:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

Поскольку имена сервисов можно использовать взамен портов при указании правил, вы также можете обратиться к тому же правилу как allow 80, вместо allow http:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

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

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

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

  1. sudo ufw status verbose

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

Output
Status: inactive

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

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

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

Шаг 9 — Отключение или сброс брандмауэра

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

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

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

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

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

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

Разверните ваши веб-приложения из GitHub, используя Платформу приложений DigitalOcean. Позвольте DigitalOcean масштабировать ваше приложение.

Вывод

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

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

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