Mikrotik firewall: защита от DDOS атак и SYN-flood

Целью DDoS-атаки является вывод из строя маршрутизатора. Для выстраивания защиты от DDoS-атак необходимо понимать как они устроены. На данный момент наиболее известные типы DDoS-атак основаны на ICMP-flood, UDP-flood, HTTP-flood и SYN-flood и. Названия этих атак говорят о способе воздействия на сетевое устройство и какой протокол при этом используется.

Целью DDoS-атаки является вывод из строя маршрутизатора. Для выстраивания защиты от DDoS-атак необходимо понимать как они устроены. На данный момент наиболее известные типы DDoS-атак основаны на ICMP-flood, UDP-flood, HTTP-flood и SYN-flood и. Названия этих атак говорят о способе воздействия на сетевое устройство и какой протокол при этом используется.

Универсального рецепта защиты никто не даст, так как многое зависит от того какая инфраструктура находится за firewall маршрутизатора и с чем она взаимодействует в интернете. Но даже используя базовые принципы защиты маршрутизатора и корректируя их под конкретные условия можно отсечь большое количество внешних угроз.

Базовый принцип защиты роутера заключается в том, что мы должны блокировать всё кроме разрешенного - нормально закрытый firewall. Поэтому для цепочек input, после разрешенных правил, последним должно идти правило отбрасывающее любые пакеты. Подробно базовая настройка безопасности роутера mikrotik рассматривалась в этой статье.

Виды DDoS-атак

Рассмотрим более подробно виды DDoS-атак, чтобы понять каким образом настраивать firewall mikrotik.

ICMP-flood

ICMP-flood - отправка большего числа поддельных icmp-запросов (многим известно как ping). ICMP-пакеты не требуют подтверждения, в отличии от TCP и поэтому трудно отделить мусорный трафик от легитимного.

В случае использования правила "нормально закрытого firewall" никаких дополнительных действий предпринимать не надо - весь icmp-трафик будет отклонен, если он отдельно не разрешен. Чтобы позволить "пинговать" роутер с определенных адресов нужно создать разрешающее правило.

UDP-flood

UDP-flood схож с icmp-flood в том плане, что его пакеты так же не требуют подтверждения и отсутствует контроль над процессом обмена данными.

Бороться с udp-flood можно так же как и с icmp-flood путем полной блокировки трафика, если это допустимо в ваших условиях. Стоит отдельно отметить, что протокол UDP часто используется в VoIP телефонии. Если вы используете подключение к АТС из интернета, то это необходимо учесть и разрешить подключения на необходимые порты, обычно это порт 5060.

SYN-flood

При атаке типа SYN-flood используется TCP-протокол и его принцип установления сеанса связи. Атакующий посылает поддельные syn запросы на установления соединения. Наш маршрутизатор одобрительно отвечает, но атакующий хост не устанавливает соединение и продолжает слать syn-запросы. Таким образом таблицу памяти соединений начинают заполнять полуоткрытые соединения, что начинает вызывать отказ в обслуживании соединений.

Мы не можем просто блокировать TCP-соединения как это было с icmp и udp т.к это основной сетевой протокол. Но мы можем выявлять и блокировать случаи, когда соединения слишком много.

Обнаружение DDoS и защита от атак.

Для настройки firewall Mikrotik на обнаружение и защиты от DDOS-атак взята за основу статья на официальном Wiki Mikrotik.

Для того, чтобы выявить DDoS атаку нам необходимо захватывать все новые соединения и перенаправлять их в отдельную цепочку chain=detect-ddos.

/ip firewall filter
add chain=forward connection-state=new action=jump jump-target=detect-ddos

Далее создаем новую цепочку chain=ddos, в которой для каждой пары хостов "SrcIP:DstIP" разрешаем определенное количество соединений. Для избежания блокирования важных хостов, например DNS-сервер с адресом 192.168.0.1, можно добавить правило, которое будет возвращать соединения с сервером в стандартную цепочку.

/ip firewall filter
add chain=detect-ddos dst-limit=32,42,src-and-dst-addresses/1s action=return
add chain=detect-ddos src-address=192.168.0.1 action=return

Значения, заданные в примере, не являются образцовыми и должны устанавливаться исходя из условий вашей инфраструктуры.

Здесь стоит обратить внимание на параметр dst-limit. Первое значение rate, второе burst. Для burst задано значение 42 и интервал в 1 секунду - это значит, что в течении первой секунды количество соединений может быть увеличено до 42. Значение burst не должно быть меньше rate, потому-что в этом случае правило будет пропускать в первую секунду меньшее количество соединений и по истечении секунды сработает Rate.

Если говорить простым языком, то Burst это одноразовое разрешение на превышение скорости. А превышение скорости не может быть меньше той скорости, которую вы установили как норму - Rate.

Сейчас нам надо обработать те соединения, которые превысили заданные лимиты - их мы добавим в address-list 'ddoser' (атакующий) и 'ddosed' (атакуемый). Тайм-аут жизни списка 10 минут или определите сами для себя.

