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

Созданное правило должно стоять первым в списке.

3 комментария

  1. Очень инетересная статья.
    Но хотелось бы немного побольше информации по поводу:
    Что-бы IP попадал не сразу в черный список, а к примеру через 3 неудачные попытки. На работе так сделано: если 3 раза неудачно попытался зайти на RDP, то попадаешь в блеклист. Можно такое организовать?

    1. Можно.
      /ip firewall filter
      add chain=input protocol=tcp dst-port=21,22,23,123,3389,5060,8291 connection-state=new src-address-list=PortBrute3 action=add-src-to-address-list address-list=Incoming address-list-timeout=1m disabled=no
      /ip firewall filter
      add chain=input protocol=tcp dst-port=21,22,23,123,3389,5060,8291 connection-state=new src-address-list=PortBrute2 action=add-src-to-address-list address-list=PortBrute3 address-list-timeout=1m disabled=no
      /ip firewall filter
      add chain=input protocol=tcp dst-port=21,22,23,123,3389,5060,8291 connection-state=new src-address-list=PortBrute1 action=add-src-to-address-list address-list=PortBrute2 address-list-timeout=2m disabled=no
      /ip firewall filter
      add chain=input protocol=tcp dst-port=21,22,23,123,3389,5060,8291 connection-state=new action=add-src-to-address-list address-list=PortBrute1 address-list-timeout=2m disabled=no

    2. Добавляй через терминал. Правила должны идти именно в таком порядке. в самом первом правиле address-list=Incoming address-list-timeout=1m указано забанить на 1 минуту. Тут выстави сколько тебе нужно. Ну и обязательно правило в фаерволе Лист Incoming — блокировать.

      /ip firewall filter
      add action=drop chain=input in-interface=ether1 src-address-list=Incoming

      ether1 — указывается имя интерфейса в который воткнут кабель провайдера (у всех он разный).

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *