Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
ufw [2024/06/02 15:10] (текущий) – [Настройка правил фаервола (iptables) с помощью UFW] darkfire
Строка 1: Строка 1:
 +====== Настройка правил фаервола (iptables) с помощью UFW ======
 +~~Title: iptables для начинающих: Простое управление брандмауэром с UFW ~~
 +{{htmlmetatags>
 +metatag-description=(iptables - это сложно? Не с UFW! UFW – это интерфейс iptables, предназначенный для упрощения процесса настройки брандмауэра в Ubuntu.)
 +}}
  
 +{{ :ufw-na-ubuntu.png?nolink&400 |}}
 +
 +Uncomplicated Firewall (ufw) (англ.  незамысловатый межсетевой экран) — это межсетевой экран, предназначенный быть простым в использовании. Он использует интерфейс командной строки, состоящий из небольшого числа простых команд, и использует [[iptables|iptables]] для конфигурации.
 +
 +GUI for Uncomplicated Firewall (Gufw) (англ.  графический интерфейс пользователя для незамысловатого межсетевого экрана) — это, как следует из его названия, графический интерфейс для UFW (Uncomplicated Firewall). Он был разработан для [[Ubuntu|Ubuntu]].
 +
 +UFW предназначен для легкого, интуитивно понятного управления межсетевым экраном Ubuntu. Он поддерживает общие задачи, такие как разрешение или блокирование предварительно настроенных, общих P2P, или отдельных портов. Gufw работает на UFW, запускается на Ubuntu, а также на любой платформе, где доступны Python, GTK+ и UFW.
 +
 +  * [[cheklist_nastrojka_vps_vds_vydelennogo_servera_linux]]
 +  * [[Fail2ban]] - защита от брутфорса
 +===== Шаг 1: Введения в UFW =====
 +
 +Все современные решения Линукс по сетевой защите используют подсистему ядра Netfilter (сетевой фильтр).
 +
 +Система пакетной фильтрации на уровне ядра неудобна для использования без пользовательского интерфейса для её управления. Для управления предназначен [[iptables|iptables]]. Когда пакет попадает на ваш сервер, он передается подсистеме Netfilter для одобрения, изменения или отказа на основе правил, которые она получает от интерфейса пользователя через iptables. Таким образом iptables - это все, что вам нужно для управления вашей сетевой защитой, но он сложен в настройке. Поэтому был разработан Uncomplicated Firewall (ufw) (незамысловатый межсетевой экран) для легкой настройки iptables. UFW предоставляет дружественный способ создания сетевой защиты для [[ipv4|IPv4]] и [[ipv6|IPv6]].
 +
 +===== Шаг 2: Установить брандмауэр UFW =====
 +UFW устанавливается в Ubuntu по умолчанию во всех случаях, кроме варианта с минимальной установкой. Зачастую я заказываю сервера VPS/VDS с минимальной установкой Ubuntu, поэтому на нем нет iptables.
 +
 +Если UFW нет, мы можем установить его с помощью команды:
 +<file bash>
 +sudo apt install ufw
 +</file>
 +
 +<alert type="danger" icon="fa fa-warning">Часто на серверах по умолчанию включен iptables, крайне не рекомендуется использовать одновременно два инструмента для настройки firewall во избежание конфликта правил. В случае, если у вас одновременно работает и iptables, и ufw, то будет применено последнее созданное правило.</alert>
 +
 +==== Шаг 2.1: Конфигурационный файл UFW (опционально) ====
 +Конфигурационный файл UFW находится в /etc/default/ufw. 
 +
 +Вы можете в нем настроить, например поддержку правил для IPv6. Для поддержки правил IPv6 проверьте параметр IPV6=yes конфигурационного файла.
 +
 +Политики безопасности по умолчанию также находятся в файле /etc/default/ufw и могут быть изменены с помощью следующей команды:
 +<file bash>
 +sudo ufw default deny incoming
 +sudo ufw default allow outgoing
 +</file> Первое правило запрещает все входящие подключения, второе разрешает исходящие.
 +
 +==== Шаг 2.2: Создание профилей приложений для UFW (опционально) ====
 +Ufw умеет работать с профилями приложений, находящиеся в каталоге /etc/ufw/applications.d, который определяет приложение или службу и соответствующие им настройки безопасности, например открытые или закрытые порты.
 +
 +Посмотреть созданные профили можно при помощи команды:
 +<file bash>
 +sudo ufw app list
 +</file>
 +Просмотр детальной информации, например о приложении OpenSSH:
 +<file bash>
 +$ 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
 +</file>
 +
 +Все профили создаются вручную. Для создания профиля приложения перейдите в директорию /etc/ufw/applications.d. Создайте текстовый файл с любым названием и вставьте в него строки следующего формата:
 +<file php>
 +[<название_профиля>]
 +title=<заголовок>
 +description=<краткое описание>
 +ports=<список портов>/<протокол>
 +</file>
 +После создания своего приложения запустите команду ufw reload, чтобы брандмауэр увидел ваш файл.
 +===== Шаг 3: Первоначальная настройка сетевого фильтра при помощи UFW =====
 +Вы только что установили сервер Linux Ubuntu с поддержкой UFW, не важно на вашем компьютере или на виртуальном хостинге. Ниже описаны шаги которые нужно сделать для безопасности вашего сервера. Соответственно под ваши нужды правила фаервола в дальнейшем должны расширяться.
 +
 +Закрываем все кроме доступа к сервер по протоколу SSH:
 +<file bash>
 +$ sudo ufw app list
 +Available applications:
 +  OpenSSH
 +  Nginx Full
 +  Nginx HTTP
 +  Nginx HTTPS
 +  OpenSSH
 +  Postfix
 +</file>
 +Разрешаем SSH и Nginx Full
 +<file bash>
 +$ sudo ufw allow OpenSSH
 +$ sudo ufw allow 'Nginx Full'
 +</file>
 +Включаем ufw
 +<file bash>
 +$ sudo ufw enable
 +Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
 +Firewall is active and enabled on system startup
 +</file>
 +Проверяем что получилось:
 +<file bash>
 +$ 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)
 +</file> Из листинга мы видим, что все входящие пакеты на серверы запрещены, кроме службы SSH, а все исходящие разращены.
 +
 +
 +==== Шаг 3.1: UFW правила для протокола ICMP ====
 +Протокол [[ICMP|ICMP]] должен быть открыт в файрволе всегда!
 +
 +ufw с одной стороны не позволяет указывать правила icmp с помощью команды интерфейса командной строки. Но он позволяет вам настраивать набор правил с помощью файлов правил, которые представляют собой файлы стиля iptables-restore.
 +
 +ufw по умолчанию разрешает определенный icmp-трафик, включая эхо-ответ icmp, и это уже настроено по умолчанию в /etc/ufw/before.rules:
 +
 +<file bash>
 +-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
 +</file>
 +Если ваш хост не отвечает на пинг, посмотрите в этом файле, чтобы убедиться, что указанная выше строка присутствует, и если это не работает, посмотрите на пингующий хост и любые брандмауэры между ними.
 +
 +В дистрибутивах Linux на базе Debian, которые поставляются с брандмауэром приложений UFW, вы можете блокировать сообщения [[ICMP|ICMP]], добавив следующее правило в файл /etc/ufw/before.rules, как показано в приведенном ниже отрывке кода.
 +
 +<file bash>
 +-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
 +</file>
 +==== Шаг 3.2: Общая настройка логирования UFW и конкретной службы  ====
 +В Ufw есть опция сохранения логов — журнал событий. По умолчанию логи включены и используется уровень low, что можно проверить командой вывода статуса. Как видите в моем примере настройки по умолчанию Logging: on (low).
 +<file bash>
 +ufw status verbose
 +Status: active
 +Logging: on (low)
 +</file>
 +
 +Для запуска, используйте команду:
 +<file bash>
 +ufw logging on
 +</file>
 +Ufw поддерживает несколько уровней логирования:
 +
 +  * off — отключен.
 +  * low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам.
 +  * medium — все то, что при значении low. Плюс все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости.
 +  * high — работает также как и medium. Плюс все пакеты с ограничением скорости.
 +  * full — также как и high, но без ограниения скорости. 
 +
 +Чтобы задать уровень, укажите его как параметр:
 +<file bash>
 +ufw logging high
 +</file>
 +Файлы относящихся с логам ufw находятся в стандартной директории:
 +<file bash>
 +ls /var/log/ufw*
 +
 +/var/log/ufw.log  /var/log/ufw.log.1  /var/log/ufw.log.2.gz
 +</file>
 +Вы можете добавить правило ведения журнала, если хотите отслеживать определенные службы. Я бы рекомендовал вам изменить уровень ведения журнала на low, чтобы в журналах было меньше беспорядка. Чтобы добавить правило ведения журнала, вам просто нужно следовать синтаксису команды:
 +<file bash>
 +ufw allow log service_name
 +</file>
 +Например, добавим правило журнала для порта 22 протокола [[SSH|SSH]]:
 +<file bash>
 +ufw allow log 22/tcp
 +</file>
 +
 +===== Шаг 4: Настройка NAT (преобразование сетевых адресов) в UFW =====
 +Настройка [[NAT|NAT]] к сожалению не простая задача и нужно править конфигурационные файл UFW before.rules вручную. Чтобы не дублировать контент, все подробно описано в статье [[openvpn#nastrojka_ufw_iptables_dlja_openvpn|Настройка UFW (iptables) для OpenVPN]].
 +
 +Также не забываем включать преобразование NAT на уровне ядра Linux, описано в той же статье.
 +===== Расширенное использование UFW: лучшие команды брандмауэра UFW =====
 +
 +  * sudo ufw enable - активировать UFW для применения внесённых изменений.
 +  * sudo ufw disable - деактивировать UFW.
 +  * Посмотреть статус сетевой защиты - з варианта:
 +<file bash>
 +sudo ufw status
 +sudo ufw status verbose
 +sudo ufw status numbered
 +</file><file>
 +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)
 +</file>
 +  * Возможно разрешить доступ для определенных хостов или сетей. Следующий пример показывает как разрешить доступ хосту с ip адресом 192.168.0.2 на хост с любым ip по протоколу SOCKS. Если заменить 192.168.0.2 на 192.168.0.0/24 то мы разрешим протокол для любого хоста этой локальной сети. Добавление опции **–dry-run** команде ufw выведет список правил, но не применит их.<file bash>
 +sudo ufw --dry-run allow proto tcp from 192.168.0.2 to any port 1080
 +</file>
 +Простые варианты разрешения доступа с удаленного IP и открытие порта
 +<file bash>
 +ufw allow from xxx.xxx.xxx.xxx
 +ufw allow 6000:6007/tcp
 +ufw allow 6000:6007/udp
 +</file>
 +<file bash>
 +sudo ufw allow proto tcp from 192.168.0.2 to any port 1080
 +</file>
 +  * Правила могут быть добавлены с использованием нумерованного формата:<file>
 +sudo ufw insert 1 allow proto tcp from 37.73.96.0/20 to any port 1080
 +</file>
 +==== Как удалить правило в UFW ====
 +
 +Для удаления правила используйте delete
 +<file bash>
 +sudo ufw delete deny proto tcp from any to any port 1080
 +</file>
 +Или еще проще удалять по номеру правила. Чтобы узнать номер правила в UFW используйте ключ numbered:
 +<file bash>
 +ufw status numbered
 +Status: active
 +
 +     To                         Action      From
 +     --                         ------      ----
 +[ 1] Nginx Full                 ALLOW IN    Anywhere
 +[ 2] Anywhere                   ALLOW IN    10.26.95.11
 +[ 3] Nginx Full (v6)            ALLOW IN    Anywhere (v6)
 +
 +</file>
 +Выше мы узнали номера правило, теперь для удаления третьего правила используйте нижеприведенную команду. У вас потребуют подтвердить удаление правила.
 +<file bash>
 +ufw delete 3
 +
 +Deleting:
 + allow from 10.26.95.11
 +Proceed with operation (y|n)? y
 +Rule deleted
 +</file>
 +==== Отключение или сброс UFW ====
 +Если вы уже настроили правила UFW, но решите начать заново, вы можете использовать эту команду.
 +<file bash>
 +ufw reset
 +</file>
 +Эта команда отключит UFW и удалит все ранее заданные правила, кроме правил по умолчанию. Правила по умолчанию (запрет входящих соединений и разрешение исходящих.) задаются командами:
 +<file bash>
 +sudo ufw default deny incoming
 +sudo ufw default allow outgoing
 +</file>
 +==== Удаление правил UFW ====
 +Существует два способа удаления правил. Первый — по номеру правила. Выполните команду:
 +<file bash>
 +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)
 +</file>
 +После этого выполните команду ufw delete и укажите номер правила, которое следует удалить, например правило 2:
 +<file bash>
 +ufw delete 2
 +</file>
 +Второй способ заключается в том, что после команды ufw delete используется фактическое правило, например:
 +<file bash>
 +ufw delete allow http
 +или
 +ufw delete allow 80
 +</file>
 +<panel type="primary" title="Читайте также">
 +  * [[firewalld]]
 +  * [[zabbix#shag_8_nastrojka_brandmauehra_dlja_zabbix|Настройка брандмауэра для Zabbix]]
 +  * [[iptables|Как перенаправить пакет с IP:PORT на localhost:PORT]]
 +</panel>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!