Настройка и установка файрвола (брандмауэра) в Ubuntu с помощью утилиты UFW

В этой статье мы разберем установку и настройку UFW – программы для управления брандмауэром, которая может быть полезна для ограничения нежелательного доступа к серверу VPS/VDS. Также мы рассмотрим, как открыть доступ к часто используемым приложениям после включения брандмауэра, сделав их доступными извне.

Что такое UFW

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

Установка

В современных версиях Ubuntu UFW установлена изначально. Проверить наличие утилиты можно, выполнив команду:

dpkg -l ufw

Пример вывода:

||/ Name       	Version       	Architecture Description
+++-==============-=================-============-=========================================
ii  ufw        	0.36.1-4ubuntu0.1 all      	program for managing a Netfilter firewall

Если по какой-то причине программа не установлена, вы можете самостоятельно установить UFW, выполнив команды:

sudo apt update
sudo apt install ufw

После установки включите сервис UFW:

sudo systemctl enable --now ufw

Настройка UFW

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

Перед включением брандмауэра откройте нужные для работы openssh-порты. Если для ssh используется стандартный порт 22, выполните команду: 

sudo ufw allow openssh

Если вы изменяли порт ssh на вашем сервере, открыть его можно командой:

sudo ufw allow номер_порта/tcp

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

sudo ufw enable

Добавление правил

UFW позволяет создавать правила брандмауэра с различной степенью гранулярности. Общий синтаксис команды выглядит так:

sudo ufw <rule> <direction> from <source> proto <protocol> on <interface> to <addr> port <port> comment <comment>

Разберем структуру команды:

  • <rule> – тип добавляемого правила. Возможные варианты:
    • allow – разрешить трафик;
    • deny – сбрасывать пакеты (создает правило DROP в iptables) без ответа клиенту;
    • reject – блокирует пакеты (создает правило REJECT в iptables), отвечая клиенту, что адрес недоступен;
    • limit – позволяет ограничить количество подключений до 6 за 30 секунд, может использоваться для ограничения количества попыток подключения по SSH.
  • <direction> – позволяет указать направление трафика. Если параметр не указан, по умолчанию правило создается для входящего трафика. Возможные варианты:
    • in – входящий трафик;
    • out – исходящий трафик.
  • from <source> – позволяет указать источник трафика, может быть как ip-адрес, так и подсеть.
  • proto <protocol> – позволяет задать протокол, для которого будет применяться правило.
  • on <interface> – позволяет задать интерфейс, для которого будет действовать правило.
  • to <addr> – задает, для трафика к какому адресу применяется правило. Может быть как ip-адрес, так и подсеть.
  • port <port> – задает порт, к которому применяется правило. Вы можете указать одиночный порт, несколько через запятую либо промежуток через “:”.
  • comment <comment> – комментарий к правилу.

При написании правила можно использовать как его короткое, так и полное написание. Обязательными являются только тип правила, источник или цель.

Рассмотрим несколько примеров.

Для блокировки всего трафика с IP 111.111.111.111 правило будет выглядеть следующим образом:

sudo ufw deny from 111.111.111.111

Если вам нужно заблокировать его для определенного порта, например, порта 22, укажите его в команде следующим образом:

sudo ufw deny from 111.111.111.111 port 22

Как открыть доступ к популярным приложениям

Чтобы некоторые приложения были доступны извне, потребуется разрешить доступ к ним. Ряд приложений предоставляют готовые правила для UFW. Просмотреть доступные UFW-правила для приложений вы можете командой:

sudo ufw app list

Пример вывода:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Например, чтобы открыть полный доступ к Nginx, можно выполнить команду:

sudo ufw allow “nginx full”

Однако подобные готовые шаблоны есть не для всех приложений. В таком случае можно создать правило для интересующего вас порта. К примеру, чтобы разрешить доступ к программе, использующей порт 9000, введите следующую команду:

sudo ufw allow 9000

