Базовая защита от DoS-атак и SYN-флуда на устройствах Mikrotik RouterBOARD под управлением RouterOS

01 июнь 2018 98 311 17
В процессе повышения навыков работы с Mikrotik и RouterOS в частности, очень важно иметь в своем распоряжении дополнительное устройство RouterBOARD для возможности проведения разнообразных экспериментов. Почему это так важно?

Операционная система RouterOS кардинально отличается от программного обеспечения, использующегося в домашних и SOHO-маршрутизаторах. Функциональные возможности ROS уже из коробки превосходит возможности таких систем как OpenWRT, DD-WRT и NDMS 2 (используется в устройствах Zyxel Keenetic).

Функций RouterOS настолько много, что среднестатистический сетевой администратор попросту не владеет достаточными знаниями и опытом для работы со всеми функциями устройства.
Если Вы хотите научиться настраивать MikroTik, предлагаем пройти онлайн обучение. Более подробную информацию Вы можете найти в конце данной публикации.
Для полного понимания, просто взгляните на перечень сертификатов, выдаваемых авторизованным специалистам.

Всего у Mikrotik имеется 3 уровня. На первом уровне находится единственный сертификат – MTCNA (MikroTik Certified Network Associate), это базовый сертификат, подтверждающий базовые навыки настройки RouterOS, чего будет достаточно большинству специалистов и администраторов.

Второй уровень условно можно назвать «Engineer», по сути это инженерная подготовка. На втором уровне насчитывается уже 5 сертификатов (программ подготовки):
  • MTCWE (MikroTik Certified Wireless Engineer) – расширенный углубленный курс по настройке беспроводных сетей;
  • MTCRE (MikroTik Certified Routing Engineer) – расширенный углубленный курс по статической и динамической маршрутизации;
  • MTCTCE (MikroTik Certified Traffic Control Engineer) – расширенный углубленный курс по управлению траффиком и QoS;
  • MTCUME (MikroTik Certified User Management Engineer) – расширенный углубленный курс по управлению пользователями и авторизацией (VPN, HotSpot, IPsec и т.д.);
  • MTCIPv6E (MikroTik Certified IPv6 Engineer) – расширенный углубленный курс по работе с IPv6;
Для получения сертификата второго уровня обязательно требуется наличие сертификата MTCNA. На третьем уровне присутствует всего 1 сертификат – MTCINE (MikroTik Certified Inter-networking Engineer).

Для того, чтобы получить сертификат MTCINE, обязательно требуется иметь сертификаты MTCNA и MTCRE. Курсы MTCINE нацелены на сетевых инженеров, работающих на уровне провайдера. Среди тем, которые изучаются в рамках данных курсов – использование BGP и MPLS.

Как видите, у Mikrotik имеются отдельные курсы по разным направлениям. Базовым сертификатом является MTCNA, который гарантирует наличие базовых знаний по работе с RouterOS.

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

К чему все это и почему я сделал столь большое лирическое вступление?

Про последствия неправильной настройки Mikrotik я уже писал, причем на реальных примерах. Несмотря на мое уведомление, один из провайдеров по сей день не закрыл уязвимости в своей сети, и таких примеров найдутся тысячи.

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

В отличие от обычных маршрутизаторов, в Mikrotik достаточно легко наделать ошибок в настройках Firewall, если настраивать систему с ноля по чужим инструкциям или же бездумно добавлять/менять правила.

С чего все началось?

На домашнем тестовом маршрутизаторе RB951Ui-2HnD у меня уже есть гостевая сеть, Queues, HotSpot, WebProxy, Policy Based Routing, IPsec и прочие надстройки. Буквально на днях я решил протестировать дополнительные настройки Firewall с реализацией базовой защиты от DDoS.

Само собой разумеется, полноценная защита от DDoS требует:
  • жирный интернет-канал, от 10 Гбит и выше
  • наличие резервного канала
  • высокопроизводительное оборудование
Вообще, более правильно перед Mikrotik поставить дополнительный Firewall на базе того же FreeBSD или вовсе перенести Frontend в облачный сервис.

Но сейчас не об этом. В ряде случаев и конфигураций, уложить «микротик» на лопатки очень просто. Банально, многие владельцы данных устройств страдают от внешних запросов на ихний DNS извне, что приводит к ненужной нагрузке на CPU. Как закрыть доступ к DNS, описывалось ранее, кто пропустил – обратите внимание на пункт 3.

