Honeypot (Ханипот)
Что такое Honeypot
Honeypot (ханипот, дословно — «горшочек с мёдом») — это метод обнаружения злоумышленников, основанный на создании ловушек в виде фальшивых открытых портов на роутере. Идея проста: на роутере открываются порты сервисов, которые на самом деле не используются (Telnet, RDP, VNC и т.д.). Легитимные пользователи никогда не будут подключаться к этим портам, а вот сканеры и атакующие — обязательно попробуют.
Как только кто-то пытается установить соединение с honeypot-портом, его IP-адрес автоматически добавляется в чёрный список (address-list), после чего весь трафик с этого адреса блокируется файрволом. Это позволяет превентивно заблокировать атакующего ещё до того, как он найдёт реальные сервисы.
Honeypot на популярных портах
Наиболее часто атакуемые порты — это порты стандартных сервисов удалённого доступа и баз данных. Если вы не используете эти сервисы на роутере, можно превратить их в ловушки.
| Порт | Сервис | Почему атакуют |
|---|---|---|
| 23 | Telnet | Устаревший протокол, часто с дефолтными паролями |
| 3389 | RDP | Удалённый рабочий стол Windows — цель брутфорса |
| 5900 | VNC | Удалённый доступ, часто без шифрования |
| 1433 | MSSQL | База данных Microsoft SQL Server |
| 3306 | MySQL | База данных 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
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
Автоблокировка по 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
Проверьте порядок правил — блокирующие правила должны быть выше 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-ловушку и блокируются.
# === 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
Логирование и оповещение
Для мониторинга эффективности 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