Введение
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
- Включение поддержки IPv6
- Настройка стандартных политик
- Разрешение подключений по SSH
- Включение UFW
- Разрешение всех необходимых соединений
- Отклонение соединений
- Удаление правил брандмауэра
- Проверка состояния и правил UFW
- Как отключить или сбросить брандмауэр на Ubuntu
Шаг 1 — Убедитесь, что включен IPv6
В последних версиях Ubuntu IPv6 включен по умолчанию. На практике это означает, что большинство правил брандмауэра, добавленных на сервер, будут включать как версию IPv4, так и IPv6, последняя идентифицируется v6
в выводе команды статуса UFW. Чтобы убедиться, что IPv6 включен, вы можете проверить конфигурационный файл UFW по пути /etc/default/ufw
. Откройте этот файл, используя nano
или ваш редактор командной строки:
Затем убедитесь, что значение IPV6
установлено как yes
. Это должно выглядеть так:
Сохраните и закройте файл. Если вы используете nano
, вы можете сделать это, набрав CTRL+X
, затем Y
и ENTER
для подтверждения.
Когда UFW будет включен на следующем этапе этого руководства, он будет настроен на запись правил брандмауэра как для IPv4, так и для IPv6.
Шаг 2 — Настройка Стандартных Политик
Если вы только начинаете работу с UFW, хорошим первым шагом будет проверка ваших стандартных политик брандмауэра. Эти правила контролируют, как обрабатывать трафик, который не соответствует явно определенным другим правилам.
По умолчанию UFW настроен на блокировку всех входящих подключений и разрешение всех исходящих подключений. Это означает, что любой пытающийся подключиться к вашему серверу не сможет это сделать, в то время как любое приложение внутри сервера сможет связаться с внешним миром. Дополнительные правила для разрешения определенных служб и портов включаются как исключения из этой общей политики.
Чтобы убедиться, что вы сможете следовать за остальной частью этого руководства, вы теперь настроите стандартные политики UFW для входящего и исходящего трафика.
Чтобы установить стандартную политику входящего трафика UFW на deny
, выполните:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Чтобы установить стандартную политику исходящего трафика UFW на allow
, выполните:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Эти команды устанавливают стандартные значения на блокировку входящего и разрешение исходящего подключений. Эти стандартные настройки брандмауэра могут быть достаточными для персонального компьютера, но серверы обычно должны отвечать на входящие запросы от внешних пользователей. Мы рассмотрим это далее.
Шаг 3 — Разрешение подключений через SSH
Если вы включите сейчас свой брандмауэр UFW, то будут отклонены все входящие подключения. Это означает, что вам нужно создать правила, которые явно разрешают легитимные входящие подключения — например, по SSH или HTTP — если вы хотите, чтобы ваш сервер реагировал на такие запросы. Если вы используете облачный сервер, вам, вероятно, захочется разрешить входящие подключения по SSH, чтобы вы могли подключаться и управлять своим сервером.
Разрешение профиля приложения OpenSSH для UFW
После установки большинство приложений, которые зависят от сетевых подключений, регистрируют профиль приложения в UFW, что позволяет пользователям быстро разрешать или запрещать внешний доступ к службе. Вы можете проверить, какие профили в настоящее время зарегистрированы в UFW, с помощью:
OutputAvailable applications:
OpenSSH
Для включения профиля приложения OpenSSH выполните:
OutputRule added
Rule added (v6)
Это создаст правила брандмауэра для разрешения всех подключений к порту 22
, который по умолчанию слушает демон SSH.
Разрешение SSH по имени службы
Другой способ настройки UFW для разрешения входящих подключений SSH – это ссылка на его имя службы: ssh
.
OutputRule added
Rule added (v6)
UFW знает, какие порты и протоколы использует служба на основе файла /etc/services
.
Разрешение SSH по номеру порта
В качестве альтернативы вы можете написать эквивалентное правило, указав порт вместо профиля приложения или имени службы. Например, эта команда работает так же, как и предыдущие примеры:
OutputRule added
Rule added (v6)
Если вы настроили свой демон SSH на использование другого порта, вам придется указать соответствующий порт. Например, если ваш сервер SSH слушает порт 2222
, вы можете использовать эту команду для разрешения подключений через этот порт:
OutputRule added
Rule added (v6)
Теперь, когда ваш брандмауэр настроен на разрешение входящих подключений SSH, вы можете его включить.
Шаг 4 — Включение UFW
Вашу брандмауэр теперь следует настроить для разрешения SSH-соединений. Чтобы проверить, какие правила были добавлены до сих пор, даже когда брандмауэр все еще отключен, вы можете использовать:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
После подтверждения наличия правила для разрешения входящих SSH-соединений вы можете включить брандмауэр с помощью:
OutputCommand 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, использующие порты 6000
–6007
, используйте эти команды:
При указании диапазонов портов с помощью UFW вы должны указать протокол (tcp
или udp
), к которому должны применяться правила. Мы не упоминали об этом ранее, потому что неуказание протокола автоматически разрешает оба протокола, что в большинстве случаев подходит.
Конкретные IP-адреса
При работе с UFW вы также можете указывать IP-адреса в своих правилах. Например, если вы хотите разрешить подключения с определенного IP-адреса, такого как рабочий или домашний IP-адрес 203.0.113.4
, вам нужно использовать параметр from
, указав затем IP-адрес, который вы хотите разрешить:
OutputRule added
Вы также можете указать порт, к которому разрешено подключение IP-адреса, добавив to any port
, за которым следует номер порта. Например, если вы хотите разрешить 203.0.113.4
подключаться к порту 22
(SSH), используйте эту команду:
OutputRule added
Подсети
Если вы хотите разрешить подсеть IP-адресов, вы можете сделать это, используя нотацию CIDR для указания маски подсети. Например, если вы хотите разрешить все IP-адреса в диапазоне от 203.0.113.1
до 203.0.113.254
, вы можете использовать эту команду:
OutputRule added
Точно так же вы можете указать порт назначения, к которому подсеть 203.0.113.0/24
имеет право подключаться. Снова мы будем использовать порт 22
(SSH) в качестве примера:
OutputRule added
Подключения к определенному сетевому интерфейсу
Если вы хотите создать правило брандмауэра, которое применяется только к конкретному сетевому интерфейсу, вы можете сделать это, указав “allow in on”, а затем имя сетевого интерфейса.
Вам может понадобиться найти ваши сетевые интерфейсы перед продолжением. Для этого используйте эту команду:
Output Excerpt2: 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
) для него с помощью этой команды:
OutputRule added
Rule added (v6)
Это позволит вашему серверу получать запросы HTTP из общедоступного интернета.
Или, если вы хотите, чтобы ваш сервер базы данных MySQL (порт 3306
) слушал подключения на частном сетевом интерфейсе eth1
, например, вы можете использовать эту команду:
OutputRule added
Rule added (v6)
Это позволит другим серверам в вашей частной сети подключаться к вашей базе данных MySQL.
Шаг 6 — Отклонение подключений
Если вы не изменили политику по умолчанию для входящих подключений, UFW настроен на отклонение всех входящих подключений. Обычно это упрощает процесс создания безопасной политики брандмауэра, требуя создания правил, явно разрешающих определенные порты и IP-адреса.
Однако иногда вам может понадобиться отклонить конкретные соединения на основе IP-адреса и подсети источника, возможно, потому что вы знаете, что ваш сервер подвергается атаке оттуда. Кроме того, если вы хотите изменить свою стандартную входящую политику на разрешить (что не рекомендуется), вам придется создать правила запрета для любых служб или IP-адресов, для которых вы не хотите разрешить соединения.
Для написания правил запрета вы можете использовать описанные ранее команды, заменяя разрешить на запрет.
Например, чтобы запретить соединения HTTP, вы можете использовать эту команду:
OutputRule added
Rule added (v6)
Или если вы хотите запретить все соединения с 203.0.113.4
, вы можете использовать эту команду:
OutputRule added
В некоторых случаях вам также может потребоваться блокировать исходящие соединения с сервера. Чтобы запретить всем пользователям использовать порт на сервере, например, порт 25
для трафика SMTP, вы можете использовать deny out
, за которым следует номер порта:
OutputRule added
Rule added (v6)
Это заблокирует все исходящие трафики SMTP на сервере.
Шаг 7 — Удаление правил
Умение удалять правила брандмауэра так же важно, как и умение создавать их. Существует два способа указать, какие правила удалить: по номеру правила или по его человекочитаемому обозначению (аналогично тому, как правила были указаны при их создании).
Удаление правила UFW по номеру
Чтобы удалить правило UFW по его номеру, сначала вам нужно получить пронумерованный список всех ваших правил брандмауэра. Команда статуса UFW имеет опцию отображения номеров рядом с каждым правилом, как показано здесь:
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, как показано здесь:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Это попросит подтверждение, а затем удалит правило 2, которое позволяет соединения по протоколу HTTP. Обратите внимание, что если у вас включен IPv6, вам также следует удалить соответствующее правило IPv6.
Удаление правила UFW по имени
Вместо использования номеров правил вы также можете ссылаться на правило по его человекочитаемому наименованию, которое основано на типе правила (обычно allow
или deny
) и имени службы или номере порта, который является целью этого правила, или наименовании профиля приложения в случае его использования. Например, если вы хотите удалить правило allow
для профиля приложения с именем Apache Full
, которое было ранее включено, вы можете использовать:
OutputRule deleted
Rule deleted (v6)
Команда delete
работает так же для правил, которые были созданы с ссылкой на службу по ее имени или порту. Например, если вы ранее установили правило для разрешения HTTP-соединений с помощью sudo ufw allow http
, вот как вы можете удалить это правило:
OutputRule deleted
Rule deleted (v6)
Поскольку имена служб можно использовать взамен номеров портов при указании правил, вы также можете ссылаться на то же правило как allow 80
, вместо allow http
:
OutputRule deleted
Rule deleted (v6)
При удалении правил UFW по имени удаляются и правила IPv4, и IPv6, если они существуют.
Шаг 8 — Проверка статуса и правил UFW
В любое время вы можете проверить статус UFW с помощью этой команды:
Если UFW отключен, как это обычно по умолчанию, вы увидите что-то вроде этого:
OutputStatus: inactive
Если UFW активен, что должно быть, если вы следовали Шагу 3, вывод будет сообщать, что он активен, и перечислять установленные правила. Например, если брандмауэр настроен на разрешение SSH-подключений (порт 22
) с любого места, вывод может выглядеть примерно так:
OutputStatus: 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, вы можете отключить его с помощью этой команды:
OutputFirewall stopped and disabled on system startup
Любые правила, созданные с помощью UFW, больше не будут активны. Вы всегда можете выполнить sudo ufw enable
, если вам понадобится активировать его позже.
Если у вас уже есть настроенные правила UFW, но вы решите начать заново, вы можете использовать команду сброса:
OutputResetting 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