Обновлено: 23.03.2026

Защита от брутфорса

FirewallБезопасностьБрутфорс

Принцип защиты

Защита от брутфорса в RouterOS реализуется через механизм address-list с поэтапной эскалацией (stage-based protection). Суть метода: каждое новое подключение к защищаемому порту добавляет IP-адрес источника в список (stage). При повторном подключении в течение таймаута IP перемещается на следующий stage. После прохождения всех стадий IP попадает в чёрный список (blacklist) и блокируется.

Типичная цепочка стадий:

ℹ️
Важно: Правила в файрволе обрабатываются сверху вниз. Правило блокировки (drop blacklist) должно стоять первым, а правило добавления в stage1 — последним. Порядок стадий: blacklist → stage3 → stage2 → stage1.

Принцип работы основан на том, что легитимный пользователь вводит пароль 1-2 раза, а бот перебирает сотни комбинаций. Таким образом, обычный пользователь не достигает blacklist, а атакующий блокируется после 4 попыток подключения.

⚠️
Внимание: Каждое TCP-соединение (SYN) считается новой попыткой, даже если пароль не вводился. Поэтому таймауты стадий должны быть достаточно короткими (1 минута), чтобы легитимный пользователь мог переподключиться после разрыва связи.

Защита SSH

SSH (порт 22) — одна из самых атакуемых служб. Следующий набор правил реализует 4-стадийную защиту с блокировкой на 1 день после 4 неудачных попыток подключения в течение 1 минуты.

# === Защита SSH от брутфорса ===
/ip/firewall/filter

# 1. Блокируем IP из чёрного списка
add chain=input protocol=tcp dst-port=22 \
    src-address-list=ssh-blacklist action=drop \
    comment="SSH: drop blacklisted"

# 2. Stage3 → Blacklist (4-я попытка = бан на 1 день)
add chain=input protocol=tcp dst-port=22 \
    connection-state=new src-address-list=ssh-stage3 \
    action=add-src-to-address-list \
    address-list=ssh-blacklist address-list-timeout=1d \
    comment="SSH: stage3 → blacklist (1 day)"

# 3. Stage2 → Stage3 (3-я попытка)
add chain=input protocol=tcp dst-port=22 \
    connection-state=new src-address-list=ssh-stage2 \
    action=add-src-to-address-list \
    address-list=ssh-stage3 address-list-timeout=1m \
    comment="SSH: stage2 → stage3"

# 4. Stage1 → Stage2 (2-я попытка)
add chain=input protocol=tcp dst-port=22 \
    connection-state=new src-address-list=ssh-stage1 \
    action=add-src-to-address-list \
    address-list=ssh-stage2 address-list-timeout=1m \
    comment="SSH: stage1 → stage2"

# 5. Новое подключение → Stage1 (1-я попытка)
add chain=input protocol=tcp dst-port=22 \
    connection-state=new \
    action=add-src-to-address-list \
    address-list=ssh-stage1 address-list-timeout=1m \
    comment="SSH: new connection → stage1"RouterOS CLI
💡
Совет: Если вы используете SSH по нестандартному порту (например, 2222), замените dst-port=22 на ваш порт. Смена порта по умолчанию сама по себе значительно снижает количество атак.

Защита Winbox

Winbox использует TCP-порт 8291. Защита строится аналогично SSH, но с увеличенным таймаутом блокировки, так как Winbox обычно используется реже.

# === Защита Winbox от брутфорса ===
/ip/firewall/filter

# 1. Блокируем IP из чёрного списка
add chain=input protocol=tcp dst-port=8291 \
    src-address-list=winbox-blacklist action=drop \
    comment="Winbox: drop blacklisted"

# 2. Stage3 → Blacklist (бан на 3 дня)
add chain=input protocol=tcp dst-port=8291 \
    connection-state=new src-address-list=winbox-stage3 \
    action=add-src-to-address-list \
    address-list=winbox-blacklist address-list-timeout=3d \
    comment="Winbox: stage3 → blacklist (3 days)"

