Настройка правил фаервола (iptables) с помощью UFW

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

GUI for Uncomplicated Firewall (Gufw) (англ. графический интерфейс пользователя для незамысловатого межсетевого экрана) — это, как следует из его названия, графический интерфейс для UFW (Uncomplicated Firewall). Он был разработан для Ubuntu.

UFW предназначен для легкого, интуитивно понятного управления межсетевым экраном Ubuntu. Он поддерживает общие задачи, такие как разрешение или блокирование предварительно настроенных, общих P2P, или отдельных портов. Gufw работает на UFW, запускается на Ubuntu, а также на любой платформе, где доступны Python, GTK+ и UFW.

Все современные решения Линукс по сетевой защите используют подсистему ядра Netfilter (сетевой фильтр).

Система пакетной фильтрации на уровне ядра неудобна для использования без пользовательского интерфейса для её управления. Для управления предназначен iptables. Когда пакет попадает на ваш сервер, он передается подсистеме Netfilter для одобрения, изменения или отказа на основе правил, которые она получает от интерфейса пользователя через iptables. Таким образом iptables - это все, что вам нужно для управления вашей сетевой защитой, но он сложен в настройке. Поэтому был разработан Uncomplicated Firewall (ufw) (незамысловатый межсетевой экран) для легкой настройки iptables. UFW предоставляет дружественный способ создания сетевой защиты для IPv4 и IPv6.

UFW устанавливается в Ubuntu по умолчанию во всех случаях, кроме варианта с минимальной установкой. Зачастую я заказываю сервера VPS/VDS с минимальной установкой Ubuntu, поэтому на нем нет iptables.

Если UFW нет, мы можем установить его с помощью команды:

sudo apt install ufw

Конфигурационный файл UFW находится в /etc/default/ufw.

Вы можете в нем настроить, например поддержку правил для IPv6. Для поддержки правил IPv6 проверьте параметр IPV6=yes конфигурационного файла.

Политики безопасности по умолчанию также находятся в файле /etc/default/ufw и могут быть изменены с помощью следующей команды:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Первое правило запрещает все входящие подключения, второе разрешает исходящие.

Ufw умеет работать с профилями приложений, находящиеся в каталоге /etc/ufw/applications.d, который определяет приложение или службу и соответствующие им настройки безопасности, например открытые или закрытые порты.

Посмотреть созданные профили можно при помощи команды:

sudo ufw app list

Просмотр детальной информации, например о приложении OpenSSH:

$ sudo ufw app info OpenSSH
Profile: OpenSSH
Title: Secure shell server, an rshd replacement
Description: OpenSSH is a free implementation of the Secure Shell protocol.
 
Port:
  22/tcp

Все профили создаются вручную. Для создания профиля приложения перейдите в директорию /etc/ufw/applications.d. Создайте текстовый файл с любым названием и вставьте в него строки следующего формата:

[<название_профиля>]
title=<заголовок>
description=<краткое описание>
ports=<список портов>/<протокол>

После создания своего приложения запустите команду ufw reload, чтобы брандмауэр увидел ваш файл.

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

Закрываем все кроме доступа к сервер по протоколу SSH:

$ sudo ufw app list
Available applications:
  OpenSSH
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
  Postfix

Разрешаем SSH и Nginx Full

$ sudo ufw allow OpenSSH
$ sudo ufw allow 'Nginx Full'

Включаем ufw

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Проверяем что получилось:

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
 
To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

Из листинга мы видим, что все входящие пакеты на серверы запрещены, кроме службы SSH, а все исходящие разращены.

Протокол ICMP должен быть открыт в файрволе всегда!

ufw с одной стороны не позволяет указывать правила icmp с помощью команды интерфейса командной строки. Но он позволяет вам настраивать набор правил с помощью файлов правил, которые представляют собой файлы стиля iptables-restore.

ufw по умолчанию разрешает определенный icmp-трафик, включая эхо-ответ icmp, и это уже настроено по умолчанию в /etc/ufw/before.rules:

-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

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

В дистрибутивах Linux на базе Debian, которые поставляются с брандмауэром приложений UFW, вы можете блокировать сообщения ICMP, добавив следующее правило в файл /etc/ufw/before.rules, как показано в приведенном ниже отрывке кода.

-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

В Ufw есть опция сохранения логов — журнал событий. По умолчанию логи включены и используется уровень low, что можно проверить командой вывода статуса. Как видите в моем примере настройки по умолчанию Logging: on (low).

ufw status verbose
Status: active
Logging: on (low)

Для запуска, используйте команду:

ufw logging on

Ufw поддерживает несколько уровней логирования:

  • off — отключен.
  • low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам.
  • medium — все то, что при значении low. Плюс все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости.
  • high — работает также как и medium. Плюс все пакеты с ограничением скорости.
  • full — также как и high, но без ограниения скорости.

Чтобы задать уровень, укажите его как параметр:

ufw logging high

Файлы относящихся с логам ufw находятся в стандартной директории:

ls /var/log/ufw*
 
/var/log/ufw.log  /var/log/ufw.log.1  /var/log/ufw.log.2.gz

Вы можете добавить правило ведения журнала, если хотите отслеживать определенные службы. Я бы рекомендовал вам изменить уровень ведения журнала на low, чтобы в журналах было меньше беспорядка. Чтобы добавить правило ведения журнала, вам просто нужно следовать синтаксису команды:

ufw allow log service_name

Например, добавим правило журнала для порта 22 протокола SSH:

ufw allow log 22/tcp

Настройка NAT к сожалению не простая задача и нужно править конфигурационные файл UFW before.rules вручную. Чтобы не дублировать контент, все подробно описано в статье Настройка UFW (iptables) для OpenVPN.

Также не забываем включать преобразование NAT на уровне ядра Linux, описано в той же статье.

  • sudo ufw enable - активировать UFW для применения внесённых изменений.
  • sudo ufw disable - деактивировать UFW.
  • Посмотреть статус сетевой защиты - з варианта:
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered
Status: active

To                         Action      From
--                         ------      ----
22                         LIMIT       Anywhere
443                        ALLOW       Anywhere
80                         ALLOW       Anywhere
22 (v6)                    LIMIT       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
  • Возможно разрешить доступ для определенных хостов или сетей. Следующий пример показывает как разрешить доступ хосту с ip адресом 192.168.0.2 на хост с любым ip по протоколу SOCKS. Если заменить 192.168.0.2 на 192.168.0.0/24 то мы разрешим протокол для любого хоста этой локальной сети. Добавление опции –dry-run команде ufw выведет список правил, но не применит их.
    sudo ufw --dry-run allow proto tcp from 192.168.0.2 to any port 1080

Простые варианты разрешения доступа с удаленного IP и открытие порта

ufw allow from xxx.xxx.xxx.xxx
ufw allow 6000:6007/tcp
ufw allow 6000:6007/udp
sudo ufw allow proto tcp from 192.168.0.2 to any port 1080
  • Правила могут быть добавлены с использованием нумерованного формата:
    sudo ufw insert 1 allow proto tcp from 37.73.96.0/20 to any port 1080
  • Для удаления правила используйте delete:
    sudo ufw delete deny proto tcp from any to any port 1080

Если вы уже настроили правила UFW, но решите начать заново, вы можете использовать эту команду.

ufw reset

Эта команда отключит UFW и удалит все ранее заданные правила, кроме правил по умолчанию. Правила по умолчанию (запрет входящих соединений и разрешение исходящих.) задаются командами:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Существует два способа удаления правил. Первый — по номеру правила. Выполните команду:

ufw status numbered
tatus: active
 
 
 
 
     To                         Action      From
 
     --                         ------      ----
 
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 80                         ALLOW IN    Anywhere
[ 3] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 4] 80 (v6)                    ALLOW IN    Anywhere (v6)

После этого выполните команду ufw delete и укажите номер правила, которое следует удалить, например правило 2:

ufw delete 2

Второй способ заключается в том, что после команды ufw delete используется фактическое правило, например:

ufw delete allow http
или
ufw delete allow 80
PQ VPS сервера в 28+ странах.