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

 

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

 

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

 

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

 

Виды DDoS-атак

 

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

 

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

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

 

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