Защита от DDoS атаки сайта или белого IP адреса
DoS и DDoS атаки уже давно не редкость, часто, настойчивость “доморощенных хакеров” достигает успеха – маршрутизатор или сайт становится недоступен, дабы избежать такой ситуации, необходимо правильно настроить файервол, отсекая попытки злоумышленников на старте.
Как известно, наиболее эффективный способ DDoS атаки это запросы SYN-флуд, на установку соединения, которые RouterOS старается обработать, выдавая ответ SYN+ACK, однако атакующая сторона не ждет ответа, посылая множественные запросы. Такие запросы (half open) подвисают и закрываются по таймауту, но достигнув критического количества, прогружают процессор до 100% и блокируют работу роутера.
Что бы избежать этого, можно ограничить допустимое количество таких запросов с одного IP адреса и поместить этот IP адрес в список блокируемых.
/ip firewall filter add chain=input protocol=tcp connection-limit=LIMIT,40 action=add-src-to-address-list address-list=blacklist-ddos address-list-timeout=3d
Как следует из правила, более 40 подключений с IP адреса и он помещается в список “blacklist-ddos”. Затем, нужно добавить еще правило, которое будет блокировать IP адреса из списка “blacklist-ddos”
/ip firewall filter add chain=input protocol=tcp src-address-list= blacklist-ddos connection-limit=3,32 action=tarpit
Такой нехитрый способ оградит от экспериментирующей школоты, в случае квалифицированной DDoS атаки, на борту Микротика должен быть актуальный список спам адресов, которые будем блокировать до установки соединения. Squid, fail2ban так же могут отсечь нежелательную активность с подозрительных IP адресов. Обычно, актуальный список я скачивал с QUIDBLACKLIST.ORG, но в последнее время, он не доступен, жаль, полезный был сурс…
Короче, пришлось искать источники для генерации списка подозрительных адресов, написать небольшой парсер, объединяющий разнородные списки. В результате Вы можете скачать актуальный список IP адресов спам блока – на сегодняшний день, в списке более 60000 адресов, обновляется blacklist раз в сутки.
Как скачать и подключить black-list на mikrotik
Скрипт с помощью которого можно настроить регулярное обновление и включить блокировку, состоит из двух частей, первая скачивает актуальный список ip адресов спам блока, вторая часть обновляет, т.е. удаляет старые адреса и импортирует новые. В связи с тем, что в списке более 60000 записей, процесс ресурсоемкий и лучше всего, это делать ночью.

/tool fetch url="https://100uslug.com/scripts/ip-blacklist.rsc" mode=http; :log info "Downloaded ip-blacklist.rsc"; :delay 15; :log warning "Disabling system Logging"; /ip firewall address-list remove [find where comment="blacklist_100uslug_com"]; /import file-name=ip-blacklist.rsc; :log info "Removed old blacklist_100uslug_com records and imported new list"; /system logging enable 0
Этот скрипт ставите в шедулер, например на 5 утра. Но для того что бы блокировать по списку ещё нужно добавить правило:
/ip firewall raw add action=drop chain=prerouting comment="blacklist_100uslug_com" src-address-list="blacklist"
Если вам нужно защитить сайт или “белый ip адрес” можно использовать этот список в fail2ban или squid. Важно, что бы правило отрабатывалось в “prerouting”, т.е. на этапе запроса.
Добрый день. Поломался скрипт. После ~10100 адреса скрипт выдаёт script error: failure: already have such entry и прекращает обновлять листы. Интернет пишет, что в листе есть дубль, что и крашит.
Заранее благодарны
Спасибо за подсказку, файл формируется из разных источников, потому и дубль попался.
Поправил, больше такого быть не должно.
Перезапустите скрипт.
Добрый день. Отличный список. Огромное спасибо. А нельзя ли сделать версию с таймаутами на несколько дней, чтобы список хранился в ОЗУ. А то на микротиках очень мало места на диске.
А так не проще
:local sblPath “flashdisk/ip-blacklist.rsc”
/tool fetch url=”https://100uslug.com/scripts/ip-blacklist.rsc” mode=http dst-path=$sblPath;
:delay 30;
/ip firewall address-list remove [find where comment=”blacklist_100uslug_com”];
/import $sblPath;
И список сделать динамическим допустим так, что бы не удалять каждый раз списки а заменять их тогда и эта строка не нужна будет
/ip firewall address-list remove [find where comment=”blacklist_100uslug_com”];
/ip firewall address-list
add list=blacklist address=1.0.132.165 timeout=”1d 00:00:00″
add list=blacklist address=1.0.133.100 timeout=”1d 00:00:00″
add list=blacklist address=1.0.133.89 timeout=”1d 00:00:00″
не, не проще. Задвоение ip адреса останавливает скрипт, попробуйте на своем микротике.
ну я это делаю в самом rsc-шнике
:log info “blacklist ip address list import started”
/system logging disable 0
/ip firewall address-list remove [find list=”blacklist”]
/ip firewall address-list
****
/system logging enable 0
:log info “BlackList ip address list import complete.”