BLACKBOXЦентр помощи

Файрвол: сетевая фильтрация и ufw/firewalld на сервере

Как работают два уровня фильтрации и как настроить ufw или firewalld, не заблокировав себя.

общееОбновлено 2026-10-09~8 мин чтения
На этой странице

Входящий трафик к вашему серверу BLACKBOX проходит через два уровня фильтрации: сетевую фильтрацию, которой управляет BLACKBOX, и файрвол операционной системы, который настраиваете вы сами (ufw в Ubuntu и Debian, firewalld в AlmaLinux и CentOS Stream). В панели app.blackbox.md настроек файрвола нет, поэтому все команды ниже выполняются на самом сервере — по SSH, под root.

Доступно: всем, у кого есть root-доступ по SSH к серверу BLACKBOX. Другие порты в сетевой фильтрации — по запросу через поддержку.

Два уровня фильтрации

Уровень Кто управляет На новом сервере Как изменить
Сетевая фильтрация BLACKBOX пропускаются SSH (22), HTTP (80), HTTPS (443) и ping напишите в поддержку; настроек файрвола в панели нет
Файрвол в системе (ufw или firewalld) вы выключен или не установлен: BLACKBOX не настраивает его при создании сервера командами из этой статьи

Трафик дойдёт до вашего приложения, только если порт открыт на обоих уровнях. Например:

  • Сайт на портах 80 и 443: сетевая фильтрация их уже пропускает. Если вы включите ufw или firewalld, разрешите их и там.
  • Приложение на порту 3000, 8000 или 8080 недоступно из интернета, даже если разрешить порт в ufw: его отсекает сетевая фильтрация. Опубликуйте приложение через nginx на 80/443 (Приложения Node.js, Python и другие сервисы: nginx как обратный прокси) или попросите поддержку открыть порт.

Чтобы открыть другой порт в сетевой фильтрации, напишите в поддержку: укажите IP-адрес сервера, номер заказа (BBX-…), порт, протокол (TCP или UDP) и для чего он нужен. Каналы связи: Как связаться с поддержкой BLACKBOX.

Внимание Веб- и VNC-консоли для клиентов нет: сервером управляют только по SSH. Прежде чем включать или менять файрвол, откройте вторую SSH-сессию и не закрывайте её, пока не убедитесь, что новое подключение проходит. Если доступ всё же потерян, напишите в поддержку: Потерян доступ к серверу (пароль или ключ).

Оставьте порт 22 открытым для BLACKBOX

Кнопки панели (например, «Сбросить пароль», «Добавить SSH-ключ», «Отключить вход по паролю») и AI-ассистент подключаются к серверу по SSH на порт 22 под root с ключом управления. Если разрешить порт 22 только для вашего IP-адреса, эти функции перестанут работать.

  • Разрешите порт 22 для любых адресов, а SSH защитите ключами, ограничением ufw limit (см. ниже) и fail2ban: Защита от подбора паролей с помощью fail2ban.
  • Не переносите SSH на другой порт: и сетевая фильтрация, и панель работают с портом 22.
  • Если всё же хотите ограничить SSH по IP-адресам, сначала согласуйте это с поддержкой. Подробнее: Ключи BLACKBOX на вашем сервере.

Ubuntu и Debian: ufw

В Ubuntu ufw уже установлен, но выключен. В Debian его может не быть — первая команда ниже его установит.

  1. Обновите список пакетов, установите ufw (в Ubuntu команда установки лишь сообщит, что пакет уже есть) и проверьте состояние. Ожидаемый результат — Status: inactive.

    apt update
    apt install -y ufw
    ufw status
  2. Разрешите SSH до включения файрвола. ufw ответит «Rules updated» (или «Rule added», если файрвол уже включён). Вместо 22/tcp можно указать имя профиля OpenSSH; тогда используйте ту же форму и для ограничения, описанного ниже.

    ufw allow 22/tcp
  3. Если на сервере работает сайт, разрешите HTTP и HTTPS:

    ufw allow 80,443/tcp
  4. Включите файрвол. На вопрос «Command may disrupt existing ssh connections. Proceed with operation (y|n)?» ответьте y. Подтверждение: «Firewall is active and enabled on system startup».

    ufw enable
  5. Проверьте правила:

    ufw status verbose

    Результат будет примерно таким:

    Status: active
    Logging: on (low)
    Default: deny (incoming), allow (outgoing), disabled (routed)
    New profiles: skip
    
    To                         Action      From
    --                         ------      ----
    22/tcp                     ALLOW IN    Anywhere
    80,443/tcp                 ALLOW IN    Anywhere
    22/tcp (v6)                ALLOW IN    Anywhere (v6)
    80,443/tcp (v6)            ALLOW IN    Anywhere (v6)
  6. Не закрывая текущую сессию, подключитесь из нового терминала:

    ssh root@IP_СЕРВЕРА