# 3. Stage2 → Stage3
add chain=input protocol=tcp dst-port=8291 \
    connection-state=new src-address-list=winbox-stage2 \
    action=add-src-to-address-list \
    address-list=winbox-stage3 address-list-timeout=1m \
    comment="Winbox: stage2 → stage3"

# 4. Stage1 → Stage2
add chain=input protocol=tcp dst-port=8291 \
    connection-state=new src-address-list=winbox-stage1 \
    action=add-src-to-address-list \
    address-list=winbox-stage2 address-list-timeout=1m \
    comment="Winbox: stage1 → stage2"

# 5. Новое подключение → Stage1
add chain=input protocol=tcp dst-port=8291 \
    connection-state=new \
    action=add-src-to-address-list \
    address-list=winbox-stage1 address-list-timeout=1m \
    comment="Winbox: new connection → stage1"RouterOS CLI
⚠️
Внимание: Не забудьте добавить ваши доверенные IP-адреса в whitelist до применения правил. Иначе вы рискуете заблокировать себя при многократном переподключении через Winbox.

Защита VPN (L2TP/PPTP/SSTP)

VPN-сервисы также подвержены брутфорс-атакам. L2TP использует UDP-порт 1701, PPTP — TCP-порт 1723, SSTP — TCP-порт 443. Для каждого протокола применяется аналогичная стратегия с address-list.

🚨
PPTP криптографически сломан — не используйте его для новых установок. Используйте WireGuard или IKEv2.
⚠️
Осторожно с защитой SSTP (порт 443)! Если на роутере также работает WebFig или REST API на порту 443, браузер открывает несколько TCP-соединений при загрузке одной страницы. Это быстро срабатывает stage-защита и блокирует администратора. Выделите для SSTP отдельный порт или исключите подсеть администраторов из правил.
# === Защита L2TP от брутфорса ===
/ip/firewall/filter

# L2TP (UDP 1701)
add chain=input protocol=udp dst-port=1701 \
    src-address-list=vpn-blacklist action=drop \
    comment="VPN: drop blacklisted"
add chain=input protocol=udp dst-port=1701 \
    connection-state=new src-address-list=vpn-stage3 \
    action=add-src-to-address-list \
    address-list=vpn-blacklist address-list-timeout=7d \
    comment="VPN: stage3 → blacklist (7 days)"
add chain=input protocol=udp dst-port=1701 \
    connection-state=new src-address-list=vpn-stage2 \
    action=add-src-to-address-list \
    address-list=vpn-stage3 address-list-timeout=1m \
    comment="VPN: stage2 → stage3"
add chain=input protocol=udp dst-port=1701 \
    connection-state=new src-address-list=vpn-stage1 \
    action=add-src-to-address-list \
    address-list=vpn-stage2 address-list-timeout=1m \
    comment="VPN: stage1 → stage2"
add chain=input protocol=udp dst-port=1701 \
    connection-state=new \
    action=add-src-to-address-list \
    address-list=vpn-stage1 address-list-timeout=1m \
    comment="VPN: new → stage1"

# === Защита PPTP (TCP 1723) ===
add chain=input protocol=tcp dst-port=1723 \
    src-address-list=vpn-blacklist action=drop \
    comment="PPTP: drop blacklisted"
add chain=input protocol=tcp dst-port=1723 \
    connection-state=new src-address-list=vpn-stage3 \
    action=add-src-to-address-list \
    address-list=vpn-blacklist address-list-timeout=7d \
    comment="PPTP: stage3 → blacklist (7 days)"
add chain=input protocol=tcp dst-port=1723 \
    connection-state=new src-address-list=vpn-stage2 \
    action=add-src-to-address-list \
    address-list=vpn-stage3 address-list-timeout=1m \
    comment="PPTP: stage2 → stage3"
