Users на MikroTik — учётные записи и права доступа
Пользователи и группы на MikroTik — права доступа и SSH-ключи
Управление пользователями — критически важный аспект безопасности MikroTik. По умолчанию RouterOS создаёт единственного пользователя admin с полными правами и пустым паролем. В production-среде это недопустимо: каждый администратор должен иметь свою учётную запись, права должны быть ограничены по принципу наименьших привилегий, а доступ — защищён SSH-ключами. В этом руководстве разберём систему пользователей и групп RouterOS, настроим разграничение доступа и аутентификацию по ключам.
Руководство актуально для RouterOS 7.20+.
Описание
Модель безопасности RouterOS
RouterOS использует ролевую модель доступа (RBAC): каждый пользователь принадлежит к группе, а группа определяет набор разрешённых действий (policies). Пользователь не может выполнить действие, если его группа не имеет соответствующей политики.
Стандартные группы
RouterOS создаёт три группы по умолчанию:
| Группа | Назначение | Ключевые политики |
|---|---|---|
full | Полный доступ ко всем функциям | Все политики включены, включая policy (управление пользователями) |
write | Чтение и запись конфигурации, но без управления пользователями | Нет policy, reboot, sensitive |
read | Только чтение конфигурации | Только read, winbox, web, api, test |
Политики (policies)
Каждая группа — это набор политик. Вот полный список доступных политик в RouterOS 7.20:
| Политика | Описание |
|---|---|
read | Чтение конфигурации |
write | Изменение конфигурации (кроме пользователей) |
policy | Управление пользователями и группами |
reboot | Перезагрузка устройства |
ftp | Доступ по FTP и загрузка/скачивание файлов |
sensitive | Просмотр паролей и ключей в конфигурации |
local | Доступ через консольный порт |
telnet | Доступ по Telnet |
ssh | Доступ по SSH |
winbox | Доступ через WinBox |
web | Доступ через WebFig |
api | Доступ через API |
rest-api | Доступ через REST API |
sniff | Запуск packet sniffer |
test | Выполнение команд диагностики (ping, traceroute, bandwidth-test) |
romon | Доступ через RoMON |
dude | Доступ к The Dude |
tikapp | Доступ через мобильное приложение MikroTik |
Важно: политика
policyдаёт право управлять другими пользователями и группами. Назначайте её только главным администраторам. Пользователь сpolicyможет создать себе полные права или удалить других админов.
Ограничение по IP-адресу
Каждому пользователю можно задать поле allowed-address — список IP-адресов или подсетей, с которых разрешён вход. Если пользователь попытается подключиться с другого адреса — RouterOS откажет в доступе, даже если пароль верный.
Настройка
Создание пользователей
Начнём с создания структуры пользователей для типовой компании: главный администратор, младший администратор и учётная запись для мониторинга.
Главный администратор
[admin@MikroTik] >/user/add name=ivanov group=full password="Str0ng!P@ssw0rd" \ allowed-address=10.0.0.0/8 comment="Иванов И.И. — главный сетевой администратор"
Администратор с ограниченными правами
[admin@MikroTik] >/user/add name=petrov group=write password="An0th3r!P@ss" \ allowed-address=10.0.0.0/8 comment="Петров П.П. — младший администратор"
Учётная запись для мониторинга (только чтение)
[admin@MikroTik] >/user/add name=zabbix group=read password="M0nit0ring!Key" \ allowed-address=10.0.1.50/32 comment="Zabbix monitoring — read only"
Отключение или удаление стандартного admin
После создания администратора с полными правами отключите стандартную учётную запись admin:
[admin@MikroTik] ># Отключить (рекомендуется — можно включить обратно при необходимости) /user/set [find name=admin] disabled=yes # Или удалить полностью (необратимо) /user/remove [find name=admin]
Внимание: не удаляйте
admin, пока не убедитесь, что можете войти под новым пользователем с группойfull. Иначе потеряете доступ к устройству.
Создание пользовательских групп
Стандартных групп не всегда достаточно. Создадим специализированные группы для разных задач.
Группа для мониторинга (расширенная)
[admin@MikroTik] >/user/group/add name=monitoring policy=read,api,rest-api,test,winbox,web \ comment="Monitoring systems — read + API + diagnostics"
Эта группа позволяет читать конфигурацию, выполнять диагностику (ping, traceroute) и подключаться через API — всё, что нужно для мониторинга, и ничего лишнего.
Группа для младших администраторов
[admin@MikroTik] >/user/group/add name=junior-admin \ policy=read,write,test,winbox,web,ssh,ftp,local,tikapp \ comment="Junior admins — no reboot, no user management, no sensitive"
Пользователи этой группы могут менять конфигурацию, но не могут: перезагружать устройство, управлять пользователями, видеть пароли в конфигурации.
Группа для Wi-Fi администраторов
[admin@MikroTik] >/user/group/add name=wifi-admin \ policy=read,write,test,winbox,web \ comment="Wi-Fi admins — config changes via WinBox/WebFig only"
Применение пользовательской группы
[admin@MikroTik] >/user/add name=monitoring-svc group=monitoring password="M0n!t0rSvc" \ allowed-address=10.0.1.0/24 comment="Service account for monitoring" /user/add name=sidorov group=junior-admin password="Jun!0r@dmin" \ allowed-address=10.0.0.0/8 comment="Сидоров С.С. — младший администратор"
Аутентификация по SSH-ключам
Парольная аутентификация уязвима для brute-force атак. SSH-ключи значительно безопаснее: приватный ключ остаётся на компьютере администратора, а публичный загружается на роутер.
Генерация SSH-ключа (на компьютере администратора)
На Linux/macOS/Windows (в терминале):
codessh-keygen -t ed25519 -C "ivanov@company.ru"
Это создаст два файла:
~/.ssh/id_ed25519— приватный ключ (хранить в секрете!)~/.ssh/id_ed25519.pub— публичный ключ (загружается на роутер)
Для RSA (если ed25519 не поддерживается):
codessh-keygen -t rsa -b 4096 -C "ivanov@company.ru"
Загрузка публичного ключа на роутер
Сначала загрузите файл публичного ключа на роутер:
[admin@MikroTik] ># С компьютера администратора scp ~/.ssh/id_ed25519.pub ivanov@192.168.88.1:id_ed25519.pub
Затем импортируйте ключ на роутере:
[admin@MikroTik] >/user/ssh-keys/import public-key-file=id_ed25519.pub user=ivanov
Проверьте, что ключ импортирован:
[admin@MikroTik] >/user/ssh-keys/print
Импорт ключей для нескольких пользователей
[admin@MikroTik] ># Загрузите все публичные ключи на роутер, затем: /user/ssh-keys/import public-key-file=ivanov-ed25519.pub user=ivanov /user/ssh-keys/import public-key-file=petrov-ed25519.pub user=petrov /user/ssh-keys/import public-key-file=sidorov-ed25519.pub user=sidorov
Отключение парольной аутентификации SSH
После настройки ключей для всех администраторов можно отключить парольную аутентификацию по SSH. Это исключит brute-force атаки:
[admin@MikroTik] >/ip/ssh/set always-allow-password-login=no
Осторожно: после этого вход по SSH возможен ТОЛЬКО с ключом. Убедитесь, что:
- У всех администраторов есть рабочие ключи.
- Вы можете войти через WinBox (как резервный вариант).
- У вас есть доступ через консольный порт (serial) на случай проблем.
Дополнительные настройки SSH
[admin@MikroTik] ># Изменить порт SSH (по умолчанию 22) /ip/ssh/set strong-crypto=yes # Просмотр текущих настроек /ip/ssh/print
Включение strong-crypto=yes отключает устаревшие алгоритмы шифрования и обмена ключами, оставляя только современные (AES-256, ChaCha20, Ed25519).
Ограничение доступа по IP
Настройте allowed-address для каждого пользователя, чтобы ограничить подключение только из доверенных сетей:
[admin@MikroTik] ># Разрешить только из management-подсети /user/set [find name=ivanov] allowed-address=10.0.100.0/24 # Разрешить из нескольких подсетей /user/set [find name=petrov] allowed-address=10.0.100.0/24,192.168.88.0/24 # Мониторинг — только с конкретного сервера /user/set [find name=zabbix] allowed-address=10.0.1.50/32
Настройка таймаута сессии
По умолчанию сессия WinBox/WebFig не имеет таймаута бездействия. Это опасно — оставленная открытой сессия может быть использована злоумышленником. Настройте автоматическое отключение:
[admin@MikroTik] >/ip/service/set www-ssl address=10.0.0.0/8 /ip/service/set winbox address=10.0.0.0/8 /ip/service/set ssh address=10.0.0.0/8 # Отключить ненужные сервисы /ip/service/disable telnet /ip/service/disable ftp /ip/service/disable www /ip/service/disable api /ip/service/disable api-ssl
Проверка
Список пользователей
[admin@MikroTik] >/user/print detail
Убедитесь, что:
- У каждого пользователя задан
allowed-address. - Стандартный
adminотключён или удалён. - Нет пользователей без пароля (кроме тех, кто использует только SSH-ключи).
- Каждый пользователь в правильной группе.
Список групп
[admin@MikroTik] >/user/group/print
Проверьте, что политики каждой группы соответствуют задачам.
Список SSH-ключей
[admin@MikroTik] >/user/ssh-keys/print
Убедитесь, что у всех администраторов импортированы актуальные ключи.
Проверка доступа
Проверьте вход для каждого пользователя:
[admin@MikroTik] ># Тест SSH с ключом (с компьютера администратора) # ssh ivanov@192.168.88.1 # Тест SSH с паролем (должен быть отклонён, если парольная аутентификация отключена) # ssh petrov@192.168.88.1 (ввести пароль — должен получить отказ) # Тест подключения с неразрешённого IP # ssh ivanov@192.168.88.1 (с IP вне allowed-address — должен получить отказ)
Аудит подключений
Проверьте, кто и когда подключался к роутеру:
[admin@MikroTik] >/log/print where topics~"system"
В логах будут записи вида:
codeuser ivanov logged in from 10.0.100.5 via ssh user petrov logged in from 10.0.100.12 via winbox login failure for user admin from 85.214.xx.xx via ssh
Для более детального аудита включите расширенное логирование:
[admin@MikroTik] >/system/logging/add topics=system,info action=remote \ prefix="auth"
Проверка активных сессий
[admin@MikroTik] ># Активные пользователи /user/active/print # Кто сейчас подключён через какой протокол /user/active/print detail
Типичные ошибки
1. Работа под стандартным пользователем admin
Проблема: все администраторы входят под одной учётной записью admin. Невозможно отследить, кто и когда вносил изменения. При компрометации пароля — полный доступ к устройству.
Решение: создайте персональные учётные записи для каждого администратора. Отключите или удалите admin:
[admin@MikroTik] ># Создать персонального пользователя /user/add name=ivanov group=full password="Str0ng!P@ss" \ allowed-address=10.0.0.0/8 # Войти под новым пользователем, убедиться в работоспособности # Отключить admin /user/set [find name=admin] disabled=yes
2. Пользователь без ограничения по IP
Проблема: пользователь может подключиться с любого IP-адреса, включая интернет. При утечке пароля или ключа злоумышленник получит доступ откуда угодно.
Решение: всегда задавайте allowed-address. Даже для пользователей с SSH-ключами — это дополнительный уровень защиты:
[admin@MikroTik] >/user/set [find name=ivanov] allowed-address=10.0.100.0/24
3. Группа full для всех пользователей
Проблема: все пользователи в группе full, включая мониторинг и младших администраторов. Нарушен принцип наименьших привилегий — любой пользователь может удалить других, перезагрузить роутер или просмотреть пароли.
Решение: создайте специализированные группы. Мониторинг — только read, младшие администраторы — write без policy и reboot:
[admin@MikroTik] >/user/group/add name=monitoring policy=read,api,rest-api,test,winbox /user/set [find name=zabbix] group=monitoring
4. Потеря доступа после отключения admin
Проблема: отключили admin, а новый пользователь не может войти — неправильный пароль, неверный allowed-address или не та группа.
Решение: перед отключением admin убедитесь в работоспособности нового пользователя:
- Создайте нового пользователя в группе
full. - Откройте вторую сессию WinBox/SSH и войдите под новым пользователем.
- Убедитесь, что всё работает.
- Только после этого отключайте
adminиз первой сессии.
Если доступ всё же потерян — используйте сброс через кнопку Reset на устройстве (пароли будут сброшены).
5. Забыли отключить парольную аутентификацию после настройки SSH-ключей
Проблема: SSH-ключи настроены, но парольная аутентификация по-прежнему включена. Злоумышленник может пытаться подобрать пароль brute-force.
Решение: после проверки работоспособности ключей отключите пароли:
[admin@MikroTik] >/ip/ssh/set always-allow-password-login=no
Дополнительно настройте firewall для защиты от brute-force на SSH-порт:
[admin@MikroTik] >/ip/firewall/filter add chain=input protocol=tcp dst-port=22 src-address-list=ssh-blocklist \ action=drop comment="Drop SSH brute-force" add chain=input protocol=tcp dst-port=22 connection-state=new \ src-address-list=ssh-stage3 action=add-src-to-address-list \ address-list=ssh-blocklist address-list-timeout=1d add chain=input protocol=tcp dst-port=22 connection-state=new \ src-address-list=ssh-stage2 action=add-src-to-address-list \ address-list=ssh-stage3 address-list-timeout=1m add chain=input protocol=tcp dst-port=22 connection-state=new \ action=add-src-to-address-list address-list=ssh-stage2 \ address-list-timeout=1m
6. Не логируются попытки входа
Проблема: невозможно отследить неудачные попытки входа — нет данных для расследования инцидентов.
Решение: убедитесь, что логирование системных событий включено:
[admin@MikroTik] ># Проверить текущие правила логирования /system/logging/print # Добавить логирование в память (по умолчанию включено) /system/logging/add topics=system,info,warning,error action=memory # Для централизованного логирования — отправка на syslog-сервер /system/logging/action/add name=remote-syslog target=remote \ remote=10.0.1.100 remote-port=514 /system/logging/add topics=system,info,warning action=remote-syslog
Регулярно проверяйте логи на предмет подозрительных попыток входа:
[admin@MikroTik] >/log/print where message~"login failure"
/user/add name=ivanov group=full password="Str0ng!P@ssw0rd" \ allowed-address=10.0.0.0/8 comment="Иванов И.И. — главный сетевой администратор" /user/add name=petrov group=write password="An0th3r!P@ss" \ allowed-address=10.0.0.0/8 comment="Петров П.П. — младший администратор" /user/add name=zabbix group=read password="M0nit0ring!Key" \ allowed-address=10.0.1.50/32 comment="Zabbix monitoring — read only" # Отключить (рекомендуется — можно включить обратно при необходимости) /user/set [find name=admin] disabled=yes # Или удалить полностью (необратимо) /user/remove [find name=admin] /user/group/add name=monitoring policy=read,api,rest-api,test,winbox,web \ comment="Monitoring systems — read + API + diagnostics" /user/group/add name=junior-admin \ policy=read,write,test,winbox,web,ssh,ftp,local,tikapp \ comment="Junior admins — no reboot, no user management, no sensitive" /user/group/add name=wifi-admin \ policy=read,write,test,winbox,web \ comment="Wi-Fi admins — config changes via WinBox/WebFig only" /user/add name=monitoring-svc group=monitoring password="M0n!t0rSvc" \ allowed-address=10.0.1.0/24 comment="Service account for monitoring" /user/add name=sidorov group=junior-admin password="Jun!0r@dmin" \ allowed-address=10.0.0.0/8 comment="Сидоров С.С. — младший администратор" ssh-keygen -t ed25519 -C "ivanov@company.ru" ssh-keygen -t rsa -b 4096 -C "ivanov@company.ru" # С компьютера администратора scp ~/.ssh/id_ed25519.pub ivanov@192.168.88.1:id_ed25519.pub /user/ssh-keys/import public-key-file=id_ed25519.pub user=ivanov /user/ssh-keys/print # Загрузите все публичные ключи на роутер, затем: /user/ssh-keys/import public-key-file=ivanov-ed25519.pub user=ivanov /user/ssh-keys/import public-key-file=petrov-ed25519.pub user=petrov /user/ssh-keys/import public-key-file=sidorov-ed25519.pub user=sidorov /ip/ssh/set always-allow-password-login=no # Изменить порт SSH (по умолчанию 22) /ip/ssh/set strong-crypto=yes # Просмотр текущих настроек /ip/ssh/print # Разрешить только из management-подсети /user/set [find name=ivanov] allowed-address=10.0.100.0/24 # Разрешить из нескольких подсетей /user/set [find name=petrov] allowed-address=10.0.100.0/24,192.168.88.0/24 # Мониторинг — только с конкретного сервера /user/set [find name=zabbix] allowed-address=10.0.1.50/32 /ip/service/set www-ssl address=10.0.0.0/8 /ip/service/set winbox address=10.0.0.0/8 /ip/service/set ssh address=10.0.0.0/8 # Отключить ненужные сервисы /ip/service/disable telnet /ip/service/disable ftp /ip/service/disable www /ip/service/disable api /ip/service/disable api-ssl /user/print detail /user/group/print /user/ssh-keys/print # Тест SSH с ключом (с компьютера администратора) # ssh ivanov@192.168.88.1 # Тест SSH с паролем (должен быть отклонён, если парольная аутентификация отключена) # ssh petrov@192.168.88.1 (ввести пароль — должен получить отказ) # Тест подключения с неразрешённого IP # ssh ivanov@192.168.88.1 (с IP вне allowed-address — должен получить отказ) /log/print where topics~"system" user ivanov logged in from 10.0.100.5 via ssh user petrov logged in from 10.0.100.12 via winbox login failure for user admin from 85.214.xx.xx via ssh /system/logging/add topics=system,info action=remote \ prefix="auth" # Активные пользователи /user/active/print # Кто сейчас подключён через какой протокол /user/active/print detail # Создать персонального пользователя /user/add name=ivanov group=full password="Str0ng!P@ss" \ allowed-address=10.0.0.0/8 # Войти под новым пользователем, убедиться в работоспособности # Отключить admin /user/set [find name=admin] disabled=yes /user/set [find name=ivanov] allowed-address=10.0.100.0/24 /user/group/add name=monitoring policy=read,api,rest-api,test,winbox /user/set [find name=zabbix] group=monitoring /ip/ssh/set always-allow-password-login=no /ip/firewall/filter add chain=input protocol=tcp dst-port=22 src-address-list=ssh-blocklist \ action=drop comment="Drop SSH brute-force" add chain=input protocol=tcp dst-port=22 connection-state=new \ src-address-list=ssh-stage3 action=add-src-to-address-list \ address-list=ssh-blocklist address-list-timeout=1d add chain=input protocol=tcp dst-port=22 connection-state=new \ src-address-list=ssh-stage2 action=add-src-to-address-list \ address-list=ssh-stage3 address-list-timeout=1m add chain=input protocol=tcp dst-port=22 connection-state=new \ action=add-src-to-address-list address-list=ssh-stage2 \ address-list-timeout=1m # Проверить текущие правила логирования /system/logging/print # Добавить логирование в память (по умолчанию включено) /system/logging/add topics=system,info,warning,error action=memory # Для централизованного логирования — отправка на syslog-сервер /system/logging/action/add name=remote-syslog target=remote \ remote=10.0.1.100 remote-port=514 /system/logging/add topics=system,info,warning action=remote-syslog /log/print where message~"login failure"