Строка Default показывает правила по умолчанию: всё входящее, что явно не разрешено, блокируется, а исходящий трафик проходит.

Ограничение попыток подключения по SSH

ufw limit 22/tcp

Команда заменяет правило allow для порта 22 (сообщение «Rule updated»). После этого ufw отклоняет адрес, с которого за 30 секунд открыто 6 и более подключений. Ограничение действует и на панель, и на AI-ассистента: они открывают новое подключение для каждого действия. Если после нескольких быстрых действий подряд очередное завершилось ошибкой, подождите 30 секунд и повторите.

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

  1. Выведите пронумерованный список правил:

    ufw status numbered
  2. Удалите правило по номеру из первой колонки (подставьте его вместо НОМЕР). ufw покажет правило, которое собирается удалить, и спросит «Proceed with operation (y|n)?»: проверьте его и ответьте y. Подтверждение: «Rule deleted».

    ufw delete НОМЕР

После каждого удаления номера сдвигаются, поэтому перед следующим удалением выведите список заново. Правила для IPv6 показываются отдельно, с пометкой (v6), и удаляются тоже отдельно. Не удаляйте правила для порта 22.

Если вы ошиблись в правилах, а сессия ещё открыта, файрвол можно полностью выключить (ответ «Firewall stopped and disabled on system startup») и настроить заново:

ufw disable

AlmaLinux и CentOS Stream: firewalld

  1. Установите и запустите firewalld, затем проверьте состояние. Ожидаемый результат — running. Зона по умолчанию уже разрешает SSH, так что запуск не разорвёт подключение.

    dnf install -y firewalld
    systemctl enable --now firewalld
    firewall-cmd --state
  2. Разрешите SSH, HTTP и HTTPS на постоянной основе и перезагрузите правила. Каждая команда отвечает success. Если служба уже была разрешена (обычно ssh), перед этим появится предупреждение Warning: ALREADY_ENABLED: ssh — это не ошибка.

    firewall-cmd --permanent --add-service=ssh --add-service=http --add-service=https
    firewall-cmd --reload
  3. Проверьте: в строке services: должны быть ssh, http и https.

    firewall-cmd --list-all
  4. Не закрывая текущую сессию, подключитесь из нового терминала — так же, как в случае ufw.

Правило, добавленное с --permanent, начинает действовать после firewall-cmd --reload. Без --permanent правило применяется сразу, но пропадает при перезагрузке правил или сервера.

Другие частые операции (выполните только нужную строку, затем перезагрузите правила):

# открыть порт
firewall-cmd --permanent --add-port=8080/tcp
# закрыть ранее открытый порт
firewall-cmd --permanent --remove-port=8080/tcp
# убрать службу из списка
firewall-cmd --permanent --remove-service=http
# применить изменения
firewall-cmd --reload

У firewalld нет простого аналога ufw limit. Для защиты от повторяющихся попыток входа по SSH используйте fail2ban.

Чувствительные порты — только с вашего адреса

Базы данных (3306 для MariaDB/MySQL, 5432 для PostgreSQL) и панели администрирования, работающие на собственных портах, не должны быть открыты для всего интернета.

  1. Надёжнее всего не открывать их вовсе: пусть служба слушает 127.0.0.1, а вы подключаетесь через SSH-туннель (Базы данных: MariaDB/MySQL и PostgreSQL).
  2. Если порт должен быть доступен извне, попросите поддержку открыть его в сетевой фильтрации: по умолчанию такие порты там закрыты.
  3. Узнайте свой IP-адрес (Инструмент «Ваш публичный IP-адрес») и разрешите порт в файрволе системы только для этого адреса.

Ubuntu и Debian:

ufw allow from ВАШ_IP to any port 3306 proto tcp