add chain=input protocol=tcp dst-port=1723 \
    connection-state=new src-address-list=vpn-stage1 \
    action=add-src-to-address-list \
    address-list=vpn-stage2 address-list-timeout=1m \
    comment="PPTP: stage1 → stage2"
add chain=input protocol=tcp dst-port=1723 \
    connection-state=new \
    action=add-src-to-address-list \
    address-list=vpn-stage1 address-list-timeout=1m \
    comment="PPTP: new → stage1"

# === Защита SSTP (TCP 443) ===
add chain=input protocol=tcp dst-port=443 \
    src-address-list=vpn-blacklist action=drop \
    comment="SSTP: drop blacklisted"
add chain=input protocol=tcp dst-port=443 \
    connection-state=new src-address-list=vpn-stage3 \
    action=add-src-to-address-list \
    address-list=vpn-blacklist address-list-timeout=7d \
    comment="SSTP: stage3 → blacklist (7 days)"
add chain=input protocol=tcp dst-port=443 \
    connection-state=new src-address-list=vpn-stage2 \
    action=add-src-to-address-list \
    address-list=vpn-stage3 address-list-timeout=1m \
    comment="SSTP: stage2 → stage3"
add chain=input protocol=tcp dst-port=443 \
    connection-state=new src-address-list=vpn-stage1 \
    action=add-src-to-address-list \
    address-list=vpn-stage2 address-list-timeout=1m \
    comment="SSTP: stage1 → stage2"
add chain=input protocol=tcp dst-port=443 \
    connection-state=new \
    action=add-src-to-address-list \
    address-list=vpn-stage1 address-list-timeout=1m \
    comment="SSTP: new → stage1"RouterOS CLI
💡
Совет: Для L2TP/IPsec рекомендуется также использовать IPsec pre-shared key или сертификаты. Брутфорс-защита на уровне файрвола — это дополнительный рубеж, а не замена стойкой аутентификации.

Комплексная защита всех сервисов

Вместо создания отдельных стадий для каждого сервиса можно использовать единый набор address-list для всех управляющих портов. Это упрощает администрирование и обеспечивает единую политику блокировки: атакующий, попавший в blacklist при атаке SSH, будет заблокирован и на Winbox, WebFig, API.

# === Комплексная защита от брутфорса ===
# Порты: SSH(22), Winbox(8291), WebFig(80,443), API(8728,8729)
/ip/firewall/filter

# Whitelist — пропускаем доверенные IP без проверки
add chain=input src-address-list=whitelist \
    action=accept \
    comment="Bruteforce: allow whitelist"

# Блокировка чёрного списка на всех сервисных портах
add chain=input protocol=tcp \
    dst-port=22,80,443,8291,8728,8729 \
    src-address-list=bruteforce-blacklist action=drop \
    comment="Bruteforce: drop blacklisted on all services"

# Stage3 → Blacklist (бан на 10 дней)
add chain=input protocol=tcp \
    dst-port=22,80,443,8291,8728,8729 \
    connection-state=new src-address-list=bruteforce-stage3 \
    action=add-src-to-address-list \
    address-list=bruteforce-blacklist address-list-timeout=10d \
    log=yes log-prefix="BLACKLISTED" \
    comment="Bruteforce: stage3 → blacklist (10 days)"

# Stage2 → Stage3
add chain=input protocol=tcp \
    dst-port=22,80,443,8291,8728,8729 \
    connection-state=new src-address-list=bruteforce-stage2 \
    action=add-src-to-address-list \
    address-list=bruteforce-stage3 address-list-timeout=1m \
    comment="Bruteforce: stage2 → stage3"

# Stage1 → Stage2
add chain=input protocol=tcp \
    dst-port=22,80,443,8291,8728,8729 \
    connection-state=new src-address-list=bruteforce-stage1 \
    action=add-src-to-address-list \
    address-list=bruteforce-stage2 address-list-timeout=1m \
    comment="Bruteforce: stage1 → stage2"

