
Защита Mikrotik от брутфорса
...и автоматического сканирования
В этой заметке я опишу основные шаги по защите от нетаргетированного ботнета (который сканирует и брутфорсит все ip, которые найдет в сети). Как только вы выставляете любую железку с белым ip в мир — не пройдет и 5-10 минут, как его начнут сканировать, поэтому мы создадим несколько простых правил, которые будут банить ip ботнета и drop`ать их пакеты.
Основными целями всегда являются дефолтные порты и сервисы с наиболее уязвимыми приложениями за ними, например:
- 21 (ftp)
- 22 (ssh)
- 23 (telnet)
- 3389 (RDP)
- 5060 (SIP)
На основе обращений к указанным портам мы и создадим правила, по которым все ip, которые обращаются к ним, будут считаться брутфорсерами и, соответственно, будут добавлены в черный список.
Для начала отключим лишние сервисы на самом Mikrotik (или сменим их порт на нестандартный). Делается это в IP — Services
Теперь создадим белый список ip, на которые не будут действовать наши правила-ловушки. На всякий случай сюда можно добавить и ip шлюза провайдера (маловероятно что он будет стучаться к нам с наружи, но может случиться, что он является nat`ом для сотрудников Вашего провайдера и если они по какой-то причине начнут сканировать Ваш ip, то ip шлюза окажется в черном списке, что повлечёт за собой если не отсутствие интернета, то ряд мелких ошибок — наверняка).
Свой белый список для удобства я обозвал WhiteList. Создается он в IP — Firewall — Address List
Если нужно добавить много IP — проще сделать это через консоль:
/ip firewall address-list add list=WhiteList address=12.34.56.78
Дальше создадим правила — если какой-то ip обратился на дефолтный порт (22й в этом примере) — он попадает в черный список (BlackList) при условии, что он не из WhiteList (обратите внимание на восклицательный знак рядом с Src.Address List). IP — Firewall — Filter Rules — Add
На скриншоте я указал In.Interface, в который включен кабель провайдера. Вместо этого можно указать In.Interface List — WAN. Помимо этого — если не хотите банить ip навечно — в поле Timeout вкладки Action можно выставить время, спустя которое ip удалится из списка. Пример (бан на 12 часов и 3 дня):
Добавляем правила через консоль:
/ip firewall filter
add action=add-src-to-address-list address-list=BlackList address-list-timeout=none-dynamic chain=input comment="FTP bruteforce" \
dst-port=21 in-interface=ETH1-WAN-1L protocol=tcp src-address-list=!WhiteList
add action=add-src-to-address-list address-list=BlackList address-list-timeout=none-dynamic chain=input comment="SSH bruteforce" \
dst-port=22 in-interface=ETH1-WAN-1L protocol=tcp src-address-list=!WhiteList
add action=add-src-to-address-list address-list=BlackList address-list-timeout=none-dynamic chain=input comment="Telnet bruteforce" \
dst-port=23 in-interface=ETH1-WAN-1L protocol=tcp src-address-list=!WhiteList
add action=add-src-to-address-list address-list=BlackList address-list-timeout=none-dynamic chain=input comment="RDP bruteforce" \
dst-port=3389 in-interface=ETH1-WAN-1L protocol=tcp src-address-list=!WhiteList
add action=add-src-to-address-list address-list=BlackList address-list-timeout=none-dynamic chain=input comment= "SIP UDP bruteforce" \
dst-port=5060 in-interface=ETH1-WAN-1L protocol=udp src-address-list=!WhiteList
add action=add-src-to-address-list address-list=BlackList address-list-timeout=none-dynamic chain=input comment= "SIP TCP bruteforce"\
dst-port=5060 in-interface=ETH1-WAN-1L protocol=tcp src-address-list=!WhiteList
Все созданные правила должны быть выше разрешающих в списке IP — Firewall. Если все сделано правильно — спустя несколько минут в адресном листе BlackList появятся первые ip. У меня правила работают давно, поэтому и их количество уже внушительно:
Теперь осталось только заблокировать все обращения с IP из черного списка. Как видно на Traffic Flow диаграмме, ближе всего ко «входу» находится Raw Prerouting.
В нём мы и создадим правило — будем drop`ать все пакеты, поступившие с IP из черного списка на внешний интерфейс Микротика. IP — Firewall — Raw — Add.
Или через консоль (замените имя интерфейса):
/ip firewall raw add action=drop chain=prerouting comment="DROP BlackList IP`s" in-interface=ETH1-WAN-1L src-address-list=BlackList