Настройка брандмауэра UFW на сервере Ubuntu 20.04

UFW (Uncomplicated Firewall) – это интерфейс, предназначенный для упрощения настройки технологий фильтрации пакетов iptables и nftables. Инструмент iptables надёжный и гибкий, но новичку будет непросто настроить его самостоятельно.

Данный мануал поможет настроить брандмауэр с помощью UFW в Ubuntu 20.04

Требования

Для работы вам нужен сервер Ubuntu 20.04, настроенный по этому мануалу. Чтобы приступить к настройке UFW, войдите в сессию пользователя с доступом к sudo.

В Ubuntu инструмент UFW установлен по умолчанию. Если в вашей системе он по какой-либо причине не установлен, введите команду:

sudo apt install ufw

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

Данный мануал предназначен для протокола IPv4, но подойдёт и для IPv6.

Если на вашем сервере Ubuntu включен протокол IPv6, убедитесь, что UFW поддерживает его. Откройте конфигурации UFW:

sudo nano /etc/default/ufw

Убедитесь, что в настройках есть строка:

IPV6=yes

Сохраните и закройте файл (Ctrl-X, Y, Enter). После включения UFW будет поддерживать правила для IPv4 и IPv6.

Прежде чем приступить к работе над правилами брандмауэра, нам нужно убедиться, что он поддерживает соединения SSH. Давайте посмотрим на политику UFW по умолчанию.

2: Политика по умолчанию

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

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

Теперь брандмауэр сбрасывает все входящие и поддерживает все исходящие соединения.

Стандартные правила брандмауэра подходят для персональных компьютеров; серверам обычно необходимо принимать входящий трафик.

3: Настройка соединений SSH

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

Чтобы разблокировать соединения SSH, введите:

sudo ufw allow ssh

Это правило разрешит входящие соединения по порту 22 (порт SSH по умолчанию). UFW знает имена некоторых сервисов (в том числе и SSH). Все эти сервисы перечислены в файле /etc/services.

Вместо названия сервиса в правиле можно указать порт. Например:

sudo ufw allow 22

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

sudo ufw allow 2222

4: Включение UFW

Чтобы включить UFW, введите:

sudo ufw enable

Вы получите предупреждение о том, что команда может прервать текущие SSH-соединения. Поскольку только что вы разблокировали трафик ssh, этого не произойдёт. Можно нажать y и Enter.

Теперь брандмауэр включен. Чтобы просмотреть текущий набор правил, введите:

sudo ufw status verbose

Далее мы рассмотрим, как разрешить или заблокировать разные нужные соединения.

5: Поддержка других соединений

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

Ниже мы приведём несколько правил для поддержки наиболее востребованных сервисов.

Незашифрованные соединения HTTP можно разблокировать с помощью команд:

sudo ufw allow http
sudo ufw allow 80

Зашифрованные соединения HTTPS можно разрешить при помощи команд:

sudo ufw allow https
sudo ufw allow 443

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

UFW позволяет разблокировать диапазоны портов. Это полезно для тех приложений, которые используют несколько портов.

К примеру, чтобы разрешить трафик X11, нужно разблокировать порты 6000-6007:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Указывая диапазон портов, вы должны задать протокол (tcp или udp). Если вы не укажете протокол, UFW будет использовать оба (в большинстве случаев это нормально).

Настройка IP-адресов

Также UFW может разблокировать трафик от определённых IP-адресов. К примеру, чтобы разрешить доступ IP-адресу 203.0.113.4, нужно ввести from и затем сам адрес:

sudo ufw allow from 203.0.113.4

Вы можете также ограничить доступ для IP конкретным портом с помощью опции to any port. Например, чтобы разрешить IP-адресу 203.0.113.4 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

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

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 и т.п.).

Чтобы разблокировать трафик HTTP для интерфейса eth0, введите:

sudo ufw allow in on eth0 to any port 80

Чтобы сервер MySQL (порт 3306) мог прослушивать соединения интерфейса частной сети eth1, нужно ввести:

sudo ufw allow in on eth1 to any port 3306

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

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

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

Правила, блокирующие трафик, пишутся точно так же, но вместо команды allow используется deny.

К примеру, чтобы заблокировать HTTP, нужно ввести:

sudo ufw deny http

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

sudo ufw deny from 203.0.113.4

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

Существует два способа удалить правило: указать номер правила или само правило.

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

Чтобы узнать номер правила в списке, просмотрите список существующих правил. Для этого запросите состояние брандмауэра с опцией 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 (открывающее трафик HTTP по порту 80), нужно запустить команду:

sudo ufw delete 2

Брандмауэр запросит подтверждение.

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

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

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

sudo ufw delete allow http

или

sudo ufw delete allow 80

Этот метод работает и для IPv4, и для IPv6.

8: Проверка состояния и правил UFW

Чтобы проверить состояние UFW, введите:

sudo ufw status verbose

По умолчанию UFW отключен:

Status: inactive

Если брандмауэр включен, на экране появится его состояние и список правил. К примеру, если брандмауэр поддерживает соединения 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

9: Отключение или сброс правил UFW (опционально)

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

sudo ufw disable

Все правила будут дезактивированы.

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

sudo ufw reset

Эта команда сбросит все текущие правила брандмауэра. Имейте в виду: при этом политика по умолчанию не будет восстановлена.

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

Заключение

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

Читайте также: Основы UFW: общие правила и команды фаервола

Tags: , , , , , ,