Настройка брандмауэра в Ubuntu 18.04 с помощью упрощенного файрвола UFW

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

Из этой статьи вы узнаете, как настроить брандмауэр с UFW в Ubuntu 18.04.

Данная статья является переводом и адаптацией англоязычной статьи.

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

Для работы по описанным инструкциям вам понадобится сервер Ubuntu 18.04. UFW установлен в Ubuntu по умолчанию. Если на вашем сервере по какой-либо причине он не установлен, воспользуйтесь командой:

sudo apt install -y ufw

Использование IPv6 c UFW (опционально)

Эта статья написана для IPv4, но подойдет и для IPv6. Если на вашем сервере Ubuntu включен IPv6, убедитесь, что UFW поддерживает IPv6, чтобы можно было управлять правилами брандмауэра как для IPv4, так и для IPv6 . Для этого проверьте, что в файле настроек UFW включена поддержка IP6:

sudo grep IPV6 /etc/default/ufw

IPV6=yes

Если значение строки отличается от вышеуказанного, установите его в «yes«. Сохраните и закройте файл. Когда UFW будет включен, он будет поддерживать правила для IPv4 и IPv6. Однако, прежде чем включить UFW, убедимся, что он позволяет устанавливать соединения SSH, иначе после активации вы потеряете доступ к серверу. Начнем с настройки политики по умолчанию.

Настройка политики по умолчанию

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

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

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

Настройка входящих соединений SSH

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

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

sudo ufw allow ssh

Будут созданы правила брандмауэра, которые разрешат все соединения по порту 22, который является портом SSH по умолчанию. UFW знает, что означает порт allow ssh, поскольку он указан в качестве сервиса в файле /etc/services.

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

sudo ufw allow 22

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

sudo ufw allow 2222

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

Включение UFW

Для включения UFW введите:

sudo ufw enable

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

Брандмауэр теперь включен. Запустите команду sudo ufw status verbose для просмотра установленных правил.

Далее мы подробно рассмотрим, как использовать UFW, например, чтобы разрешать или запрещать различные виды соединений.

Поддержка других входящих соединений

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

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

Помимо определения порта или сервиса есть и другие способы настроить поддержку соединений.

Настройка диапазонов портов

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 и сам адрес:

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

В ответе вы увидите имена интерфейсов:

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) с помощью:

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.

Блокирование соединений

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

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

Чтобы создать правила deny, достаточно в командах выше заменить allow на deny. Например, чтобы заблокировать соединения HTTP, введите:

sudo ufw default allow incoming
sudo ufw deny http

Для блокировки соединений IP-адерса 203.0.113.4 воспользуйтесь командой:

sudo ufw deny from 203.0.113.4

Далее рассмотрим способы удаления правил.

Удаление правил

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

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

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

sudo ufw status numbered

Ответ:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

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

sudo ufw delete 2

Программа запросит подтверждение операции удаления. Если сервер поддерживает IPv6, нужно удалить соответствующее правило и для этого протокола.

Удаление правил по полному соответствию

Можно удалить правило, указав само правило. Например, чтобы удалить правило allow http, можно ввести:

sudo ufw delete allow http

Правила будут удалены как для IPv4, так и для IPv6.

Проверка состояния правил брандмауэра

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

sudo ufw status verbose

По умолчанию UFW отключен, поэтому вернется ответ:

Status: inactive

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

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 не требуется, отключите его с помощью команды:

sudo ufw disable

Правила, созданные с помощью UFW будут отключены. Чтобы снова их включить, используйте sudo ufw enable.

Если вы хотите заново переопределить набор правил UFW, выполните:

sudo ufw reset

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

Заключение

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