Введение
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
Подключения к конкретному сетевому интерфейсу
Если вы хотите создать правило брандмауэра, которое применяется только к определенному сетевому интерфейсу, вы можете сделать это, указав “разрешить в на” за которым следует имя сетевого интерфейса.
Вам может понадобиться найти свои сетевые интерфейсы перед продолжением. Для этого используйте эту команду:
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-трафика, вы можете использовать запретить исходящее
, за которым следует номер порта:
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 по имени
Вместо использования номеров правил вы также можете обратиться к правилу по его человекочитаемому наименованию, которое основано на типе правила (обычно разрешить
или запретить
) и имени службы или номере порта, который является целью этого правила, или имени профиля приложения, если оно было использовано. Например, если вы хотите удалить правило разрешить
для профиля приложения с именем 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-22-04