Всем привет!!!
Недавно я столкнулся DOS атаками, а затем DDoS на свой сервер и защититься от таких атак помог мне Mikrotik. В этой статье я расскажу как настроить защиту от DDoS на Mikrotik.
Хочу отметить сразу, что такого рода защита действительно поможет защитить сервер от DDoS атак, но избавиться от этих атак не получится и я постараюсь объяснить все далее. Лишним точно не будет.
Оглавление
Введение
Многие в интернете утверждают, что DDoS атака дело накладное и дорогое, но как выяснил я это совсем не так. Атаковать могут по любому поводу и даже без повода. Обычно атака заканчивается через 2-3 дня, но бывают случаи, что атаки не прекращаются никогда. Это может быть как профессиональная группа лиц, решившая протестировать на вас свой новый метод или один прыщавый недоразвитый школьник, которому просто не понравилось, что вы заблокировали его в комментариях, когда он писал очередную бредятину. Кратковременные и небольшие атаки можно спокойно победить, а вот от постоянных и целенаправленных атак Mikrotik не спасет, ну или спасет на первое время.
Для начала разберемся с видами атак и это не полный список, но один из самых распространенных.
DOS (Denial of Service) и DDoS (Distributed Denial of Service) атаки — это виды кибератак, направленных на недоступность ресурсов, таких как веб-сайты или серверы, для пользователей.
▎DOS атака:
- Определение: Это атака, при которой один злоумышленник пытается сделать ресурс недоступным, отправляя чрезмерное количество запросов к серверу или используя уязвимости в его программном обеспечении.
- Цель: Основная цель — перегрузить сервер, чтобы он не мог обрабатывать легитимные запросы от пользователей.
▎DDoS атака:
- Определение: Это более сложный тип атаки, при которой злоумышленник использует множество скомпрометированных устройств (например, компьютеров, IoT-устройств) для одновременной атаки на цель.
- Цель: Как и в случае с DOS, цель — сделать ресурс недоступным, но здесь масштаб атаки значительно больше, что затрудняет защиту.
▎Методы атаки:
- Перегрузка трафика: Направление огромного объема трафика на сервер.
- Уязвимости приложений: Использование уязвимостей в программном обеспечении для его краха.
- Синхронные запросы: Отправка большого количества соединений одновременно.
▎Защита:
- Использование систем фильтрации трафика.
- Распределение нагрузки через CDN (Content Delivery Network).
- Настройка брандмауэров и систем обнаружения вторжений.
Обе атаки могут причинить значительный ущерб бизнесу и пользователям, поэтому защита от них является важной частью кибербезопасности.
Начало
Все началось с того, что я обнаружил большую нагрузку на свой WEB сервер. Процессор показывал практически 100% загрузку, а диски и база данных усиленно что-то делали. Это вызвало у меня подозрение и я решил посмотреть. В Mikrotik есть такая утилита Torch, которая может показать открытые соединения и их статистику. Я был очень сильно удивлен, когда увидел 400-800 соединений от одного адреса. При нормальной работает один адрес открывает одно соединение. Логи на сервере показывали, что данный адрес усиленно перебирает весь сайт.
Первое, что я сделал, заблокировал данный адрес на фаерволе и атака тут же прекратилась, судя по логам и нагрузке на сервер. Но через день все повторилось, но уже с другим адресом. Заблокировав его, через сутки двое пришел другой адрес. Так продолжалось несколько месяцев.
Я решил автоматизировать процесс и настроить защиту от DDoS атак на Mikrotik. В документации Mikrotik даже есть информация как это настроить. Но у меня ничего не получалось. Мне помог разобраться с этой проблемой один хороший человек, но из-за конфиденциальности я не могу назвать даже его ник.
Настройка защиты
Первым правилом отправляем все новые пакеты tcp с флагом new на порты 80 и 443 интерфейсов WAN в цепочку detect_DDoS
/ip firewall filter
add action=jump chain=input comment="Detect DDoS" connection-state=new dst-port=80,443 in-interface-list=WAN jump-target=detect_DDoS protocol=\
tcp
Вторым правилом в этой цепочке устанавливаем лимиты. Рекомендованные значения 32\32\10. До конца я так и не смог выяснить, что это значит, но по опыту следующее: первая цифра 32 означает количество соединений, вторая дополнительных соединений в течении 10 секунд. Если IP адрес не превысит этот порог, то он возвращается из этой цепочки в обычные правила. Если же превышает, то идем дальше.
/ip firewall filter
add action=return chain=detect_DDoS comment="Detect DDoS" dst-limit=15,15,src-address/10s
Следующим правилом мы добавляем IP адрес, который превысил лимиты в адрес лист DDoS_black_list, но при этом нужно создать адрес лист BAN-no. В этот лист мы добавим собственные IP адреса в будущем, что бы не заблокировать случайно самого себя. Кстати, я блокирую их на неделю, хотя вроде как 1-2 часа достаточно.
/ip firewall filter
add action=add-src-to-address-list address-list=DDoS_black_list address-list-timeout=1w chain=detect_DDoS comment="Detect DDoS" log=yes \
src-address-list=!BAN-no
Правила выше применяются к трафику, который приходит на роутер, но роутер это не сервер и поэтому вы будите прокидывать порты на сервер. Соответственно прокинутый dst-nat трафик в правила input не попадает, а значит не работает счетчик “Detect DDoS”. Для решения этой проблемы нужно создать правило, которое будет перекидывать пакеты приходящие на WAN с флагом new в цепочку detect_DDoS, а далее следовать ее логике описанной выше.
/ip firewall filter
add action=jump chain=forward comment="Detect DDoS" connection-state=new in-interface-list=WAN jump-target=detect_DDoS
Теперь, то чего нет нигде и почему у меня не получалось. Правила нужно расположить примерно так как показано на картинке ниже. Т.е. правила дедекта почти сразу вверху, а правило forward тоже вверху, но там где расположена эта цепочка. Обратите внимание, что первые правила разрешающие уже установленные соединения остаются в самом верху списка. Иначе нагрузка будет слишком большой на ваш роутер.
Теперь настало время заблокировать IP адреса, которые попали в DDoS_black_list. Блокировать лучше всего в RAW так как это первое куда попадает трафик и там это меньше всего влияет на производительность роутера Mikrotik. Это правило можно смело располагать в самом верху, но я решил опустить его чуть ниже дефлтных настроек.
/ip firewall raw
add action=drop chain=prerouting comment="Detect DDoS" in-interface-list=WAN src-address-list=DDoS_black_list
Готово, настройка защиты от DDoS атак на MikroTik сделана.
Результат
Как только в следующий раз на ваш сервер пойдет DoS или DDoS атака, то IP адреса злоумышленников практически сразу попадут в адрес лист DDoS_black_list и не смогут навредить вашему серверу, т.к. будут заблокированы на фаерволе роутере.
Такими настройками мне удавалось отбиваться от DDoS атак примерно 1000-1500 адресов одновременно в течение нескольких недель. При этом загрузка канала интернет доходила до 30-40Мб\с. Сайт прекрасно работал и никто кроме меня не замечал атаки на него. Если бы этого не было, то web сервер просто был бы перегружен запросами и сайт не работал.
Вообще, мне показалось, что чем больше я отбивался от атак, тем большим количеством IP адресов они меня атаковали.
Недостаток
- Дело в том, что таким образом блокируется трафик на приеме порта роутера, а значит ваш канал интернета забивается этим трафик. Если в какой-то момент этого трафика будет больше чем емкость вашего канала интернет, то этот самый интернет перестанет у вас работать, как и сам сайт.
- При больших атаках адрес лист DDoS_black_list раздувается существенно и если закончится оперативная память на роутере, то он скорее всего зависнет.