Сейчас, опять же, немного не об этом. На официальном Wiki Mikrotik имеется инструкция под названием «DoS attack protection», именно эту публикацию многие берут за основу, многие её адаптировали под себя, некоторые ресурсы и вовсе просто перепубликовали. В любом случае, в результатах поисковой выдачи это один из первых вариантов.

И тут срабатывает человеческий фактор, ведь реализация описана на официальном Wiki, что в ней может быть не так?

«DoS attack protection» с оговоркой…

Существуют такие термины как DoS и DDoS, сразу оговорюсь, первый термин не стоит путать с MS-DOS, это совершенно разные вещи.

DoS является сокращением от английского «Denial of Service», иными словами ­ отказ в обслуживании. DoS возникает тогда, когда ресурсы CPU загружены на 100%, вследствие чего маршрутизатор может стать недоступным (unreachable).

Соответственно термин DDoS является сокращением от Distributed Denial of Service, т.е. распределенных атак. Такие атаки осуществляются с разных IP и даже целых подсетей, способных генерировать огромные объемы траффика. Для примера, не так давно сервис GitHub был атакован ботнетом с суммарной пропускной способностью 1.35 терабит/сек, после чего сервис попросту «упал» на 10 минут. Владельцу ресурса удалось восстановить полную работоспособность уже через 8 минут, но для этого потребовались огромнейшие вычислительные ресурсы ЦОДов. Ваш домашний или корпоративный маршрутизатор, в случае наличия внешнего белого IP также может подвергнуться самым разнообразным атакам.

В RouterOS ресурсы процессора задействуют многие операции по пакетной обработке, в частности это работа Firewall (Filter, NAT, Mangle), логирование событий, очереди (Queues) – в случае большого количества поступающих пакетов, все это может привести к перегрузке маршрутизатора.

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

Тем не менее, существуют методы для минимизации воздействия небольших атак подобного типа. Конечно, если у вас подключение 100 Мбит, от атаки 1 Гбит это вас не защитит. А вот если атака меньше, но использует особенности и/или уязвимости конфигурации, согласитесь, иметь загрузку CPU в 30-60% куда лучше, нежели 100% и полный отказ.

Одним из наиболее эффективных методов атаки является SYN-флуд. Суть атаки заключается в отправке большого количества SYN-запросов на установку TCP-соединения, на которые маршрутизатор должен давать ответ SYN+ACK. Все это отнимает у маршрутизатора ресурсы, в то время как атакующий может игнорировать ответы, что в свою очередь привод к большому количеству полу-открытых соединений (half-open connection) без большой загрузки атакующей стороны. Такие соединения «висят» некоторое время «в воздухе», после чего маршрутизатор закрывает их по таймауту. Проблема состоит в том, что пакеты обрабатываются в порядке очередности и при наличии достаточного количества «мусора», маршрутизатор попросту перестанет обрабатывать запросы от обычных клиентов.

Для просмотра текущих соединений в Terminal можно прибегнуть к команде
/ip firewall connection print

А также
/tool torch

Если же вы захотите посмотреть статистику по отдельному интерфейсу, используйте следующий синтаксис:
/interface monitor-traffic [название_интерфейса]

Для просмотра ресурсов, используйте команду:
/system resource monitor

Собственно, весь этот функционал продублирован в Winbox, я лишь дублирую информацию из публикации на Wiki.
Как бороться с большим числом соединений?

Для этого нам предлагают воспользоваться командой:
/ip firewall filter add chain=input protocol=tcp connection-limit=LIMIT,32 \
action=add-src-to-address-list address-list=blacklist-ddos address-list-timeout=1d

Где LIMIT необходимо заменить на число от 100 и выше. Суть правила в том, что при превышении указанного числа соединений, удаленный IP-адрес будет внесен в черный список (blacklist-ddos) на 1 час. Название списка и таймаут можете поменять по своему усмотрению, главное в последующих командах использовать правильный address-list.

Далее для IP из черного списка необходимо произвести обработку пакетов. Однако, вместо стандартного отброса пакетов «action=drop», нам предлагают выполнять «action=tarpit».

Действие «tarpit» приводит к «захвату» и удержанию TCP-соединений, сам маршрутизатор при этом дает ответ SYN/ACK на входящий TCP SYN. На мощных маршрутизаторах это будет приводить к замедлению атакующего (в теории).
/ip firewall filter add chain=input protocol=tcp src-address-list= blacklist-ddos \
connection-limit=3,32 action=tarpit

