Поиск по сайту:

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


Введение

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

В этом руководстве показано, как настроить брандмауэр с помощью UFW в Ubuntu 18.04.

Предпосылки

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

  • Один сервер Ubuntu 18.04 с пользователем без полномочий root sudo, которого можно настроить, выполнив шаги 1–3 в руководстве по начальной настройке сервера с Ubuntu 18.04.

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

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

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

  1. sudo nano /etc/default/ufw

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

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 разрешить «Apache Full»
  • Nginx с HTTP и HTTPS, используя sudo ufw allow ‘Nginx Full’

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

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

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

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

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

  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-адресов, для которых вы не хотите разрешать подключения.

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

Например, чтобы запретить 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-трафика, вы можете использовать deny out, за которым следует номер порта:

  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 (необязательно)

Если вы решите, что не хотите использовать 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. Имейте в виду, что политики по умолчанию не изменятся на свои исходные настройки, если вы изменили их в какой-либо момент.

Заключение

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

Чтобы узнать о более распространенных конфигурациях UFW, ознакомьтесь с руководством UFW Essentials: Common Firewall Rules and Commands.