Защита Mikrotik в корпоративной сети торговой сети ТорговыйДом с 15 филиалами

Ситуация: 15 скомпрометированных роутеров

Розничная сеть «ТорговыйДом» управляет 15 магазинами, каждый с Mikrotik hEX (RB750Gr3) или hAP ac² в качестве шлюза. Обращение к itfresh.ru поступило после того, как интернет-провайдер заблокировал внешний IP центрального офиса за рассылку спама. Расследование показало: 11 из 15 роутеров были скомпрометированы — на них работали SOCKS-прокси и криптомайнеры в scheduler-скриптах.

Типичная картина на заражённом устройстве:

# Проверяем наличие чужих скриптов
/system script print
# Результат: 3 скрипта с именами "auto1", "auto2", "sysupd"

# Проверяем планировщик
/system scheduler print
# Результат: задачи, загружающие скрипты каждые 5 минут
# с адреса 91.92.128.x

# SOCKS-прокси включён
/ip socks print
# enabled: yes, port: 4153

# Чужие VPN-пользователи
/ppp secret print
# Обнаружен пользователь "vpnservice" с полным доступом

# DNS подменён
/ip dns print
# servers: 185.x.x.x (не провайдерский)

# Чужие firewall-правила с NAT
/ip firewall nat print
# dst-nat правило перенаправляет порт 8443 на внешний сервер

Очистка и базовое укрепление RouterOS

Первый шаг — удаление следов компрометации и обновление прошивки на всех 15 устройствах:

# Удаляем все чужие скрипты и задачи
/system script remove [find]
/system scheduler remove [find]

# Отключаем неиспользуемые сервисы
/ip socks set enabled=no
/ip proxy set enabled=no
/ip cloud set ddns-enabled=no update-time=no
/ip upnp set enabled=no
/tool bandwidth-server set enabled=no

# Отключаем обнаружение (часто используется для атак)
/ip neighbor discovery-settings set discover-interface-list=none
/tool mac-server set allowed-interface-list=none
/tool mac-server mac-winbox set allowed-interface-list=none

# Обновляем RouterOS до последней stable
/system package update check-for-updates
/system package update install

Настройка безопасного доступа к управлению:

# Создаём нового администратора, удаляем admin
/user add name=itadmin group=full password="СЛОЖНЫЙ_ПАРОЛЬ_32_СИМВОЛА"
# После входа под itadmin:
/user remove admin

# Ограничиваем сервисы управления
/ip service
set telnet disabled=yes
set ftp disabled=yes
set www disabled=yes
set api disabled=yes
set api-ssl disabled=yes
set ssh port=2222 address=192.168.88.0/24
set winbox port=8291 address=192.168.88.0/24

# Включаем логирование попыток входа
/system logging add topics=system,info,account action=memory

Firewall: запрещаем всё, разрешаем явно

Философия файрвола — default deny. Мы разработали единый набор правил для всех филиалов с минимальными модификациями под конкретный магазин:

# Список адресов для управления
/ip firewall address-list
add address=192.168.88.0/24 list=management
add address=10.10.0.0/16 list=vpn-networks

# === 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 с лимитом
add chain=input action=accept protocol=icmp icmp-options=8:0 \
    limit=5,5:packet comment="ICMP ping limited"

# Управление только из management-сети
add chain=input action=accept protocol=tcp dst-port=2222,8291 \
    src-address-list=management comment="SSH+WinBox from management"

# VPN (L2TP)
add chain=input action=accept protocol=udp dst-port=500,4500,1701 \
    comment="L2TP/IPsec"

# WireGuard
add chain=input action=accept protocol=udp dst-port=13231 \
    comment="WireGuard"

# DNS только для локальных
add chain=input action=accept protocol=udp dst-port=53 \
    src-address=192.168.0.0/16 comment="DNS local"

# Всё остальное — drop
add chain=input action=drop comment="Drop all other input"

# === FORWARD chain ===
add chain=forward action=accept connection-state=established,related
add chain=forward action=drop connection-state=invalid
add chain=forward action=accept src-address=192.168.0.0/16 \
    out-interface-list=WAN comment="LAN to WAN"
add chain=forward action=accept src-address-list=vpn-networks \
    dst-address=192.168.0.0/16 comment="VPN to LAN"
add chain=forward action=drop comment="Drop all other forward"

Дополнительно включаем защиту от типовых атак:

# SYN-flood protection
/ip firewall filter add chain=input action=add-src-to-address-list \
    address-list=syn-flood address-list-timeout=30m protocol=tcp \
    tcp-flags=syn connection-limit=100,32 comment="SYN flood detect"
/ip firewall filter add chain=input action=drop \
    src-address-list=syn-flood comment="Drop SYN flood"