# Новое подключение → Stage1
add chain=input protocol=tcp \
    dst-port=22,80,443,8291,8728,8729 \
    connection-state=new \
    action=add-src-to-address-list \
    address-list=bruteforce-stage1 address-list-timeout=1m \
    comment="Bruteforce: new → stage1"

# === Whitelist: добавляем доверенные адреса ===
/ip/firewall/address-list
add list=whitelist address=192.168.88.0/24 comment="LAN"
add list=whitelist address=10.0.0.0/24 comment="VPN clients"
add list=whitelist address=203.0.113.50 comment="Admin office"RouterOS CLI
ℹ️
Порядок правил: Убедитесь, что правило whitelist стоит выше правил брутфорс-защиты. Правило connection-state=established,related action=accept также должно быть расположено выше — иначе активные сессии будут разрываться при попадании IP в stage-списки.

Мониторинг заблокированных IP

После настройки защиты важно контролировать, какие адреса попадают в чёрный список, и своевременно добавлять исключения.

Просмотр заблокированных адресов

# Показать все адреса в blacklist
/ip/firewall/address-list/print where list=bruteforce-blacklist

# Показать количество заблокированных
/ip/firewall/address-list/print count-only where list=bruteforce-blacklist

# Показать все stage-списки
/ip/firewall/address-list/print where list~"bruteforce"RouterOS CLI

Удаление IP из чёрного списка

# Найти и удалить конкретный IP из blacklist
/ip/firewall/address-list/remove \
    [find list=bruteforce-blacklist address=198.51.100.25]

# Очистить весь blacklist
/ip/firewall/address-list/remove \
    [find list=bruteforce-blacklist]RouterOS CLI

Добавление исключений (Whitelist)

# Добавить доверенный IP
/ip/firewall/address-list/add list=whitelist \
    address=198.51.100.10 comment="Partner office"

# Добавить целую подсеть
/ip/firewall/address-list/add list=whitelist \
    address=198.51.100.0/28 comment="Partner network"RouterOS CLI

Автоматическое уведомление по e-mail

Следующий скрипт проверяет blacklist и отправляет уведомление администратору при появлении новых заблокированных адресов.

# === Скрипт уведомления о блокировке ===
# Добавить в System → Scripts
/system/script/add name="bruteforce-notify" source={
:local blacklist [/ip/firewall/address-list/find \
    list=bruteforce-blacklist dynamic=yes]
:local count [:len $blacklist]
:if ($count > 0) do={
    :local body "Blocked IPs:\r\n"
    :foreach i in=$blacklist do={
        :local addr [/ip/firewall/address-list/get $i address]
        :local timeout [/ip/firewall/address-list/get $i timeout]
        :set body ($body . $addr . " (timeout: " . $timeout . ")\r\n")
    }
    /tool/e-mail/send to="admin@example.com" \
        subject="[RouterOS] Bruteforce blacklist report" \
        body=$body
}
}

# Запуск скрипта по расписанию каждый час
/system/scheduler/add name="bruteforce-report" \
    interval=1h on-event="bruteforce-notify" \
    start-time=00:00:00RouterOS CLI
💡
Совет: Для работы e-mail уведомлений предварительно настройте SMTP-сервер: /tool/e-mail/set server=smtp.example.com port=587 from=router@example.com. Также можно использовать логирование: параметр log=yes log-prefix="BLACKLISTED" в правиле blacklist записывает события в системный лог.

Мониторинг через системный лог

# Просмотр логов блокировки
/log/print where message~"BLACKLISTED"

# Настройка логирования в отдельный файл
/system/logging/add topics=firewall action=disk \
    prefix="FW"

# Просмотр статистики правил (hit counters)
/ip/firewall/filter/print stats where comment~"Bruteforce"RouterOS CLI
⚠️
Внимание: При использовании SSTP на порту 443, если на роутере также настроен HTTPS WebFig, защита от брутфорса будет срабатывать на оба сервиса одновременно. Рекомендуется перенести WebFig на нестандартный порт (например, 8443) или использовать отдельные правила для каждого сервиса.