Безопасность MikroTik — hardening и защита
Безопасность MikroTik — hardening и защита от атак
MikroTik RouterOS — мощная и гибкая система, но из коробки она настроена для удобства, а не для безопасности. По данным Shodan, в интернете доступны сотни тысяч MikroTik-роутеров с открытыми сервисами, дефолтными паролями и отсутствующим firewall. Ботнеты Mēris, Glupteba и другие активно эксплуатируют незащищённые MikroTik-устройства. В этом руководстве — полный чек-лист hardening из 15 пунктов, каждый с объяснением, CLI-командой и верификацией. В конце — готовый скрипт, который можно применить за одну минуту.
Описание
Почему MikroTik — частая цель атак
MikroTik популярен: миллионы устройств по всему миру, от домашних сетей до ISP. При этом:
- Дефолтный пользователь
adminбез пароля (до RouterOS 6.49 / 7.x с новыми default configs) - Множество открытых сервисов из коробки (Winbox, SSH, Telnet, FTP, API, Web)
- Многие администраторы не настраивают firewall на input chain
- Устройства часто работают годами без обновлений
- WinBox-порт (8291) легко сканируется
Реальные атаки, эксплуатирующие MikroTik:
- CVE-2018-14847 (Winbox vulnerability) — позволял прочитать любой файл с роутера, включая user database. Использовался ботнетом на 200 000+ устройств.
- Mēris botnet (2021) — крупнейший DDoS-ботнет из ~250 000 MikroTik-устройств. Использовал уязвимость в Winbox + SOCKS proxy.
- Cryptomining — атакующие включали SOCKS proxy и traffic tunneling для майнинга криптовалют через чужие каналы.
Все эти атаки были возможны из-за отсутствия базовых мер безопасности: обновлений, сильных паролей и firewall.
Модель угроз для MikroTik
Основные вектора атак на MikroTik-роутер:
- Brute-force — перебор паролей через Winbox, SSH, API, Web
- Эксплуатация уязвимостей — CVE в RouterOS (Winbox, SMB, DNS)
- Man-in-the-Middle — перехват управления через незашифрованные протоколы (Telnet, HTTP, FTP)
- DNS hijacking — подмена DNS-ответов через открытый DNS-resolver
- Neighbor Discovery — обнаружение устройства через MNDP/CDP
- MAC-server — доступ к управлению через L2 (без IP-адреса)
- Physical access — сброс через кнопку Reset, доступ через консольный порт
Настройка
1. Сильный пароль для admin
Первый и самый важный шаг. Пустой пароль admin — это приглашение для атакующих.
[admin@MikroTik] ># Устанавливаем сложный пароль (минимум 16 символов, разные регистры, цифры, спецсимволы) /user/set admin password="K7#mR9$vL2@xQ5nW" # Проверка: попробуйте подключиться с новым паролем # Если забудете пароль — только Netinstall (сброс конфигурации)
Требования к паролю: минимум 12 символов, буквы разных регистров, цифры и спецсимволы. Не используйте словарные слова, имена и даты.
2. Создание нового пользователя и отключение admin
Имя admin — первое, что пробуют при brute-force. Создайте пользователя с уникальным именем.
[admin@MikroTik] ># Создаём нового пользователя с полными правами /user/add name=netadmin group=full password="P8#kW3$mN6@yR9vX" # Подключаемся под новым пользователем и проверяем доступ # Отключаем admin (после успешного входа под netadmin!) /user/set admin disabled=yes # Проверка /user/print # admin должен быть disabled=yes # netadmin — disabled=no, group=full
Важно: сначала подключитесь под новым пользователем, убедитесь, что всё работает, и только потом отключайте admin. Иначе потеряете доступ.
3. Отключение неиспользуемых сервисов
Каждый открытый сервис — потенциальная точка входа. Оставьте только то, что реально используете.
[admin@MikroTik] ># Просматриваем все сервисы /ip/service/print # Отключаем ненужные сервисы /ip/service/set telnet disabled=yes /ip/service/set ftp disabled=yes /ip/service/set www disabled=yes /ip/service/set api disabled=yes /ip/service/set api-ssl disabled=yes /ip/service/set www-ssl disabled=yes # Оставляем только WinBox и SSH /ip/service/set winbox disabled=no /ip/service/set ssh disabled=no # Проверка /ip/service/print # Только winbox и ssh должны быть enabled
Рекомендация: для управления достаточно WinBox (порт 8291) и SSH (порт 22). Остальные сервисы отключите.
4. Ограничение доступа к сервисам по IP
Даже оставшиеся сервисы (WinBox, SSH) нужно ограничить по IP-адресу — разрешить доступ только с определённых хостов или подсетей.
[admin@MikroTik] ># Разрешаем WinBox только из LAN и с конкретного IP администратора /ip/service/set winbox address=192.168.88.0/24,10.0.0.100/32 # Разрешаем SSH только из LAN /ip/service/set ssh address=192.168.88.0/24 # Меняем порт SSH и WinBox на нестандартные (security through obscurity, но помогает от массовых сканеров) /ip/service/set ssh port=2222 /ip/service/set winbox port=18291 # Проверка /ip/service/print detail
Если нужен удалённый доступ — добавьте VPN (WireGuard) и подключайтесь к управлению через VPN-туннель.
5. SSH-ключи вместо пароля
SSH-ключи значительно надёжнее пароля и делают brute-force бессмысленным.
[admin@MikroTik] ># На вашем ПК: генерируем SSH-ключ (если ещё нет) # ssh-keygen -t ed25519 -C "admin@mikrotik" # Загружаем публичный ключ на роутер (через SCP или WinBox → Files) # scp ~/.ssh/id_ed25519.pub netadmin@192.168.88.1:id_ed25519.pub # На роутере: импортируем ключ для пользователя /user/ssh-keys/import public-key-file=id_ed25519.pub user=netadmin # Проверяем, что ключ импортирован /user/ssh-keys/print # После проверки SSH-подключения по ключу — отключаем парольную аутентификацию /ip/ssh/set always-allow-password-login=no # Проверка: попробуйте подключиться по SSH — должен использоваться ключ # ssh -i ~/.ssh/id_ed25519 netadmin@192.168.88.1 -p 2222
6. Firewall: защита input chain
Это критически важное правило. Без firewall на input chain любой, кто может маршрутизировать пакеты к вашему роутеру, получает доступ ко всем сервисам.
[admin@MikroTik] ># Определяем списки интерфейсов /interface/list/add name=WAN /interface/list/add name=LAN /interface/list/member/add interface=ether1 list=WAN /interface/list/member/add interface=bridge list=LAN # Firewall INPUT chain /ip/firewall/filter # Принять established/related add chain=input action=accept connection-state=established,related \ comment="Accept established/related" # Отбросить invalid add chain=input action=drop connection-state=invalid \ comment="Drop invalid" # Разрешить ICMP (ping) — ограниченно add chain=input action=accept protocol=icmp icmp-options=8:0 \ limit=5,5:packet comment="Allow ping (limited)" # Разрешить из LAN add chain=input action=accept in-interface-list=LAN \ comment="Accept from LAN" # Отбросить ВСЁ остальное на input (это и есть защита!) add chain=input action=drop in-interface-list=WAN \ comment="Drop all from WAN"
С этим правилом из интернета (WAN) к роутеру нельзя подключиться вообще. Управление — только из LAN или через VPN.
7. Защита от brute-force (stage-система с address-list)
Даже с firewall на input, если вы оставляете SSH/WinBox доступным из WAN (через VPN или port forward), нужна защита от перебора паролей.
[admin@MikroTik] ># Система из трёх стадий: # Стадия 1: 3 неудачные попытки за 1 минуту → в список на 1 минуту # Стадия 2: повторная попытка из списка стадии 1 → в список на 10 минут # Стадия 3: повторная попытка из списка стадии 2 → в чёрный список на 7 дней /ip/firewall/filter # Блокируем адреса из чёрного списка (ставим в начало input chain) add chain=input action=drop src-address-list=blacklist \ comment="Drop blacklisted IPs" place-before=0 # Стадия 3: из stage2 → blacklist на 7 дней add chain=input action=add-src-to-address-list protocol=tcp \ dst-port=22,8291 connection-state=new \ src-address-list=bruteforce-stage2 \ address-list=blacklist address-list-timeout=7d \ comment="Brute-force stage 3: blacklist 7d" # Стадия 2: из stage1 → stage2 на 10 минут add chain=input action=add-src-to-address-list protocol=tcp \ dst-port=22,8291 connection-state=new \ src-address-list=bruteforce-stage1 \ address-list=bruteforce-stage2 address-list-timeout=10m \ comment="Brute-force stage 2: 10min" # Стадия 1: 3 попытки → stage1 на 1 минуту add chain=input action=add-src-to-address-list protocol=tcp \ dst-port=22,8291 connection-state=new \ connection-limit=3,32 \ address-list=bruteforce-stage1 address-list-timeout=1m \ comment="Brute-force stage 1: 1min" # Проверка: смотрим заблокированные адреса /ip/firewall/address-list/print where list=blacklist
8. Отключение Bandwidth Server
Bandwidth Server позволяет тестировать скорость между MikroTik-устройствами. На WAN-интерфейсе он может быть использован для DDoS-amplification.
[admin@MikroTik] ># Отключаем Bandwidth Server /tool/bandwidth-server/set enabled=no # Проверка /tool/bandwidth-server/print # enabled: no
9. Отключение Neighbor Discovery на WAN
MikroTik Neighbor Discovery Protocol (MNDP) позволяет другим MikroTik-устройствам обнаружить ваш роутер. На WAN это раскрывает информацию об устройстве.
[admin@MikroTik] ># Ограничиваем Neighbor Discovery только LAN-интерфейсами /ip/neighbor/discovery-settings/set discover-interface-list=LAN # Проверка /ip/neighbor/discovery-settings/print # discover-interface-list: LAN
10. Отключение MAC-server на WAN
MAC-server позволяет подключиться к роутеру через WinBox/MAC Telnet по MAC-адресу (без IP). На WAN это опасно.
[admin@MikroTik] ># MAC WinBox Server — только на LAN /tool/mac-server/mac-winbox/set allowed-interface-list=LAN # MAC Telnet Server — только на LAN /tool/mac-server/set allowed-interface-list=LAN # MAC Ping Server — отключаем /tool/mac-server/ping/set enabled=no # Проверка /tool/mac-server/mac-winbox/print /tool/mac-server/print /tool/mac-server/ping/print
11. Защита DNS resolver
Если на MikroTik включён allow-remote-requests=yes для DNS, роутер становится открытым DNS-resolver — и может использоваться для DNS amplification атак.
[admin@MikroTik] ># Вариант 1: отключить allow-remote-requests (если не нужен) /ip/dns/set allow-remote-requests=no # Вариант 2: оставить для LAN, но закрыть firewall на WAN /ip/dns/set allow-remote-requests=yes # Блокируем DNS-запросы из WAN /ip/firewall/filter/add chain=input action=drop protocol=udp \ dst-port=53 in-interface-list=WAN \ comment="Block DNS from WAN" /ip/firewall/filter/add chain=input action=drop protocol=tcp \ dst-port=53 in-interface-list=WAN \ comment="Block DNS TCP from WAN" # Проверка: с внешнего хоста попробуйте: # nslookup google.com <ваш_внешний_IP> # Должен быть timeout (не отвечает)
12. Настройка NTP
Точное время необходимо для корректной работы логов, сертификатов, scheduler и firewall (address-list timeout).
[admin@MikroTik] ># Настраиваем NTP-клиент /system/ntp/client/set enabled=yes # Используем публичные NTP-серверы /system/ntp/client/servers/add address=time.cloudflare.com /system/ntp/client/servers/add address=pool.ntp.org # Устанавливаем часовой пояс /system/clock/set time-zone-name=Europe/Moscow # Проверка /system/ntp/client/print /system/clock/print # Время должно быть корректным
13. Настройка Syslog (удалённое логирование)
Локальные логи MikroTik ограничены по объёму (1000 записей по умолчанию) и стираются при перезагрузке. Удалённый syslog сохраняет все события.
[admin@MikroTik] ># Добавляем remote syslog action /system/logging/action/add name=remote-syslog \ target=remote remote=192.168.88.100 remote-port=514 \ src-address=192.168.88.1 bsd-syslog=yes # Логируем важные топики на remote /system/logging/add topics=critical action=remote-syslog /system/logging/add topics=error action=remote-syslog /system/logging/add topics=warning action=remote-syslog /system/logging/add topics=system action=remote-syslog /system/logging/add topics=firewall action=remote-syslog /system/logging/add topics=account action=remote-syslog # Увеличиваем локальный буфер логов /system/logging/action/set memory memory-lines=5000 # Проверка /system/logging/print /system/logging/action/print
14. Регулярные обновления RouterOS
Уязвимости обнаруживаются регулярно. Обновления закрывают дыры безопасности.
[admin@MikroTik] ># Проверяем текущую версию /system/resource/print # Проверяем доступные обновления /system/package/update/set channel=stable /system/package/update/check-for-updates # Устанавливаем обновление (если доступно) /system/package/update/install # После перезагрузки — обновляем firmware /system/routerboard/print /system/routerboard/upgrade /system/reboot # Автоматическая проверка обновлений (уведомление в лог) /system/scheduler/add name=check-updates interval=1d \ on-event="/system/package/update/check-for-updates" \ start-time=03:00:00 \ comment="Daily update check"
Рекомендация: не включайте автоматическую установку обновлений на production. Проверяйте changelog перед обновлением.
15. Scheduled backup + export
Автоматическое резервное копирование защищает от потери конфигурации.
[admin@MikroTik] ># Скрипт для автоматического бэкапа /system/script/add name=auto-backup source={ :local date [/system/clock/get date] :local hostname [/system/identity/get name] /system/backup/save name=("backup-" . $hostname . "-" . $date) \ encryption=aes-sha256 password="BackupPass123!" /export file=("export-" . $hostname . "-" . $date) :log info "Backup created: backup-$hostname-$date" } # Запуск бэкапа каждую неделю /system/scheduler/add name=weekly-backup interval=7d \ start-time=02:00:00 on-event=auto-backup \ comment="Weekly auto-backup" # Проверка: запускаем скрипт вручную /system/script/run auto-backup /file/print where name~"backup"
Важно: бэкапы хранятся на flash-памяти роутера. Настройте отправку на внешний сервер через FTP/SFTP или email.
Проверка
Полная проверка hardening
[admin@MikroTik] ># 1. Пользователь admin отключён /user/print where name=admin # disabled=yes # 2. Ненужные сервисы отключены /ip/service/print where disabled=no # Только winbox и ssh # 3. Сервисы ограничены по IP /ip/service/print detail where disabled=no # address не пустой # 4. SSH-ключи настроены /user/ssh-keys/print # 5. Firewall input chain защищён /ip/firewall/filter/print where chain=input # Должен быть drop на WAN # 6. Brute-force protection работает /ip/firewall/filter/print where comment~"rute" /ip/firewall/address-list/print where list~"brute" # 7. Bandwidth Server отключён /tool/bandwidth-server/print # 8. Neighbor Discovery — только LAN /ip/neighbor/discovery-settings/print # 9. MAC-server — только LAN /tool/mac-server/mac-winbox/print /tool/mac-server/print # 10. DNS защищён от внешних запросов /ip/dns/print /ip/firewall/filter/print where comment~"DNS" # 11. NTP настроен /system/ntp/client/print /system/clock/print # 12. Syslog настроен /system/logging/action/print where target=remote # 13. RouterOS обновлён /system/resource/print /system/routerboard/print # 14. Бэкап scheduler существует /system/scheduler/print where comment~"backup" # 15. Нет подозрительных записей в логах /log/print where topics~"account"
Внешняя проверка (с ПК в интернете)
Для полной проверки нужно просканировать WAN-адрес роутера снаружи:
[admin@MikroTik] ># На внешнем ПК (Linux/macOS): # nmap -sS -sU -p 1-65535 <WAN_IP> # Все порты должны быть filtered/closed # Проверка DNS resolver: # nslookup google.com <WAN_IP> # Должен быть timeout # Проверка Winbox: # Попытка подключения WinBox к WAN_IP # Должен быть Connection timeout (если правильно закрыт firewall)
Типичные ошибки
1. Firewall input drop стоит не последним правилом
Правило drop на WAN в input chain должно быть последним. Если после него есть accept-правила — они никогда не сработают. Если drop стоит раньше необходимых accept — заблокирует легитимный трафик.
[admin@MikroTik] ># Неправильный порядок: # 0 chain=input action=drop in-interface-list=WAN ← блокирует ВСЁ # 1 chain=input action=accept protocol=icmp ← никогда не сработает # Правильный порядок: # 0 chain=input action=accept connection-state=established,related # 1 chain=input action=drop connection-state=invalid # 2 chain=input action=accept protocol=icmp limit=5,5 # 3 chain=input action=accept in-interface-list=LAN # 4 chain=input action=drop in-interface-list=WAN ← ПОСЛЕДНЕЕ!
2. Заблокировали себя (потеря доступа)
Частая ошибка: применили firewall и потеряли доступ к роутеру. Решения:
[admin@MikroTik] ># Способ 1: Safe Mode (в WinBox/CLI) # Перед изменениями нажмите Ctrl+X (Safe Mode) # Если потеряете доступ — роутер автоматически откатит изменения через ~9 минут # Способ 2: Scheduler для отката # Перед опасными изменениями создайте scheduler: /system/scheduler/add name=rollback interval=5m \ on-event="/ip/firewall/filter/remove [find chain=input action=drop]" \ comment="Emergency rollback - delete after testing" # Способ 3: MAC WinBox (если физически в одной сети) # WinBox → Neighbors → подключение по MAC-адресу (если MAC-server включён на LAN) # Способ 4: Netinstall (крайний вариант) # Полный сброс через Netinstall
3. Оставили SOCKS proxy включённым
Ботнет Mēris использовал SOCKS proxy на MikroTik для туннелирования трафика. SOCKS proxy должен быть выключен:
[admin@MikroTik] ># Проверяем SOCKS proxy /ip/socks/print # Если enabled=yes — СРОЧНО отключаем! /ip/socks/set enabled=no # Проверяем, нет ли подозрительных socks access rules /ip/socks/access/print /ip/socks/connections/print
4. Не закрыли UPnP
UPnP позволяет любому устройству в LAN открывать порты на роутере без авторизации. Малварь использует UPnP для проброса портов.
[admin@MikroTik] ># Проверяем UPnP /ip/upnp/print # Если enabled=yes — отключаем (или хотя бы ограничиваем) /ip/upnp/set enabled=no # Если UPnP нужен (Xbox, PlayStation) — ограничьте интерфейсы /ip/upnp/set enabled=yes /ip/upnp/interfaces/add interface=bridge type=internal /ip/upnp/interfaces/add interface=ether1 type=external # И добавьте в firewall правило для ограничения
5. Открытый Winbox порт на WAN
Winbox (порт 8291) — самый атакуемый порт на MikroTik. Если он открыт на WAN — вопрос времени, когда вас взломают:
[admin@MikroTik] ># Проверяем: доступен ли Winbox из WAN /ip/service/print where name=winbox # Если address пуст — Winbox доступен отовсюду! # Закрываем: ограничиваем по IP /ip/service/set winbox address=192.168.88.0/24 # Или через firewall /ip/firewall/filter/add chain=input action=drop protocol=tcp \ dst-port=8291 in-interface-list=WAN \ comment="Block Winbox from WAN" place-before=0
6. Не проверили наличие backdoor после компрометации
Если роутер уже был скомпрометирован (обнаружены подозрительные пользователи, SOCKS proxy, scripts), простая смена пароля недостаточна:
[admin@MikroTik] ># Проверяем наличие backdoor: # 1. Подозрительные пользователи /user/print # Должны быть только ваши пользователи # 2. Подозрительные скрипты /system/script/print # Проверьте содержимое каждого скрипта # 3. Подозрительные scheduler /system/scheduler/print # Проверьте on-event каждого scheduler # 4. SOCKS proxy /ip/socks/print # 5. Подозрительные firewall rules (например, разрешающие доступ с чужих IP) /ip/firewall/filter/print /ip/firewall/nat/print # 6. Подозрительные DNS static записи /ip/dns/static/print # 7. Файлы в Files /file/print # Если обнаружен backdoor — делайте полный Netinstall и настройку с нуля # НЕ восстанавливайте бэкап — он может содержать backdoor
Полный hardening-скрипт
Этот скрипт применяет все 15 мер безопасности за один раз. Перед запуском:
- Измените пароли на свои
- Измените IP-подсеть на свою
- Измените имя пользователя на своё
- Запускайте из LAN (не из WAN!)
[admin@MikroTik] ># ============================================================ # MikroTik Hardening Script — RouterOS 7.20+ # ВНИМАНИЕ: измените пароли и IP перед запуском! # ============================================================ # --- 1. Новый пользователь --- /user/add name=netadmin group=full password="CHANGE_THIS_PASSWORD_1" # --- 2. Отключаем admin --- /user/set admin disabled=yes # --- 3. Отключаем ненужные сервисы --- /ip/service/set telnet disabled=yes /ip/service/set ftp disabled=yes /ip/service/set www disabled=yes /ip/service/set api disabled=yes /ip/service/set api-ssl disabled=yes /ip/service/set www-ssl disabled=yes # --- 4. Ограничиваем оставшиеся сервисы --- /ip/service/set winbox address=192.168.88.0/24 /ip/service/set ssh address=192.168.88.0/24 # --- 5. Interface lists --- /interface/list/add name=WAN /interface/list/add name=LAN /interface/list/member/add interface=ether1 list=WAN /interface/list/member/add interface=bridge list=LAN # --- 6. Firewall INPUT --- /ip/firewall/filter add chain=input action=drop src-address-list=blacklist \ comment="Drop blacklisted" add chain=input action=accept connection-state=established,related \ comment="Accept established/related" add chain=input action=drop connection-state=invalid \ comment="Drop invalid" add chain=input action=accept protocol=icmp icmp-options=8:0 \ limit=5,5:packet comment="Allow limited ping" add chain=input action=accept in-interface-list=LAN \ comment="Accept from LAN" add chain=input action=drop in-interface-list=WAN \ comment="Drop all from WAN" # --- 7. Brute-force protection --- # (Вставьте перед accept from LAN, если WinBox/SSH доступен из WAN) # --- 8. DNS protection --- add chain=input action=drop protocol=udp dst-port=53 \ in-interface-list=WAN comment="Block DNS from WAN" add chain=input action=drop protocol=tcp dst-port=53 \ in-interface-list=WAN comment="Block DNS TCP from WAN" # --- 9. Отключаем опасные сервисы --- /tool/bandwidth-server/set enabled=no /ip/neighbor/discovery-settings/set discover-interface-list=LAN /tool/mac-server/mac-winbox/set allowed-interface-list=LAN /tool/mac-server/set allowed-interface-list=LAN /tool/mac-server/ping/set enabled=no /ip/socks/set enabled=no # --- 10. NTP --- /system/ntp/client/set enabled=yes /system/ntp/client/servers/add address=time.cloudflare.com /system/ntp/client/servers/add address=pool.ntp.org /system/clock/set time-zone-name=Europe/Moscow # --- 11. Syslog --- /system/logging/action/set memory memory-lines=5000 # --- 12. Backup scheduler --- /system/script/add name=auto-backup source={ :local date [/system/clock/get date] :local hostname [/system/identity/get name] /system/backup/save name=("backup-" . $hostname . "-" . $date) \ encryption=aes-sha256 password="CHANGE_BACKUP_PASSWORD" /export file=("export-" . $hostname . "-" . $date) :log info "Auto-backup completed" } /system/scheduler/add name=weekly-backup interval=7d \ start-time=02:00:00 on-event=auto-backup # --- Проверка --- :log info "Hardening script applied. Verify all settings!" /ip/service/print /user/print /ip/firewall/filter/print where chain=input
После применения скрипта подключитесь под новым пользователем netadmin и проверьте каждый пункт по чек-листу из раздела "Проверка". Помните: безопасность — это не разовое действие, а процесс. Проверяйте обновления RouterOS регулярно, мониторьте логи на предмет подозрительной активности и периодически пересматривайте firewall-правила. Один пропущенный патч или один забытый открытый порт — и ваш роутер может стать частью ботнета.
# Устанавливаем сложный пароль (минимум 16 символов, разные регистры, цифры, спецсимволы)
/user/set admin password="K7#mR9$vL2@xQ5nW"
# Проверка: попробуйте подключиться с новым паролем
# Если забудете пароль — только Netinstall (сброс конфигурации)
# Создаём нового пользователя с полными правами
/user/add name=netadmin group=full password="P8#kW3$mN6@yR9vX"
# Подключаемся под новым пользователем и проверяем доступ
# Отключаем admin (после успешного входа под netadmin!)
/user/set admin disabled=yes
# Проверка
/user/print
# admin должен быть disabled=yes
# netadmin — disabled=no, group=full
# Просматриваем все сервисы
/ip/service/print
# Отключаем ненужные сервисы
/ip/service/set telnet disabled=yes
/ip/service/set ftp disabled=yes
/ip/service/set www disabled=yes
/ip/service/set api disabled=yes
/ip/service/set api-ssl disabled=yes
/ip/service/set www-ssl disabled=yes
# Оставляем только WinBox и SSH
/ip/service/set winbox disabled=no
/ip/service/set ssh disabled=no
# Проверка
/ip/service/print
# Только winbox и ssh должны быть enabled
# Разрешаем WinBox только из LAN и с конкретного IP администратора
/ip/service/set winbox address=192.168.88.0/24,10.0.0.100/32
# Разрешаем SSH только из LAN
/ip/service/set ssh address=192.168.88.0/24
# Меняем порт SSH и WinBox на нестандартные (security through obscurity, но помогает от массовых сканеров)
/ip/service/set ssh port=2222
/ip/service/set winbox port=18291
# Проверка
/ip/service/print detail
# На вашем ПК: генерируем SSH-ключ (если ещё нет)
# ssh-keygen -t ed25519 -C "admin@mikrotik"
# Загружаем публичный ключ на роутер (через SCP или WinBox → Files)
# scp ~/.ssh/id_ed25519.pub netadmin@192.168.88.1:id_ed25519.pub
# На роутере: импортируем ключ для пользователя
/user/ssh-keys/import public-key-file=id_ed25519.pub user=netadmin
# Проверяем, что ключ импортирован
/user/ssh-keys/print
# После проверки SSH-подключения по ключу — отключаем парольную аутентификацию
/ip/ssh/set always-allow-password-login=no
# Проверка: попробуйте подключиться по SSH — должен использоваться ключ
# ssh -i ~/.ssh/id_ed25519 netadmin@192.168.88.1 -p 2222
# Определяем списки интерфейсов
/interface/list/add name=WAN
/interface/list/add name=LAN
/interface/list/member/add interface=ether1 list=WAN
/interface/list/member/add interface=bridge list=LAN
# Firewall INPUT chain
/ip/firewall/filter
# Принять established/related
add chain=input action=accept connection-state=established,related \
comment="Accept established/related"
# Отбросить invalid
add chain=input action=drop connection-state=invalid \
comment="Drop invalid"
# Разрешить ICMP (ping) — ограниченно
add chain=input action=accept protocol=icmp icmp-options=8:0 \
limit=5,5:packet comment="Allow ping (limited)"
# Разрешить из LAN
add chain=input action=accept in-interface-list=LAN \
comment="Accept from LAN"
# Отбросить ВСЁ остальное на input (это и есть защита!)
add chain=input action=drop in-interface-list=WAN \
comment="Drop all from WAN"
# Система из трёх стадий:
# Стадия 1: 3 неудачные попытки за 1 минуту → в список на 1 минуту
# Стадия 2: повторная попытка из списка стадии 1 → в список на 10 минут
# Стадия 3: повторная попытка из списка стадии 2 → в чёрный список на 7 дней
/ip/firewall/filter
# Блокируем адреса из чёрного списка (ставим в начало input chain)
add chain=input action=drop src-address-list=blacklist \
comment="Drop blacklisted IPs" place-before=0
# Стадия 3: из stage2 → blacklist на 7 дней
add chain=input action=add-src-to-address-list protocol=tcp \
dst-port=22,8291 connection-state=new \
src-address-list=bruteforce-stage2 \
address-list=blacklist address-list-timeout=7d \
comment="Brute-force stage 3: blacklist 7d"
# Стадия 2: из stage1 → stage2 на 10 минут
add chain=input action=add-src-to-address-list protocol=tcp \
dst-port=22,8291 connection-state=new \
src-address-list=bruteforce-stage1 \
address-list=bruteforce-stage2 address-list-timeout=10m \
comment="Brute-force stage 2: 10min"
# Стадия 1: 3 попытки → stage1 на 1 минуту
add chain=input action=add-src-to-address-list protocol=tcp \
dst-port=22,8291 connection-state=new \
connection-limit=3,32 \
address-list=bruteforce-stage1 address-list-timeout=1m \
comment="Brute-force stage 1: 1min"
# Проверка: смотрим заблокированные адреса
/ip/firewall/address-list/print where list=blacklist
# Отключаем Bandwidth Server
/tool/bandwidth-server/set enabled=no
# Проверка
/tool/bandwidth-server/print
# enabled: no
# Ограничиваем Neighbor Discovery только LAN-интерфейсами
/ip/neighbor/discovery-settings/set discover-interface-list=LAN
# Проверка
/ip/neighbor/discovery-settings/print
# discover-interface-list: LAN
# MAC WinBox Server — только на LAN
/tool/mac-server/mac-winbox/set allowed-interface-list=LAN
# MAC Telnet Server — только на LAN
/tool/mac-server/set allowed-interface-list=LAN
# MAC Ping Server — отключаем
/tool/mac-server/ping/set enabled=no
# Проверка
/tool/mac-server/mac-winbox/print
/tool/mac-server/print
/tool/mac-server/ping/print
# Вариант 1: отключить allow-remote-requests (если не нужен)
/ip/dns/set allow-remote-requests=no
# Вариант 2: оставить для LAN, но закрыть firewall на WAN
/ip/dns/set allow-remote-requests=yes
# Блокируем DNS-запросы из WAN
/ip/firewall/filter/add chain=input action=drop protocol=udp \
dst-port=53 in-interface-list=WAN \
comment="Block DNS from WAN"
/ip/firewall/filter/add chain=input action=drop protocol=tcp \
dst-port=53 in-interface-list=WAN \
comment="Block DNS TCP from WAN"
# Проверка: с внешнего хоста попробуйте:
# nslookup google.com <ваш_внешний_IP>
# Должен быть timeout (не отвечает)
# Настраиваем NTP-клиент
/system/ntp/client/set enabled=yes
# Используем публичные NTP-серверы
/system/ntp/client/servers/add address=time.cloudflare.com
/system/ntp/client/servers/add address=pool.ntp.org
# Устанавливаем часовой пояс
/system/clock/set time-zone-name=Europe/Moscow
# Проверка
/system/ntp/client/print
/system/clock/print
# Время должно быть корректным
# Добавляем remote syslog action
/system/logging/action/add name=remote-syslog \
target=remote remote=192.168.88.100 remote-port=514 \
src-address=192.168.88.1 bsd-syslog=yes
# Логируем важные топики на remote
/system/logging/add topics=critical action=remote-syslog
/system/logging/add topics=error action=remote-syslog
/system/logging/add topics=warning action=remote-syslog
/system/logging/add topics=system action=remote-syslog
/system/logging/add topics=firewall action=remote-syslog
/system/logging/add topics=account action=remote-syslog
# Увеличиваем локальный буфер логов
/system/logging/action/set memory memory-lines=5000
# Проверка
/system/logging/print
/system/logging/action/print
# Проверяем текущую версию
/system/resource/print
# Проверяем доступные обновления
/system/package/update/set channel=stable
/system/package/update/check-for-updates
# Устанавливаем обновление (если доступно)
/system/package/update/install
# После перезагрузки — обновляем firmware
/system/routerboard/print
/system/routerboard/upgrade
/system/reboot
# Автоматическая проверка обновлений (уведомление в лог)
/system/scheduler/add name=check-updates interval=1d \
on-event="/system/package/update/check-for-updates" \
start-time=03:00:00 \
comment="Daily update check"
# Скрипт для автоматического бэкапа
/system/script/add name=auto-backup source={
:local date [/system/clock/get date]
:local hostname [/system/identity/get name]
/system/backup/save name=("backup-" . $hostname . "-" . $date) \
encryption=aes-sha256 password="BackupPass123!"
/export file=("export-" . $hostname . "-" . $date)
:log info "Backup created: backup-$hostname-$date"
}
# Запуск бэкапа каждую неделю
/system/scheduler/add name=weekly-backup interval=7d \
start-time=02:00:00 on-event=auto-backup \
comment="Weekly auto-backup"
# Проверка: запускаем скрипт вручную
/system/script/run auto-backup
/file/print where name~"backup"
# 1. Пользователь admin отключён
/user/print where name=admin
# disabled=yes
# 2. Ненужные сервисы отключены
/ip/service/print where disabled=no
# Только winbox и ssh
# 3. Сервисы ограничены по IP
/ip/service/print detail where disabled=no
# address не пустой
# 4. SSH-ключи настроены
/user/ssh-keys/print
# 5. Firewall input chain защищён
/ip/firewall/filter/print where chain=input
# Должен быть drop на WAN
# 6. Brute-force protection работает
/ip/firewall/filter/print where comment~"rute"
/ip/firewall/address-list/print where list~"brute"
# 7. Bandwidth Server отключён
/tool/bandwidth-server/print
# 8. Neighbor Discovery — только LAN
/ip/neighbor/discovery-settings/print
# 9. MAC-server — только LAN
/tool/mac-server/mac-winbox/print
/tool/mac-server/print
# 10. DNS защищён от внешних запросов
/ip/dns/print
/ip/firewall/filter/print where comment~"DNS"
# 11. NTP настроен
/system/ntp/client/print
/system/clock/print
# 12. Syslog настроен
/system/logging/action/print where target=remote
# 13. RouterOS обновлён
/system/resource/print
/system/routerboard/print
# 14. Бэкап scheduler существует
/system/scheduler/print where comment~"backup"
# 15. Нет подозрительных записей в логах
/log/print where topics~"account"
# На внешнем ПК (Linux/macOS):
# nmap -sS -sU -p 1-65535 <WAN_IP>
# Все порты должны быть filtered/closed
# Проверка DNS resolver:
# nslookup google.com <WAN_IP>
# Должен быть timeout
# Проверка Winbox:
# Попытка подключения WinBox к WAN_IP
# Должен быть Connection timeout (если правильно закрыт firewall)
# Неправильный порядок:
# 0 chain=input action=drop in-interface-list=WAN ← блокирует ВСЁ
# 1 chain=input action=accept protocol=icmp ← никогда не сработает
# Правильный порядок:
# 0 chain=input action=accept connection-state=established,related
# 1 chain=input action=drop connection-state=invalid
# 2 chain=input action=accept protocol=icmp limit=5,5
# 3 chain=input action=accept in-interface-list=LAN
# 4 chain=input action=drop in-interface-list=WAN ← ПОСЛЕДНЕЕ!
# Способ 1: Safe Mode (в WinBox/CLI)
# Перед изменениями нажмите Ctrl+X (Safe Mode)
# Если потеряете доступ — роутер автоматически откатит изменения через ~9 минут
# Способ 2: Scheduler для отката
# Перед опасными изменениями создайте scheduler:
/system/scheduler/add name=rollback interval=5m \
on-event="/ip/firewall/filter/remove [find chain=input action=drop]" \
comment="Emergency rollback - delete after testing"
# Способ 3: MAC WinBox (если физически в одной сети)
# WinBox → Neighbors → подключение по MAC-адресу (если MAC-server включён на LAN)
# Способ 4: Netinstall (крайний вариант)
# Полный сброс через Netinstall
# Проверяем SOCKS proxy
/ip/socks/print
# Если enabled=yes — СРОЧНО отключаем!
/ip/socks/set enabled=no
# Проверяем, нет ли подозрительных socks access rules
/ip/socks/access/print
/ip/socks/connections/print
# Проверяем UPnP
/ip/upnp/print
# Если enabled=yes — отключаем (или хотя бы ограничиваем)
/ip/upnp/set enabled=no
# Если UPnP нужен (Xbox, PlayStation) — ограничьте интерфейсы
/ip/upnp/set enabled=yes
/ip/upnp/interfaces/add interface=bridge type=internal
/ip/upnp/interfaces/add interface=ether1 type=external
# И добавьте в firewall правило для ограничения
# Проверяем: доступен ли Winbox из WAN
/ip/service/print where name=winbox
# Если address пуст — Winbox доступен отовсюду!
# Закрываем: ограничиваем по IP
/ip/service/set winbox address=192.168.88.0/24
# Или через firewall
/ip/firewall/filter/add chain=input action=drop protocol=tcp \
dst-port=8291 in-interface-list=WAN \
comment="Block Winbox from WAN" place-before=0
# Проверяем наличие backdoor:
# 1. Подозрительные пользователи
/user/print
# Должны быть только ваши пользователи
# 2. Подозрительные скрипты
/system/script/print
# Проверьте содержимое каждого скрипта
# 3. Подозрительные scheduler
/system/scheduler/print
# Проверьте on-event каждого scheduler
# 4. SOCKS proxy
/ip/socks/print
# 5. Подозрительные firewall rules (например, разрешающие доступ с чужих IP)
/ip/firewall/filter/print
/ip/firewall/nat/print
# 6. Подозрительные DNS static записи
/ip/dns/static/print
# 7. Файлы в Files
/file/print
# Если обнаружен backdoor — делайте полный Netinstall и настройку с нуля
# НЕ восстанавливайте бэкап — он может содержать backdoor
# ============================================================
# MikroTik Hardening Script — RouterOS 7.20+
# ВНИМАНИЕ: измените пароли и IP перед запуском!
# ============================================================
# --- 1. Новый пользователь ---
/user/add name=netadmin group=full password="CHANGE_THIS_PASSWORD_1"
# --- 2. Отключаем admin ---
/user/set admin disabled=yes
# --- 3. Отключаем ненужные сервисы ---
/ip/service/set telnet disabled=yes
/ip/service/set ftp disabled=yes
/ip/service/set www disabled=yes
/ip/service/set api disabled=yes
/ip/service/set api-ssl disabled=yes
/ip/service/set www-ssl disabled=yes
# --- 4. Ограничиваем оставшиеся сервисы ---
/ip/service/set winbox address=192.168.88.0/24
/ip/service/set ssh address=192.168.88.0/24
# --- 5. Interface lists ---
/interface/list/add name=WAN
/interface/list/add name=LAN
/interface/list/member/add interface=ether1 list=WAN
/interface/list/member/add interface=bridge list=LAN
# --- 6. Firewall INPUT ---
/ip/firewall/filter
add chain=input action=drop src-address-list=blacklist \
comment="Drop blacklisted"
add chain=input action=accept connection-state=established,related \
comment="Accept established/related"
add chain=input action=drop connection-state=invalid \
comment="Drop invalid"
add chain=input action=accept protocol=icmp icmp-options=8:0 \
limit=5,5:packet comment="Allow limited ping"
add chain=input action=accept in-interface-list=LAN \
comment="Accept from LAN"
add chain=input action=drop in-interface-list=WAN \
comment="Drop all from WAN"
# --- 7. Brute-force protection ---
# (Вставьте перед accept from LAN, если WinBox/SSH доступен из WAN)
# --- 8. DNS protection ---
add chain=input action=drop protocol=udp dst-port=53 \
in-interface-list=WAN comment="Block DNS from WAN"
add chain=input action=drop protocol=tcp dst-port=53 \
in-interface-list=WAN comment="Block DNS TCP from WAN"
# --- 9. Отключаем опасные сервисы ---
/tool/bandwidth-server/set enabled=no
/ip/neighbor/discovery-settings/set discover-interface-list=LAN
/tool/mac-server/mac-winbox/set allowed-interface-list=LAN
/tool/mac-server/set allowed-interface-list=LAN
/tool/mac-server/ping/set enabled=no
/ip/socks/set enabled=no
# --- 10. NTP ---
/system/ntp/client/set enabled=yes
/system/ntp/client/servers/add address=time.cloudflare.com
/system/ntp/client/servers/add address=pool.ntp.org
/system/clock/set time-zone-name=Europe/Moscow
# --- 11. Syslog ---
/system/logging/action/set memory memory-lines=5000
# --- 12. Backup scheduler ---
/system/script/add name=auto-backup source={
:local date [/system/clock/get date]
:local hostname [/system/identity/get name]
/system/backup/save name=("backup-" . $hostname . "-" . $date) \
encryption=aes-sha256 password="CHANGE_BACKUP_PASSWORD"
/export file=("export-" . $hostname . "-" . $date)
:log info "Auto-backup completed"
}
/system/scheduler/add name=weekly-backup interval=7d \
start-time=02:00:00 on-event=auto-backup
# --- Проверка ---
:log info "Hardening script applied. Verify all settings!"
/ip/service/print
/user/print
/ip/firewall/filter/print where chain=input