В этой заметке я опишу основные шаги по защите от нетаргетированного ботнета (который сканирует и брутфорсит все 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
Созданное правило должно стоять первым в списке.
Очень инетересная статья.
Но хотелось бы немного побольше информации по поводу:
Что-бы IP попадал не сразу в черный список, а к примеру через 3 неудачные попытки. На работе так сделано: если 3 раза неудачно попытался зайти на RDP, то попадаешь в блеклист. Можно такое организовать?
Можно.
/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
Добавляй через терминал. Правила должны идти именно в таком порядке. в самом первом правиле 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 — указывается имя интерфейса в который воткнут кабель провайдера (у всех он разный).