# Port-scan detection
/ip firewall filter add chain=input action=add-src-to-address-list \
    address-list=port-scanner address-list-timeout=2w protocol=tcp \
    psd=21,3s,3,1 comment="Port scan detect"
/ip firewall filter add chain=input action=drop \
    src-address-list=port-scanner comment="Drop port scanners"

VPN между филиалами: L2TP/IPsec и WireGuard

Для объединения 15 филиалов мы развернули два типа VPN: L2TP/IPsec для совместимости со старым оборудованием и WireGuard для нового (RouterOS 7.x). Центральный офис выступает хабом.

Настройка L2TP/IPsec сервера на центральном Mikrotik:

# IPsec proposal
/ip ipsec proposal
add name=l2tp-proposal auth-algorithms=sha256 \
    enc-algorithms=aes-256-cbc lifetime=8h pfs-group=modp2048

# IPsec profile
/ip ipsec profile
add name=l2tp-profile dh-group=modp2048 \
    enc-algorithm=aes-256 hash-algorithm=sha256

# L2TP server
/interface l2tp-server server
set enabled=yes use-ipsec=required \
    ipsec-secret="PRE_SHARED_KEY_64_CHAR" \
    default-profile=vpn-profile

# Профиль для VPN-клиентов
/ppp profile
add name=vpn-profile local-address=10.10.0.1 \
    remote-address=vpn-pool dns-server=10.10.0.1

# Пул адресов
/ip pool add name=vpn-pool ranges=10.10.0.10-10.10.0.100

# Пользователи для каждого филиала
/ppp secret
add name=branch-01 password="УНИКАЛЬНЫЙ_ПАРОЛЬ" \
    profile=vpn-profile remote-address=10.10.0.11
add name=branch-02 password="УНИКАЛЬНЫЙ_ПАРОЛЬ" \
    profile=vpn-profile remote-address=10.10.0.12
# ... и так для каждого филиала

WireGuard на RouterOS 7 — проще и быстрее:

# На центральном роутере
/interface wireguard
add name=wg-hub listen-port=13231 mtu=1420

# Peer для филиала 01
/interface wireguard peers
add interface=wg-hub public-key="PUBLIC_KEY_BRANCH_01" \
    allowed-address=10.10.1.2/32,192.168.1.0/24 \
    endpoint-address=branch01.example.com endpoint-port=13231

# IP для WireGuard интерфейса
/ip address add address=10.10.1.1/24 interface=wg-hub

# Маршруты к сетям филиалов
/ip route add dst-address=192.168.1.0/24 gateway=wg-hub

WireGuard показал на 40% более высокую пропускную способность и на 30% меньшую латентность по сравнению с L2TP/IPsec на тех же каналах.

VLAN-сегментация и CAPsMAN для WiFi

В каждом магазине мы разделили сеть на сегменты через VLAN — кассы, рабочие станции, гостевой WiFi и IoT-устройства (весы, сканеры) не должны видеть друг друга:

# VLAN на bridge
/interface vlan
add interface=bridge name=vlan10-cash vlan-id=10
add interface=bridge name=vlan20-office vlan-id=20
add interface=bridge name=vlan30-guest vlan-id=30
add interface=bridge name=vlan40-iot vlan-id=40

# IP-адреса для каждого VLAN
/ip address
add address=192.168.10.1/24 interface=vlan10-cash
add address=192.168.20.1/24 interface=vlan20-office
add address=192.168.30.1/24 interface=vlan30-guest
add address=192.168.40.1/24 interface=vlan40-iot

# DHCP для каждого сегмента
/ip dhcp-server
add address-pool=pool-cash interface=vlan10-cash name=dhcp-cash
add address-pool=pool-office interface=vlan20-office name=dhcp-office
add address-pool=pool-guest interface=vlan30-guest name=dhcp-guest

# Изоляция гостевого WiFi — доступ только в интернет
/ip firewall filter
add chain=forward action=drop src-address=192.168.30.0/24 \
    dst-address=192.168.0.0/16 comment="Guest: no access to LAN"

CAPsMAN для централизованного управления WiFi во всех филиалах:

# На центральном роутере
/caps-man manager set enabled=yes

# Конфигурация WiFi
/caps-man configuration
add name=cfg-office ssid="TD-Office" security.authentication-types=wpa2-psk \
    security.passphrase="ПАРОЛЬ_ОФИС" datapath.vlan-id=20 datapath.vlan-mode=use-tag
add name=cfg-guest ssid="TD-Guest" security.authentication-types=wpa2-psk \
    security.passphrase="ПАРОЛЬ_ГОСТЬ" datapath.vlan-id=30 datapath.vlan-mode=use-tag

# Provisioning — автоматическое применение настроек к новым AP
/caps-man provisioning
add action=create-dynamic-enabled master-configuration=cfg-office \
    slave-configurations=cfg-guest name-format=identity

