Укрепляем защиту Mikrotik
Содержание
1. Вступление

С тех пор как я вступил в секту приобрел себе роутер Mikrotik, всегда было интересно, от чего почти никто не может нормально его настроить, чтобы никто его не взламывал. Уже через быструю настройку (самый первый пункт меню в WinkBox Quick Set
) получаешь нормальный фаерволл, через который никто извне не подключится. Однако, я нахожу просто ОХРЕНЕТЬ как много торчащих голой жопой наружу микротов. На скриншоте сверху стандартный набор открытых портов.
В этой статье я, собственно, поведаю о том, как же защитить свой микрот. И да, здесь всё указано для RouterOS v7. Ничего, в принципе-то, сложного и нет. Касаемо фаерволла, просто, по сути выложу дефолтный, плюс опциональные добавки (защита от сканеров портов, как пример).
2. Какие же есть способы?
Если настраиваешь в первый раз, то очень рекомендую отталкиваться от дефолтного конфига. Сначала нужно сбросить конфиг роутера на, именно, пустой. Для этого в WinBox выбери System->Reset Configuration
и, обязательно, поставь галки напротив No Default Configuration
и Do Not Backup
. Через терминал делается так: > system/reset-configuration no-defaults=yes skip-backup=yes
. И после этого, используй Quick Set
чтобы настроить локалку и выход в Интернет. Если правильно помню (в последний раз в 2019 году это делал, когда впервые настраивал), то если сбросить с применением дефолтного конфига, то в нём не будет настроен фаерволл, возможно, это всё поменялось уже.
Жизненно необходимо поддерживать свежесть прошивки роутера. Ибо периодически исправляются различные уязвимости используемые для включения роутеров в ботнет, или, как пример, превращение его в прокси-сервер.
Обязательно нужно установить пароль для админки. Многие советуют переименовывать админа, но я этого никогда не делаю, потому как извне доступа всё равно нет.
Потом, можно, да и нужно, ограничить доступ только с определённых IP-адресов. При чём, это как для пользователя настраивается, так и для различных сервисов на роутере.
И после пойдёт речь о фаерволле.
И перед тем, как начнём, хочу дать очень важную подсказку, которая точно сохранит тебе время, а может и деньги — используй безопасный режим Safe Mode
! В WinBox нажми соответствующую кнопку в верхнем левом углу, а в 4 версии WinBox он стал переключаетелем вверху справа. В терминале он активируется сочетанием Ctrl-X
. После того, как сделал дела, не забудь отключить его, чтобы сохранить все изменения, WinBox хотя бы предупреждает, а вот терминал молча всё откатит. :)
2.1 Обновления
Обновить прошивку в WinBox можно зайдя в System->Packages
и кликнув по кнопке Check For Updates
. В терминале: > system/package/update/check-for-updates
. После перезагрузки нужно будет обновить прошивку RouterBOARD. В WinBox пройди в System->RouterBOARD
и кликни Upgrade
. После этого нужно ещё раз перезагрузиться. Для этого в WinBox иди в System->Reboot
. Через терминал: > system/routerboard/upgrade
, а потом перезагрузить: > system/reboot
.
2.2. Пользователи
Чтобы сменить пароль в WinBox иди в System->Users
, кликни два раза по аккаунту админа и в диалоге нажми кнопку Password...
. В терминале введи: > user/set admin password=new_password
.
Как уже было мною подмечено, каждому пользователю и части сервисов можно ограничить доступ определёнными адресами.
Для пользователей это поле Allowed Address
, куда можно внести множество значений в виде отдельного адреса или подсети в CIDR нотации (192.168.0.0/24
). В WinBox в System->Users
кликни два раза по пользователю и редактируй поле Allowed Address
, через терминал введи: > user/set admin address=
и перечисли всё через запятые, например, address=192.168.88.3,192.168.89.0/24
.
2.3. Настройка сервисов
Существует несколько способов настройки роутеров: Winbox, SSH, Telnet, WebFig и API. Также есть доступ к файловой системе через FTP/SFTP.
Первым делом хорошо бы отключить всё ненужное. В WinBox пройди в IP->Services
и выделяя нужный вверху диалога нажми на кнопку Disable
чтобы выключить сервис, либо Enable
, дабы включить обратно. Через терминал: > ip/service/set сервис disabled=yes
.
Я всегда оставляю только доступ через WinBox и SSH.
И, для них можно ограничить доступ с опрделённых IP-адресов. Также как и у пользователей, только поле называется Available From
. В терминале: > ip/service/set сервис address=192.168.88.2,192.168.89.0/24
.
2.4. SSH
В 7 версии добавили поддержку эллиптических кривых, что я сам и использую, хотя RSA своей актуальности не потерял.
В WinBox настройки SSH находятся по пути IP->SSH
. Там рекомендую отключить опции Always Allow Password Login
и Forwarding Enabled
, включить опцию Strong Crypto
, поле Ciphers
оставить в значении Auto
. А Host Key Type
выбрать по вкусу, RSA
(и задать размер побольше в поле Host Key Size
), либо Ed25519
. После кликнуть кнопку Regenerate Host Key
.
Через терминал так: > ip/ssh/set always-allow-password-login=no strong-crypto=yes host-key-type= host-key-size=<если rsa> forwarding-enabled=no
, потом, чтобы пересоздать ключ, > ip/ssh/regenerate-host-key
и подтверди.
А вот пользовательские ключи, по которым потом мы подключаемся, указываются в System->Users
на вкладке SSH Keys
по кнопке Import SSH Key
.
Прежде ключ нужно сохранить в файл на роутере, для этого идём в Files
и прям там, выбираем вверху слева New->Text file
, задаём имя, и копируем туда содержимое файла ./.ssh/<cipher>.pub
расположенного на хосте, откуда будете подключаться.
Через терминал создавать так: > file/add type=file name=/flash/keyfile contents="..."
.
Потом через терминал вот так импортировать: > user/ssh-keys/add user=admin key=flash/keyfile
.
Всё, теперь можно спокойно подключаться без пароля.
2.5. Базовый фаерволл
Как я указал выше, дефолтный фаерволл, что получаем через быструю настройку вполне самодостаточен.
В WinBox иди в IP->Firewall
для настройки IPv4 и в IPv6->Firewall
для IPv6. В терминале: > ip/firewall/filter
, либо > ipv6/firewall/filter
.
В терминале после перехода в нужную секцию, используй комманды add
и remove
чтобы добавлять и удалять правила. Введи print
чтобы отобразить все правила.
Далее я предоставлю правила для простого, дефолтного, фаерволла. Он будет пропускать весь разрешённый трафик прошедший через цепочки, разрешит пинговать роутер извне, и будет отбрасывать всё что не идёт из локальной сети и при этом, не имеет правил NAT.
2.5.1. Цепочка Input
Для IPv4 простой (к тому же дефолтный!) фаерволл на вход роутера, который не даст его в обиду выглядит так:
1 chain=input action=accept connection-state=established,related,untracked
2 chain=input action=drop connection-state=invalid
3 chain=input action=accept protocol=icmp
4 chain=input action=drop in-interface-list=!LAN
Всё просто, сначала пропускаем всё, что уже прошло через цепочку и было разрешено. Дальше отбрасывем кривые пакеты, разрешаем пинговать роутер, и, самое важное, отбрасываем весь остальной трафик, что не идёт из списка локальных интерфесов LAN, всё, извне только пинг проходить будет.
То же для IPv6:
1 chain=input action=accept connection-state=established,related,untracked
2 chain=input action=drop connection-state=invalid
3 chain=input action=accept protocol=icmpv6
;;; defconf: accept UDP traceroute
4 chain=input action=accept protocol=udp port=33434-33534
;;; defconf: accept DHCPv6-Client prefix delegation.
5 chain=input action=accept protocol=udp src-address=fe80::/10 dst-port=546
6 chain=input action=drop in-interface-list=!LAN
Всё тоже самое, что и для IPv4, плюс специфичное для IPv6. Дополнительно разрешает трассировку маршрутов, разрешая указанный диапазон портов, а также пропускаем делегацию префиксов с link-local адресов.
2.5.2. Цепочка Forward
И вот, также, дефолт для транзитного IPv4 траффика:
1 chain=forward action=fasttrack-connection hw-offload=yes connection-state=established,related,untracked
2 chain=forward action=accept connection-state=established,related,untracked
3 chain=forward action=drop connection-state=invalid
4 chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface-list=WAN
С механизмом FastTrack можно ознакомиться в документации.
Если коротко, этот механизм шлёт трафик в обход процессора, через чип коммутатора, что увеличивает пропускную способность и разгружает процессор. Но тогда теряется возможность обрабатывать трафик, например помечать пакеты, и всякое другое, что можно вытворять в разделе mangle
.
В последнем правиле мы отбрасываем весь транзитный трафик идущий извне для которого нет соответствующего DSTNAT-правила в разделе NAT.
А вот для IPv6:
1 chain=forward action=fasttrack-connection connection-state=established,related,untracked
2 chain=forward action=accept connection-state=established,related,untracked
3 chain=forward action=drop connection-state=invalid
4 chain=forward action=drop src-address-list=bad_ipv6
5 chain=forward action=drop dst-address-list=bad_ipv6
6 chain=forward action=accept protocol=icmpv6
;;; defconf: rfc4890 drop hop-limit=1
7 chain=forward action=drop protocol=icmpv6 hop-limit=equal:1
8 chain=forward action=drop in-interface-list=!LAN
В 4 и 5 правилах мы отбрасываем трафик из списка bad_ipv6 (который идёт, опять же, в дефолте). Там прописаны диапазоны зарезервированных и специализированных адресов, которые не должны маршрутизироваться. Для IPv6 реализовали fasttrack, но пока обработка идёт самим процессором.
Если не используешь NATv6, то, чтобы разрешить доступ к определённому адресу и порту, добавь соответсвующее правило перед последним: chain=forward action=accept dst-address= dst-port= connection-state=new
. Если используешь NATv6, то, просто замени последнее правило на то, что у IPv4, где идет проверка DSTNAT.
3. Что можно сделать дополнительно?
Здесь добавлю что можно дополнительно сделать для укрепления безопаности роутера.
Сразу скажу, механизм port-knocking это, конечно, замечательно, но я предпочитаю, всё же, доступ извне ко своей сети заворачивать в VPN.
3.1. Ограничение сканирования портов
В RouterOS есть механизм, позволяющий обнаруживать сканнеры портов.
Для этого через WinBox в фаерволле для цепочки input и протоколов TCP и UDP нужно добавить правила, где указать in-interface-list=WAN
, потом на вкладке Extra
раскрыть раздел PSD
(Port Scan Detection), где настроить поля. Я, опять же, решил оставить дефолтные значения. Для поля Weight Threshold
оставил значение 21, для Delay Threshold
— 3 секунды, для Low Port Weight
— 3, а для High Port Weight
— 1. Т.е. если за 3 секунды набирается вес 21+, то мы добавляем IP-адрес в список. Для этого на вкладке Action
, выбираем действие add src to address list
, в поле Address List
добавляем название списка по вкусу, и в поле Timeout
указываем, сколько времени он там будет откисать. :) Я указал значение из списка — none dynamic
, чтобы роутер сам принимал решение, сколько его там держать, через терминал, при этом, при выводе отображается таймаут 1 час.
В терминале делается так: > ip/firewall/filter/add place-before=<номер последнего правила> chain=input action=add-src-to-address-list protocol=tcp psd=21,3s,3,1 address-list=whores address-list-timeout=1h in-interface-list=WAN
.
А чтобы, собственно, этих негодяев не пущать, нужно добавить соответствующее правило. Его мы добавим на вкладке Raw
, чтобы не нагужать сильно процессор. Создаём правило, цепочку выбираем prerouting
, задаём в поле Src. Address List
наш список прокаженных, и на вкладке Action
выбираем drop
.
Через терминал: > ip/firewall/raw/add chain=prerouting action=drop src-address-list=whores
.