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