Мониторинг The Dude и автоматизация бэкапов

Для мониторинга всех 15 роутеров развернули The Dude на отдельном CHR (Cloud Hosted Router) в центральном офисе. Мониторим доступность, загрузку CPU, температуру, состояние VPN-туннелей и свободное место на flash.

Автоматические бэкапы конфигурации — отдельный скрипт, который выполняется каждый день в 3:00 и отправляет копию на FTP:

# /system script
:local hostname [/system identity get name]
:local date [/system clock get date]
:local backupName "$hostname-$date"

# Создаём backup
/system backup save name=$backupName dont-encrypt=yes

# Экспортируем в текстовый формат (для diff)
/export file=$backupName

# Отправляем на FTP
/tool fetch url="ftp://backup-server/mikrotik/$backupName.backup" \
    src-path="$backupName.backup" upload=yes \
    user=backup password="FTP_PASSWORD"
/tool fetch url="ftp://backup-server/mikrotik/$backupName.rsc" \
    src-path="$backupName.rsc" upload=yes \
    user=backup password="FTP_PASSWORD"

# Удаляем локальные файлы
/file remove "$backupName.backup"
/file remove "$backupName.rsc"

# Scheduler
/system scheduler add name=daily-backup interval=1d \
    start-time=03:00:00 on-event=backup-script

Обновление прошивки — по расписанию, но не автоматическое. Мы настроили скрипт, который проверяет наличие обновлений и отправляет уведомление в Telegram:

:local current [/system package update get installed-version]
:local latest [/system package update get latest-version]

:if ($current != $latest) do={
    :local msg "Router $[/system identity get name]: update available $current -> $latest"
    /tool fetch url="https://api.telegram.org/botTOKEN/sendMessage?chat_id=CHAT_ID&text=$msg" \
        keep-result=no
}

Результаты проекта

Проект по укреплению Mikrotik-инфраструктуры «ТорговыйДом» занял 2 недели:

  • Неделя 1: очистка от малвари, обновление RouterOS, настройка файрвола и VPN на всех 15 роутерах
  • Неделя 2: VLAN-сегментация, CAPsMAN, мониторинг, бэкапы, документация

Ключевые метрики после внедрения:

  • Скомпрометированных устройств: 0 (было 11 из 15)
  • Время развёртывания нового филиала: 40 минут (было 4 часа ручной настройки)
  • Централизованное управление WiFi через CAPsMAN — изменение пароля на всех 15 точках за одну команду
  • Автоматические бэкапы конфигурации с хранением 30 дней истории
  • Пропускная способность VPN выросла на 40% после перехода с L2TP/IPsec на WireGuard
  • Мониторинг The Dude обнаруживает отключение филиала за 30 секунд, оповещение в Telegram — за 60 секунд

Инженеры itfresh.ru подготовили пошаговую инструкцию для IT-отдела клиента, покрывающую добавление нового филиала — от распаковки роутера до подключения к CAPsMAN и VPN.

Часто задаваемые вопросы

Проверьте четыре места: /system scheduler (чужие задачи), /system script (неизвестные скрипты), /ip socks и /ip proxy (не должны быть включены), /user print (лишние учётные записи). Также проверьте /ip firewall nat на подозрительные dst-nat правила.
WireGuard быстрее на 30-40% и проще в настройке, но требует RouterOS 7.x. L2TP/IPsec совместим с RouterOS 6.x и любыми клиентами (Windows, macOS, iOS). Оптимальная стратегия — WireGuard для site-to-site и L2TP для мобильных пользователей.
Да. Даже в офисе на 10 человек стоит разделить минимум рабочую сеть и гостевой WiFi. Без сегментации гость с заражённым ноутбуком получает доступ к кассам, принтерам и файловому серверу. Настройка VLAN на Mikrotik занимает 15 минут.
Через The Dude — выбираете группу устройств, запускаете скрипт обновления. Альтернативно — скрипт на центральном роутере, который подключается по SSH к каждому филиалу и запускает /system package update install. Важно: обновляйте по одному филиалу и проверяйте результат.
Для базовых задач (маршрутизация, файрвол, VPN, VLAN) — да. hEX обрабатывает до 300 Мбит/с через VPN. Если нужен WiFi — hAP ac² или hAP ax³. Для магазинов с 50+ устройствами и тяжёлым VPN-трафиком рекомендуем RB4011 или CCR.

Нужна помощь с проектом?

Специалисты АйТи Фреш помогут с архитектурой, DevOps, безопасностью и разработкой — 15+ лет опыта

📞 Связаться с нами
#mikrotik#routeros#firewall#vpn#wireguard#l2tp#ipsec#capsman
Комментарии 0

Оставить комментарий

загрузка...