Также можно использовать обычный action=drop, чтобы отбрасывать пакеты даже не отвечая на них. Пробуйте экспериментировать с разными настройками. Ни в коем случае не используйте reject, т.к. он предполагает наличие ответа, который будет отнимать ресурсы.

Далее предложен следующий механизм выявления и обработки SYN-флуда
/ip firewall filter add chain=forward protocol=tcp tcp-flags=syn connection-state=new \
action=jump jump-target=SYN-Protect comment="SYN Flood protect" disabled=yes
/ip firewall filter add chain=SYN-Protect protocol=tcp tcp-flags=syn limit=400,5 connection-state=new \
action=accept comment="" disabled=no
/ip firewall filter add chain=SYN-Protect protocol=tcp tcp-flags=syn connection-state=new \
action=drop comment="" disabled=no

Обратите внимание, все вышеперечисленные правила необходимо переносить в самый верх Firewall, иначе они попросту не будут работать.

У первого правила присутствует атрибут disabled=yes, иными словами правило отключено. Авторы кода предлагают установить желаемый limit и включить правило в цепочку forward для просмотра количества отброшенных пакетов.
Собственно на этом дальнейшие действия не описаны, и многие читатели просто берут и добавляют правила как есть. Но к этому моменту мы еще вернемся.

Последняя рекомендация состоит в использовании SYN cookies.
/ip settings set tcp-syncookies=yes

Что такое SYN cookies и как это работает? При использовании SYN cookie, в случае переполнения очереди, маршрутизатор будет избегать сброса новых соединений, вместо этого клиенту будет отправлять корректный SYN+ACK со специальными номерами последовательности.

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

Таким образом, потенциальный злоумышленник не может обойти межсетевые экраны с SYN cookie, путем простой отправки ACK-пакетов с произвольным номером последовательности.

Переходим к практике

Данную инструкцию я взял за основу и добавил на 2 маршрутизатора. На первом маршрутизаторе в Firewall были добавлены немного измененные правила.

В момент правки правил на втором (тестовом) устройстве меня немного отвлекли и я добавил правила «как есть», не внеся всех изменений.

Чтоб вы правильно понимали, проверку SYN flood необходимо выполнять в первую очередь на цепочке input, т.к. жертвой злоумышленника является именно внешний IP. В то время как цепочка forward отвечает за транзитный траффик, проходящий через маршрутизатор, например, от клиента за NAT в интернет.

Несколькими часами позже я играл в WOT и ощутил фризы, после чего меня и вовсе выкинуло из сервера, а сам тестовый RB951Ui-2HnD ушел в перезагрузку. Собственно о перезагрузке роутера я понял по звуку встроенного бипера, который при запуске у меня дополнительно проигрывает ноты из «Star Wars - The Imperial March».

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

Открываем логи RouterOS и наблюдаем следующую картину:

Это список всех запросов, идущих через webproxy, записи в логах отображаются по той причине, что у меня настроено расширенное логирование в файл.

Установлена актуальная RouterOS 6.42.3, новых users не прибавилось, в files ничего подозрительного.

Заходим в Gparhing и наблюдаем следующую картину:

На графиках просматривается практически 100% загрузка CPU и высокая загрузка RAM при не таком уж и большом траффике на WAN-порту. Впрочем, старенький AR9344 не самый производительный процессор.

В подменю Tools – Profile можно увидеть более детальное распределение ресурсов.

Но как такое возможно, что кто-то получил доступ к webproxy извне?

Все очень просто, на втором маршрутизаторе я не успел внести правки в правила Firewall. Всему виной action=accept для syn-пакетов. В случае с forward это не так страшно, как для input. Действие «Accept» приводит к тому, что Firewall одобряет пакет, и далее к ним уже не применяются остальные правила.

Вышеперечисленные фильтры осуществляют только фильтр по количеству пакетов, не более, поэтому все пакеты, прошедшие фильтр необходимо далее обрабатывать стандартными правилами.

Для этого воспользуемся action=return. Действие return осуществляется возврат пакета в предыдущий chain, для последующей обработки.

В конечном итоге получаем правила следующего вида:
/ip settings
set tcp-syncookies=yes
/ip firewall filter
add action=add-src-to-address-list address-list=ddos-blacklist \
    address-list-timeout=30m chain=input comment=\
    "DDoS - Limit incoming connections, add IP to Blacklist" \
    connection-limit=100,32 in-interface=ether1-gateway protocol=tcp