Как открыть доступ к MySQL

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

sudo ufw allow 3306

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

sudo ufw allow from <IP> to any port 3306

К примеру, чтобы открыть доступ для IP 185.155.118.192, введите следующую команду:

sudo ufw allow from 185.155.118.192 to any port 3306

Как открыть доступ к PostgreSQL

Для открытия внешнего доступа для всех адресов к PostgreSQL при использовании стандартного порта 5432 используйте команду:

sudo ufw allow 5432

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

sudo ufw allow from <IP> to any port 5432

Так, например, для открытия доступа для IP 185.155.118.192 команда будет выглядеть следующим образом:

sudo ufw allow from 185.155.118.192 to any port 5432

Как открыть доступ для входящего HTTP-трафика

Чтобы открыть доступ для HTTP-трафика, используя стандартный порт 80, добавьте правило командой:

sudo ufw allow 80

Как открыть доступ для входящего HTTPS-трафика

Открыть доступ для HTTPS-трафика на стандартном порту 443 можно, выполнив команду:

sudo ufw allow 443

Как удалить созданное правило

Для удаления правила используется команда ufw delete, которой можно передать либо номер правила, либо само правило. Получить нумерованный список можно командой:

sudo ufw status numbered

Пример вывода:

Status: active

 	To                     	Action  	From
 	--                     	------  	----
[ 1] OpenSSH                	ALLOW IN	Anywhere             	 
[ 2] Anywhere               	REJECT IN   111.111.111.111      	 
[ 3] Anywhere               	DENY IN 	222.222.222.222      	 
[ 4] Anywhere               	DENY IN 	123.123.123.123 35/tcp    
[ 5] Anywhere               	DENY IN 	123.123.123.124 35   	 
[ 6] Anywhere               	LIMIT IN	123.123.221.112 43   	 
[ 7] Nginx HTTPS            	ALLOW IN	Anywhere             	 
[ 8] OpenSSH (v6)           	ALLOW IN	Anywhere (v6)        	 
[ 9] Nginx HTTPS (v6)       	ALLOW IN	Anywhere (v6) 

Для удаления правила с номером 4 команда будет выполняться следующим образом:

sudo ufw remove 4

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

sudo ufw remove from 123.123.123.123 port 35 proto tcp

Как выключить UFW

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

sudo ufw disable

Пример вывода:

Firewall stopped and disabled on system startup

Что делать, если не получается подключиться по ssh после включения

Если после включения UFW вам не удается подключиться к серверу по ssh, можно воспользоваться веб-терминалом для восстановления доступа к серверу. Для этого перейдите в панель управления, после чего нажмите на кнопку веб-терминала в левой части экрана:

terminal

В появившемся окне выберите нужный сервер и авторизуйтесь, используя соответствующие доступы. Пароль от пользователя root отправляется на ваш контактный email при создании сервера.

Частой причиной недоступности сервера по ssh после включения UFW является отсутствие порта sshd в списке разрешенных. Проверьте, какой порт использует sshd, выполнив команду:

sudo ss -tulpan | grep LISTEN.*sshd

Пример вывода:

tcp   LISTEN 0  	128      	0.0.0.0:22       	0.0.0.0:* 	users:(("sshd",pid=849,fd=3))                       	 
tcp   LISTEN 0  	128         	[::]:22          	[::]:* 	users:(("sshd",pid=849,fd=4))

В данном случае нам нужен порт 22. Проверьте существующие правила UFW, выполнив команду: 

sudo ufw status numbered

Если в выводе нет правила, относящегося к openssh, или если вы изменяли стандартный порт sshd и вашего порта также нет в выводе, добавьте правило командой:

sudo ufw allow <port>

В нашем случае это:

sudo ufw allow 22

Проверьте, добавилось ли правило, командой:

sudo ufw status numbered

Затем убедитесь, что ssh работает.

В данной статье мы рассмотрели настройку брандмауэра UFW. 

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

9
661