Защита Mikrotik от брутфорса

Защита Mikrotik от брутфорса

...и автоматического сканирования

В этой заметке я опишу основные шаги по защите от нетаргетированного ботнета (который сканирует и брутфорсит все ip, которые найдет в сети). Как только вы выставляете любую железку с белым ip в мир — не пройдет и 5-10 минут, как его начнут сканировать, поэтому мы создадим несколько простых правил, которые будут банить ip ботнета и drop`ать их пакеты.

Основными целями всегда являются дефолтные порты и сервисы с наиболее уязвимыми приложениями за ними, например:

  • 21 (ftp)
  • 22 (ssh)
  • 23 (telnet)
  • 3389 (RDP)
  • 5060 (SIP)

На основе обращений к указанным портам мы и создадим правила, по которым все ip, которые обращаются к ним, будут считаться брутфорсерами и, соответственно, будут добавлены в черный список.

Для начала отключим лишние сервисы на самом Mikrotik (или сменим их порт на нестандартный). Делается это в IPServices

mt-protect-1

Теперь создадим белый список ip, на которые не будут действовать наши правила-ловушки. На всякий случай сюда можно добавить и ip шлюза провайдера (маловероятно что он будет стучаться к нам с наружи, но может случиться, что он является nat`ом для сотрудников Вашего провайдера и если они по какой-то причине начнут сканировать Ваш ip, то ip шлюза окажется в черном списке, что повлечёт за собой если не отсутствие интернета, то ряд мелких ошибок — наверняка).

Свой белый список для удобства я обозвал WhiteList. Создается он в IPFirewallAddress List

mt-protect-2

Если нужно добавить много IP — проще сделать это через консоль:

/ip firewall address-list add list=WhiteList address=12.34.56.78

Дальше создадим правила — если какой-то ip обратился на дефолтный порт (22й в этом примере) — он попадает в черный список (BlackList) при условии, что он не из WhiteList (обратите внимание на восклицательный знак рядом с Src.Address List). IPFirewallFilter RulesAdd

mt-protect-3

На скриншоте я указал In.Interface, в который включен кабель провайдера. Вместо этого можно указать In.Interface List — WAN. Помимо этого — если не хотите банить ip навечно — в поле Timeout вкладки Action можно выставить время, спустя которое ip удалится из списка. Пример (бан на 12 часов и 3 дня):

mt-protect-4

Добавляем правила через консоль:

/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

Все созданные правила должны быть выше разрешающих в списке IPFirewall. Если все сделано правильно — спустя несколько минут в адресном листе BlackList появятся первые ip. У меня правила работают давно, поэтому и их количество уже внушительно:

mt-protect-5

Теперь осталось только заблокировать все обращения с IP из черного списка. Как видно на Traffic Flow диаграмме, ближе всего ко «входу» находится Raw Prerouting.

mt-protect-6

В нём мы и создадим правило — будем drop`ать все пакеты, поступившие с IP из черного списка на внешний интерфейс Микротика. IPFirewallRawAdd.

mt-protect-7

Или через консоль (замените имя интерфейса):

/ip firewall raw add action=drop chain=prerouting comment="DROP BlackList IP`s" in-interface=ETH1-WAN-1L src-address-list=BlackList