Использование AbuseIPDB на Mikrotik

Думаю многим известен сервис AbuseIPDB, который собирает рапорты о злоумышленной активности в Интернете с определённых IP адресов, и затем предоставляет чёрные списки таких адресов всем желающим. Эти списки можно подключить, в том числе, и к Mikrotik для блокировки в фаерволе.

К сожалению, скрипты в RouterOS не могут обрабатывать большие файлы, поэтому я буду использовать хостинг с Python для обработки чёрных списков.

Для начала необходимо зарегистрироваться на сайте https://www.abuseipdb.com, а затем в разделе API своего профиля получить ключ доступа. На бесплатном тарифе действует ограничение на 5 запросов чёрного списка за сутки. Поэтому для надёжности будем запрашивать список каждые 6 часов.

На хостинге создаём файл /usr/update_abusedb.sh для обновления списка IP:

#!/bin/sh

curl -G https://api.abuseipdb.com/api/v2/blacklist \
  -d confidenceMinimum=80 \
  -H "Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Accept: text/plain" > /var/tmp/abdb.txt
/usr/convert_abusedb.py
cp /var/tmp/abdb.rsc /home/username/web/example.com/public_html/abdb.rsc

Ключ API вписываем свой, а также указываем свой путь к файлу в последней строке. Этот файл должен копироваться в каталог Web-сервера.

Не забываем дать ему права на выполнение:

chmod +x /usr/update_abusedb.sh

Теперь создаём Python-скрипт для конвертирования списка IP адресов в скрипт микротика: /usr/convert_abusedb.py

#!/usr/bin/python3

f = open("/var/tmp/abdb.txt", "rt")
ff = open("/var/tmp/abdb.rsc", "wt")
ff.write("/ip firewall address-list remove [/ip firewall address-list find list=ABUSEDB]\n")
ff.write("/ip firewall address-list\n")
for line in f:
    if not ":" in line:
        line = "add address=" + line[0:-1] + " list=ABUSEDB\n"
        ff.write(line)
ff.close()
f.close()

Тоже даём права на выполнение:

chmod +x /usr/convert_abusedb.py

Теперь добавляем следующее задание в cron с помощью команды sudo crontab -e

0 0,6,12,18 * * * sudo /usr/update_abusedb.sh

На микротике добавляем в шедулер:

/system scheduler
add interval=6h name=abusedb on-event="/tool fetch url=\"http://example.com/abdb.rsc\" mode=http\r\
    \n/import abdb.rsc" policy=ftp,read,write,policy,test,sniff \
    start-date=dec/30/2021 start-time=17:05:00

И прафило в фаервол:

/ip firewall raw
add action=drop chain=prerouting log=yes log-prefix=BL_ABUSE \
    src-address-list=ABUSEDB

Теперь, каждые 6 часов с сервиса AbuseIPDB будет скачиваться свежий список нежелательных IP и конвертироваться в скрипт микротика. А микротик будет забирать этот скрипт с Web-сервера и выполнять.