/ip firewall filter
add chain=detect-ddos action=add-dst-to-address-list address-list=ddosed address-list-timeout=10m
add chain=detect-ddos action=add-src-to-address-list address-list=ddoser address-list-timeout=10m

Теперь мы можем блокировать хосты ведущие DDoS атаку на основе созданных списков. Сбрасывать пакеты можно в стандартной цепочке firewall таким образом:

/ip firewall filter
add chain=forward connection-state=new src-address-list=ddoser dst-address-list=ddosed action=drop

Либо создать правило в Raw, чтобы отбрасывать пакеты до их маршрутизации и снизить нагрузку на процессор.

/ip firewall raw
add action=drop chain=prerouting dst-address-list=ddosed src-address-list=ddoser

Защита от SYN-flood.

Для защиты конкретно от SYN-flood атак правила настраиваются примерно таким же образом, но нужно будет указать protocol=tcp и tcpflag=syn. То есть правило для переброса в цепочку ddos для дальнейшей обработки будет выглядеть примерно так:

/ip firewall filter
add chain=forward protocol=tcp tcp-flags=syn connection-state=new action=jump jump-target=detect-ddos

P.S. По-моему тема защиты Mikrotik от DDoS недостаточно подробно рассмотрена в рунете на данный момент. Поэтому жду вопросов, предложений и комментариев от вас.

11 thoughts on “Mikrotik firewall: защита от DDOS атак и SYN-flood

  1. Андрей

    Добрый день!

    Думаю, в некоторых случаях требуется более глубокий анализ траффика.

    В пример приведу задачу, которую мне на данный момент решить не удалось.

    Имеется RB4011. Защита от DDoS настроена по тому же принципу, что описан у Вас - сбор адресов в листы и дроп в raw (дроп в filter не годится, потому как даже при не самой серьёзной атаке процессор уходит в 100%). В большинстве случаев работает отлично. Даже мой домашний hAP ac2 таким образом переваривает большинство атак до 900 Мбит/с, оставляя ещё сотку для выхода в интернет (у меня дома гигабит). Процессор при этом нагружен всего в 25-35%. Но...

    Столкнулся с атакой, которая для КАЖДОГО пакета подменяет src-address. В итоге простая атака всего в 50000 пакетов в секунду забивает адрес-лист тремя миллионами адресов за минуту. На RB4011 гигабайт оперативки заканчивается, kernel crash, ребут. Конечно, вопрос с оперативкой решается ограничением времени жизни листа десятью секундами, но в целом задачу это не решает, т.к. в raw попадают только пакеты начиная со второго от адрес-листа. А в случае с подменой исходящего адреса для каждого пакета все пакеты являются первыми. Как следствие - вся атака попадает в filter, процессор уходит в 100%, роутер лежит, цель атаки достигнута при ширине атаки всего в 200 Мбит/с.

    Нужны более глубокие методы анализа трафика. Продолжаю изучать вопрос. Буду рад, если свяжетесь со мной для дальнейшего общения на эту тему.

    1. admin Автор записи

      Андрей, спасибо за обратную связь. В ближайшее время в статью внесу исправления более широко охватывающие типы DDoS-атак.

    1. admin Автор записи

      Благодарю за указание на допущенную ошибку в имени цепочки - будет исправлено.

  2. Алексей

    Добрый день. Читаю, не сходится.
    Вы пишете правило:
    add chain=detect-ddos dst-limit=32,42,src-and-dst-addresses/1s action=return

    Описываете функцию как:
    Здесь стоит обратить внимание на параметр dst-limit. Первое значение rate, второе burst. Для burst задано значение 42 и интервал в 1 секунду - это значит, что в течении первой секунды количество соединений может быть увеличено до 42. Значение burst не должно быть меньше rate, потому-что в этом случае правило правило будет пропускать в первую секунду меньшее количество соединений и по истечении секунды сработает Rate.

    Вопрос: Ошибка где - вместо 32 надо ставить 1 или Вы ведете речь про 32 секунды, тгда при чем здесь 1 секунда?

    Как функцию-то правильно писать?

    1. admin Автор записи

      Здравствуйте.
      dst-limit=32,42,src-and-dst-addresses/1s
      В конце dst-limit указан интервал /1s.
      32 - rate, 42 - burst.
      32 и 42 это количество соединений разрешенных в этот интервал.

  3. Владимир

    Добрый вечер. Прошу ногами не пинать, Микротик только начинаю осваивать. Прописал все команды как в статье, но фильтр не срабатывает. Такое впечатление что он определяет пакеты которые атакуют, и сервер который атакует, но пакеты не отбрасывает. Что проделываю не так? Если нужны какие то данные могу предоставить.

    1. admin Автор записи

      Привет. Давай для начала правила твои посмотрим.
      В консоли набери /ip/firewall/filter export file=filter.rsc
      Файл скачай и отправь на почту info@soft-setup.ru

    1. admin Автор записи

      Настройка межсетевого экрана для ipv6 аналогична. Отличие только в использовании адресов ipv6, если они фигурируют в правилах.

  4. Lexa273

    Да..... у меня после этого напрочь перестала приходить почта на почтовый сервак 🙂
    И отказ IP телефонии

Добавить комментарий

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