AlmaLinux и CentOS Stream:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="ВАШ_IP" port port="3306" protocol="tcp" accept'
firewall-cmd --reload

Если ваш интернет-адрес динамический, обновляйте правило при каждой его смене. Страницу администрирования, которая работает на 80/443 (например, /phpmyadmin), ограничивают в настройках веб-сервера, а не в файрволе.

Docker обходит ufw

Когда вы публикуете порт контейнера (-p 8080:80 или ports: в Docker Compose), Docker добавляет собственные правила iptables, которые срабатывают раньше правил ufw: ufw status их не показывает, а правило deny в ufw их не закрывает. Сетевая фильтрация по-прежнему отсекает все порты, кроме 22, 80 и 443, но контейнер, опубликованный на 80/443 или на порту, открытом по вашему запросу, доступен из интернета независимо от ufw.

  • Публикуйте контейнер только на 127.0.0.1, а наружу выводите через nginx на 80/443:

    docker run -d -p 127.0.0.1:8080:80 nginx

    То же в Docker Compose:

    services:
      app:
        ports:
          - "127.0.0.1:8080:80"
  • Для более тонкой фильтрации добавляйте правила в цепочку DOCKER-USER, как описано в документации Docker об iptables.

Установка и остальные настройки: Установка Docker и Docker Compose.

Частые проблемы

Что вы видите Вероятная причина Что делать
После включения ufw новые SSH-подключения завершаются ошибкой Connection timed out порт 22 не разрешён из оставшейся открытой сессии разрешите порт 22 (шаг 2 в разделе про ufw). Если открытой сессии нет, напишите в поддержку: «Перезагрузить» не поможет — ufw остаётся включённым и после перезагрузки
Сайт перестал открываться после включения файрвола 80 и 443 не разрешены в файрволе системы разрешите HTTP и HTTPS (шаг 3 в разделе про ufw или шаг 2 в разделе про firewalld). Другие причины: Сайт не открывается
Приложение на 3000 или 8080 не отвечает извне, хотя ufw его разрешает порт отсекает сетевая фильтрация опубликуйте приложение через nginx на 80/443 или попросите поддержку открыть порт
Кнопки панели возвращают reset_failed, ssh_key_push_failed или «Не удалось изменить вход по паролю.» после изменения файрвола порт 22 разрешён только для отдельных адресов или сработало ограничение ufw limit разрешите порт 22 для любых адресов; если сработало ограничение, подождите 30 секунд и повторите
Сертификат Let's Encrypt не выпускается или не продлевается порт 80 закрыт в файрволе системы разрешите порт 80: через него проходит проверка Let's Encrypt (Веб-сервер с HTTPS: nginx или Apache и Let's Encrypt)

Частые вопросы

Могу ли я сам открыть порт в сетевой фильтрации? Нет. Настроек файрвола в панели нет, сетевую фильтрацию меняет команда BLACKBOX. Напишите в поддержку, указав порт, протокол и IP-адрес сервера.

Показывает ли панель, включён ли файрвол? Нет. Страница «Мониторинг» показывает загрузку серверов с услугой «Мониторинг» (CPU, ОЗУ, диск, нагрузка, процессы), а не состояние файрвола: Страница «Мониторинг». Состояние проверяйте на самом сервере командами проверки, приведёнными выше.

Будет ли сервер отвечать на ping после включения файрвола? Да. ufw и firewalld по умолчанию пропускают ping, сетевая фильтрация тоже.

Нужно ли разрешать исходящий трафик? Нет: ufw и firewalld по умолчанию пропускают весь исходящий трафик. Если вы его ограничиваете, оставьте как минимум HTTP (80), HTTPS (443), DNS (53) и NTP (123/UDP): от них зависят обновления системы, точное время на сервере, Let's Encrypt и агент услуги «Мониторинг» (Услуга «Мониторинг»: агент на сервере).

У меня тариф «VPS hosting» с панелью управления. Включать ufw? У панели управления хостингом может быть собственный файрвол. Прежде чем включать ufw или firewalld, загляните в документацию установленной панели или спросите поддержку.

У меня выделенный сервер. Здесь всё так же? Команды для ufw и firewalld те же. Какие порты открыты в сети для выделенного сервера, уточните в поддержке.

Не нашли ответ?Напишите нам — служба поддержки ответит. support@blackbox.md
Открыть тикет