add action=tarpit chain=input comment=\
    "DDoS - capture and hold connections, try to slow the attacker " \
    connection-limit=3,32 protocol=tcp src-address-list=ddos-blacklist
add action=jump chain=forward comment="DDoS - SYN Flood protect" \
    connection-state=new jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=jump chain=input connection-state=new in-interface=ether1-gateway \
    jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=return chain=SYN-Protect connection-state=new limit=200,5:packet \
    protocol=tcp tcp-flags=syn
add action=drop chain=SYN-Protect connection-state=new protocol=tcp \
    tcp-flags=syn

В данном примере на входе установлено ограничение в 100 соединений на IP, в случае превышения лимитов, IP вносится в blacklist с последующим дропом всех последующих пакетов.

Базовая защита от SYN-флуда реализована путем переброса всех SYN-пакетов в дополнительный чейн SYN-Protect с ограничением в 200 пакетов/сек. Пакеты, не попадающие под ограничения, возвращаются в родительский chain, в случае превышения лимитов – пакеты отбрасываются.

Дополнительно задействована надстройка tcp-syncookies, позволяющая не отбрасывать клиентов, находящихся вне очереди.
Собственно на этом все.

В заключение

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

Описанная реализация защиты от DoS-атак и SYN-флуда базовая, она поможет защитить ваше устройство и сеть от перегрузок, вызванных примитивными атаками злоумышленников. В то же время повторюсь, для защиты от полноценных DDoS-атак этого будет недостаточно.

Видеокурс «Настройка оборудования MikroTik» (аналог MTCNA)

Учитесь работать с MikroTik? Рекомендую видеокурс «Настройка оборудования MikroTik». В курсе разобраны все темы из официальной учебной программы MTCNA и много дополнительного материала. Курс сочетает теоретическую часть и практику – настройку маршрутизатора по техническому заданию. Консультации по заданиям курса ведет его автор Дмитрий Скоромнов. Подойдет и для первого знакомства с оборудованием MikroTik, и для систематизации знаний опытным специалистам.

Комментарии:

