mikrotik-wiki.ru
Главная
Загрузка...

Безопасность MikroTik — hardening и защита

RouterOS 7.xIP13 мин230 мар. 2026 г.
TelegramVK

Безопасность 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-роутер:

  1. Brute-force — перебор паролей через Winbox, SSH, API, Web
  2. Эксплуатация уязвимостей — CVE в RouterOS (Winbox, SMB, DNS)
  3. Man-in-the-Middle — перехват управления через незашифрованные протоколы (Telnet, HTTP, FTP)
  4. DNS hijacking — подмена DNS-ответов через открытый DNS-resolver
  5. Neighbor Discovery — обнаружение устройства через MNDP/CDP
  6. MAC-server — доступ к управлению через L2 (без IP-адреса)
  7. 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 мер безопасности за один раз. Перед запуском:

  1. Измените пароли на свои
  2. Измените IP-подсеть на свою
  3. Измените имя пользователя на своё
  4. Запускайте из 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-правила. Один пропущенный патч или один забытый открытый порт — и ваш роутер может стать частью ботнета.

[admin@MikroTik] >
# Устанавливаем сложный пароль (минимум 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
IP / Безопасность MikroTik — hardening и защита