Обновлено: 23.03.2026

Honeypot (Ханипот)

FirewallБезопасностьHoneypot

Что такое Honeypot

Honeypot (ханипот, дословно — «горшочек с мёдом») — это метод обнаружения злоумышленников, основанный на создании ловушек в виде фальшивых открытых портов на роутере. Идея проста: на роутере открываются порты сервисов, которые на самом деле не используются (Telnet, RDP, VNC и т.д.). Легитимные пользователи никогда не будут подключаться к этим портам, а вот сканеры и атакующие — обязательно попробуют.

Как только кто-то пытается установить соединение с honeypot-портом, его IP-адрес автоматически добавляется в чёрный список (address-list), после чего весь трафик с этого адреса блокируется файрволом. Это позволяет превентивно заблокировать атакующего ещё до того, как он найдёт реальные сервисы.

ℹ️
Принцип работы: Honeypot не предоставляет реальный сервис — он лишь слушает порт. Любая попытка подключения расценивается как враждебное сканирование, и IP отправляется в бан-лист. Это один из самых эффективных и при этом простых методов защиты.

Наиболее часто атакуемые порты — это порты стандартных сервисов удалённого доступа и баз данных. Если вы не используете эти сервисы на роутере, можно превратить их в ловушки.

ПортСервисПочему атакуют
23TelnetУстаревший протокол, часто с дефолтными паролями
3389RDPУдалённый рабочий стол Windows — цель брутфорса
5900VNCУдалённый доступ, часто без шифрования
1433MSSQLБаза данных Microsoft SQL Server
3306MySQLБаза данных MySQL — частая цель ботнетов
# === Honeypot на популярных портах ===
# Любое подключение на эти порты = автоматический бан на 30 дней

/ip/firewall/filter

# Telnet honeypot
add chain=input protocol=tcp dst-port=23     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: Telnet"

# RDP honeypot
add chain=input protocol=tcp dst-port=3389     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: RDP"

# VNC honeypot
add chain=input protocol=tcp dst-port=5900     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: VNC"

# MSSQL honeypot
add chain=input protocol=tcp dst-port=1433     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: MSSQL"

# MySQL honeypot
add chain=input protocol=tcp dst-port=3306     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: MySQL"RouterOS CLI
⚠️
Важно: Убедитесь, что вы не используете перечисленные порты для реальных сервисов. Если на роутере работает Telnet (порт 23), его необходимо отключить командой /ip/service/set telnet disabled=yes перед настройкой honeypot.

Honeypot на нестандартных портах

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

# === Honeypot на нестандартных портах ===

/ip/firewall/filter

# HTTP-прокси / альтернативный веб-сервер
add chain=input protocol=tcp dst-port=8080     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: HTTP proxy 8080"

# Веб-интерфейс управления
add chain=input protocol=tcp dst-port=9090     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: Web admin 9090"

# SMB / Windows shares
add chain=input protocol=tcp dst-port=445     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: SMB 445"

# Дополнительные порты для ловушек
add chain=input protocol=tcp dst-port=6379     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: Redis 6379"

add chain=input protocol=tcp dst-port=27017     in-interface=ether1 action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: MongoDB 27017"RouterOS CLI
💡
Совет: Чем больше портов-ловушек вы настроите, тем быстрее будут обнаружены сканеры. Однако не переусердствуйте — добавляйте только те порты, которые точно не используются в вашей сети. Для мониторинга можно посмотреть, какие порты чаще всего попадают в ловушку: /ip/firewall/filter/print stats where comment~"honeypot"

Автоблокировка по Honeypot

Сами по себе правила honeypot только добавляют IP в address-list. Чтобы реально заблокировать трафик от пойманных адресов, необходимо добавить правила drop в цепочки input и forward. Эти правила должны стоять в начале цепочки (до остальных разрешающих правил).

# === Блокировка пойманных IP в input и forward ===
# Эти правила должны стоять ПЕРЕД honeypot-правилами!

/ip/firewall/filter

# Блокируем входящий трафик от honeypot-адресов
add chain=input src-address-list=honeypot-blacklist     action=drop comment="drop honeypot blacklisted (input)"     place-before=0

# Блокируем транзитный трафик от honeypot-адресов
add chain=forward src-address-list=honeypot-blacklist     action=drop comment="drop honeypot blacklisted (forward)"     place-before=0

# Опционально: блокируем в RAW таблице для экономии CPU
/ip/firewall/raw
add chain=prerouting src-address-list=honeypot-blacklist     action=drop comment="raw: drop honeypot blacklisted"RouterOS CLI
🚨
Внимание: Если вы используете блокировку в RAW-таблице, пакеты будут отбрасываться до connection tracking. Это экономит ресурсы CPU, но такие пакеты не будут видны в /ip/firewall/connection. Для отладки лучше временно использовать блокировку в filter.

Проверьте порядок правил — блокирующие правила должны быть выше honeypot-ловушек:

# Проверяем порядок правил
/ip/firewall/filter/print where comment~"honeypot"

# Просмотр содержимого бан-листа
/ip/firewall/address-list/print where list="honeypot-blacklist"

# Количество пойманных адресов
/ip/firewall/address-list/print count-only where list="honeypot-blacklist"RouterOS CLI

Honeypot + Port Knocking

Port Knocking — это техника, при которой доступ к сервису открывается только после обращения к определённой последовательности портов. Комбинируя Port Knocking с Honeypot, можно создать мощную систему: легитимные пользователи «стучат» по правильной последовательности портов и получают доступ, а злоумышленники попадают в honeypot-ловушку и блокируются.