Добавить
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
  1. Гость Виктор
    Гость Виктор Гости 19 мая 2020 20:28
    + 0 -
    Интересно у Вас получается, Вы добавляете правило, которое обрабатывает трафик пришедший на маршрутизатор с внешнего интерфейса с состоянием соединения "новое". У меня такой трафик запрещён вообще. Этой строчки поэтому и не было в вики микротика. Лишняя нагрузка на маршрутизатор, каждый раз этот трафик джампить и проверять.
  2. Андрей Альберт
    Андрей Альберт Гости 27 октября 2019 14:35
    + 0 -
    Добрый день, наглядная статья. Но в моем случае SYN атака не на само устройство а на почтовый сервер который за ним. Подскажите как можно подкорректировать настройку? как изменить цепочки? Спасибо.
    1. Denis
      Denis Гости 15 декабря 2019 16:00
      + 0 -
      Заменить input на forward в правиле добавления айпишников в группу.
  3. Артур
    Артур Гости 4 октября 2019 00:22
    + +2 -
    В конечном итоге получаем правила следующего вида:
    Не совсем понял, а зачем цепочка return возвращает обратно в jump, которая перемещает в return?
    Трафик будет бесконечно прыгать?
  4. Sergey
    Sergey Гости 9 января 2019 16:13
    + +5 -
    Интересный блог и хорошая статья. Спасибо за труды.
  5. Гость Андрей
    Гость Андрей Гости 23 августа 2018 14:09
    + -4 -
    Вообще не работает эта защита , DDos идет с разных ip адресов и нет многих сессий, мой микротик 9ти ядерный грузится на 100% за 2 секунды ддоса. Не дурите людей уберите эту статью!!!
    1. DmitryAVET
      DmitryAVET Создатель 23 августа 2018 14:36
      + +10 -
      Никто никого не дурит. Читайте внимательно! Реализована защита от DoS, а не DDoS, о чем по тексту есть предупреждение. Описанные методы ограничивают соединения на 1 хост.

      Для защиты от DDoS, микротик в чистом виде не лучший вариант, но вы же публикацию не читали. правда? Компании тратят тысячи долларов на защиту от DDoS, Вы же в поисках халявы и готового решения решили просто копирнуть код "как есть", даже не читая всей публикации. Ведь так? Успехов.
      1. Гость Виталий
        Гость Виталий Гости 26 февраля 2019 14:45
        + +6 -
        Хочу внести уточнение в Ваш ответ. В коммитах у вас стоит DDoS - capture and hold connections, try to slow the attacker. Видимо от того и ожидание защиты от ДДОС ц человека возникло
  6. Денис
    Денис Гости 11 июля 2018 13:33
    + 0 -
    Здравствуйте! Спасибо большое за статью! Есть вопрос, если выход в интернет используется через PPPoE, тогда в правилах вместо ether1 указывать его?
    1. DmitryAVET
      DmitryAVET Создатель 12 июля 2018 15:52
      + +1 -
      Здравствуйте. Зайдите в Interfaces - Interface List, нажмите кнопку Lists. В новом окне создайте новый список интерфейсов, например, с названием WAN. Далее вернитесь к предыдущему окну и добавьте в список WAN все внешние интерфейсы - ether1 и pppoe-client.

      Затем в правилах файрволла вместо ether1 указывайте interface-list WAN. таким образом правила будут у вас срабатывать и для первичного интерфейса, смотрящего в локальную сеть провайдера, и для pppoe-подключения.

      более подробно описывалось в отдельной публикации.
      1. Денис
        Денис Гости 13 июля 2018 10:25
        + 0 -
        Спасибо за разъяснение, исправил все правила! Везде примеры в интернете без данного уточнения, получается настроил firewall, а он оказывается не работает )
        1. DmitryAVET
          DmitryAVET Создатель 17 июля 2018 11:22
          + 0 -
          много где выкладывают по принципу скопировал-вставил... а нюансы попадаются самые разнообразные. Как этот ... казалось бы на ether1 правила прописаны, но если подключение по VPN, но надо либо дублировать, либо address-list использовать) по-умолчанию, если настраивать из quickset в актуальных прошивках для pppoe система все сама добавит. Но надо делать сброс полный, потому как остаются старые правила файрволла.
  7. Vitaliy Pavlov
    Vitaliy Pavlov Посетители 7 июня 2018 23:41
    + +2 -
    Чтобы еще более разгрузить CPU нужно ddress-list=ddos-blacklist начинать рубить в RAW разделе.
    1. DmitryAVET
      DmitryAVET Создатель 8 июня 2018 00:00
      + 0 -
      Все верно, в prerouting еще до conntrack

      У меня RB750Gr3 на линии 100 Мбит висит, поэтому я не напрягался особо по этому поводу.
      1. Igor
        Igor Гости 5 июля 2024 18:49
        + 0 -
        Но если вы согласны с высказыванием, что надо еще в RAW разделе резать ddos-blacklist,
        то почему этого правила нет в обсуждении в статье и в итоговых скриншотах?
  8. Дмитрий
    Дмитрий Гости 4 июня 2018 09:35
    + 0 -
    Здравствуйте. Маленькая очепяточка.

    ...удаленный IP-адрес будет внесен в черный список (blacklist-ddos) на 1 час.

    address-list-timeout=1d = (одни день).
    1. DmitryAVET
      DmitryAVET Создатель 4 июня 2018 09:39
      + -1 -
      Есть такое дело, делал export с готовой конфигурации

Mikrotik Newsletter 85 (ноябрь 2018): CRS305, LGH LTE и R11e-4G

После внезапного появления платформы RB4011, очередная новостная рассылка Mikrotik кажется не особо богатой на новинки оборудования или новые функции...

Функция Protected Routerboot в RouterOS, обновление загрузчика RouterBOOT

Почти 2 года назад в одном из обновлений загрузчика и RouterOS, для устройств Mikrotik была добавлена функция «Protected Routerboot». Спрятан этот...

Начиная с RouterOS 6.43, Winbox будет использовать безопасное соединение с

Тем, кто пользуются устройствами Mikrotik RouterBOARD на уровне более продвинутых пользователей, хорошо известна утилита под названием Winbox. По...

В разработке: подробности грядущего обновления RouterOS v6.42

Команда Mikrotik продолжает работу над подготовкой очередного обновления RouterOS до версии 6.42. Более подробную информацию обо всех изменениях вы...

Mikrotik: обновление загрузчика RouterBOOT в устройствах RouterBOARD, список

RouterBOOT – специальный загрузчик, который отвечает за запуск операционной системы RouterOS на устройствах RouterBOARD компании Mikrotik. На самом...

Обновление RouterOS на примере Mikrotik hAP lite (RB941-2n)

Абсолютное большинство устройств Mikrotik работает под управлением специальной операционной системы – RouterOS. ROS является одной из самых...

авторизация на сайте

Забыли пароль?