ℹ️
Как это работает: Пользователь последовательно отправляет SYN-пакеты на порты, например, 1500 → 2500 → 3500. После правильной последовательности его IP добавляется в белый список на 60 секунд, и он может подключиться к Winbox (8291). Если же кто-то сканирует порты или стучит неправильно — его IP попадает в бан.
# === Port Knocking + Honeypot ===
# Последовательность: порт 1500 → 2500 → 3500 = доступ к Winbox

/ip/firewall/filter

# Шаг 1: первый стук (порт 1500)
add chain=input protocol=tcp dst-port=1500     connection-state=new action=add-src-to-address-list     address-list=knock-stage1 address-list-timeout=15s     comment="port knock: stage 1"

# Шаг 2: второй стук (порт 2500), только если прошёл stage1
add chain=input protocol=tcp dst-port=2500     connection-state=new src-address-list=knock-stage1     action=add-src-to-address-list     address-list=knock-stage2 address-list-timeout=15s     comment="port knock: stage 2"

# Шаг 3: третий стук (порт 3500), только если прошёл stage2
add chain=input protocol=tcp dst-port=3500     connection-state=new src-address-list=knock-stage2     action=add-src-to-address-list     address-list=knock-allowed address-list-timeout=60s     comment="port knock: access granted"

# Разрешаем доступ к Winbox для прошедших port knocking
add chain=input protocol=tcp dst-port=8291     src-address-list=knock-allowed action=accept     comment="Winbox: allow after port knock"

# Honeypot-ловушка: кто пытается подключиться к Winbox без port knocking
add chain=input protocol=tcp dst-port=8291     connection-state=new action=add-src-to-address-list     address-list=honeypot-blacklist address-list-timeout=30d     comment="honeypot: Winbox without knock"RouterOS CLI

Для «стука» с клиентской стороны можно использовать любой TCP-клиент или скрипт:

# Пример стука из Linux/macOS
nmap -Pn --host-timeout 100 --max-retries 0 -p 1500 203.0.113.1
nmap -Pn --host-timeout 100 --max-retries 0 -p 2500 203.0.113.1
nmap -Pn --host-timeout 100 --max-retries 0 -p 3500 203.0.113.1

# Или с помощью knock (apt install knockd)
knock 203.0.113.1 1500 2500 3500Linux / macOS
⚠️
Безопасность: Port Knocking не является заменой аутентификации — это дополнительный уровень защиты (security through obscurity). Всегда используйте его вместе с надёжными паролями и ограничением доступа по IP. Временные интервалы между стуками (timeout=15s) должны быть достаточно короткими, чтобы сканер не успел случайно пройти последовательность.

Логирование и оповещение

Для мониторинга эффективности honeypot полезно вести логирование и отправлять оповещения. Следующий скрипт считает количество заблокированных адресов и отправляет отчёт на email.

# === Логирование попаданий в honeypot ===
# Добавляем правило логирования перед drop

/ip/firewall/filter
add chain=input src-address-list=honeypot-blacklist     action=log log-prefix="HONEYPOT-DROP"     comment="log honeypot drops" place-before=0RouterOS CLI
# === Скрипт оповещения о honeypot-статистике ===
/system/script/add name=honeypot-report source={
    :local identity [/system/identity/get name]
    :local totalBlocked [/ip/firewall/address-list/print count-only \
        where list="honeypot-blacklist"]

    # Собираем список последних 10 адресов
    :local lastIPs ""
    :local count 0
    :foreach i in=[/ip/firewall/address-list/find \
        where list="honeypot-blacklist"] do={
        :if ($count < 10) do={
            :local addr [/ip/firewall/address-list/get $i address]
            :local cmt [/ip/firewall/address-list/get $i comment]
            :set lastIPs ($lastIPs . "\r\n  " . $addr . " (" . $cmt . ")")
            :set count ($count + 1)
        }
    }

    # Статистика правил honeypot
    :local ruleStats ""
    :foreach r in=[/ip/firewall/filter/find \
        where comment~"honeypot"] do={
        :local cmt [/ip/firewall/filter/get $r comment]
        :local pkts [/ip/firewall/filter/get $r packets]
        :set ruleStats ($ruleStats . "\r\n  " . $cmt . ": " . $pkts . " pkts")
    }

    :local body ("Honeypot Report for " . $identity . \
        "\r\n\r\nTotal blocked IPs: " . $totalBlocked . \
        "\r\n\r\nLast caught IPs:" . $lastIPs . \
        "\r\n\r\nRule statistics:" . $ruleStats)

    # Логируем в системный лог
    :log info ("Honeypot: " . $totalBlocked . " IPs blocked")

    # Отправляем на email (требуется настроенный /tool/e-mail)
    /tool/e-mail/send         to="admin@example.com"         subject=("Honeypot Report: " . $identity)         body=$body
}RouterOS Script
# Запуск отчёта ежедневно в 8:00
/system/scheduler/add name=honeypot-daily-report     start-time=08:00:00 interval=1d     on-event="/system/script/run honeypot-report"     comment="Daily honeypot statistics"RouterOS CLI
💡
Email-уведомления: Для отправки email необходимо предварительно настроить SMTP: /tool/e-mail/set server=smtp.example.com port=587 from=router@example.com tls=starttls user=router@example.com password=xxx. Подробнее — в разделе Скрипты.