Найти тему

Включаем защиту от DDoS на MikroTik

Добрый день, коллеги! В какое интересное время мы живем... Была бы возможность выбирать, то многие бы выбрали другое, я думаю, но уж как получилось. Думаю, не для кого не секрет, что очень-очень многие сервисы в России подвергаются беспрецедентной спам-атаке. Такого еще не было. Немного прилетает и нам всем. Давайте рассмотрим встроенные механизмы защиты от ДДоСа, которые нам предоставляет микротик, лишним не будет, мне кажется.

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

Немного теории о том, а что же такое вообще этот DoS/DDoS. Аббревиатура DoS "Denial of Service" (отказ в обслуживании) - атака на вычислительную систему с целью довести её до отказа, т.е. создание таких условий, при которых добросовестные пользователи системы не смогут получить доступ к предоставляемым системным ресурсам (серверам), либо этот доступ будет затруднён. В свою очередь DDoS расшифровывается как "Distributed Denial of Service" (распределённый отказ в обслуживании). Распределённый он потому, что атака ведётся с большого числа зараженных компьютеров и других сетевых устройств, имеющих доступ в Сеть. Т.е. обе эти атаки направлены не на прямое хищение денежных средств, информации, получение доступа к ресурсу, а направлена на косвенные убытки цели, включая репутационные, которые она понесет из-за простоя сервиса.

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

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

-2

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

-3

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

-4

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

  1. /ip firewall address-list
  2. add list=ddos-attackers
  3. add list=ddos-target
  4. /ip settings set tcp-syncookies=yes
  5. /ip firewall filter
  6. add chain=forward connection-state=new action=jump jump-target=detect-ddos
  7. add action=return chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s
  8. add action=return chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s protocol=tcp tcp-flags=syn,ack
  9. add action=add-dst-to-address-list address-list=ddos-target address-list-timeout=10m chain=detect-ddos
  10. add action=add-src-to-address-list address-list=ddos-attackers address-list-timeout=10m chain=detect-ddos
  11. /ip firewall raw
  12. add action=drop chain=prerouting dst-address-list=ddos-target src-address-list=ddos-attackers

1-3 создаем два списка адресов, в которые будут попадать спамеры и жертвы (ведь спам может быть направлен и не на вас, а на сторонний ресурс).

4 включаем кэш для отслеживания SYN-ACK пакетов.

5-10 правила определяющие кто и как часто пытается нас или через нас спамить кого-либо малыми пакетами. Если это не спам, то пакетик считается легитимным и продолжает обрабатываться в обычном режиме.

11-12 отдельная цепочка прероутинга, в которой спам начинает отбрасываться.

-5

Особенно разжевывать или тюнить эту схему не вижу смысла - у всех будут разные задачи и разный результат, который должен получиться. В моем случае мне этого вполне достаточно. Не забудьте в IP -> Firewall поднять эти правила в самый верх. У меня еще выше этих правил стоят правила BLOCK и WhiteList - где, соответственно, черный список - это те адреса, которые мне совсем не нравятся, а белый - это список моих внешних адресов, которые нет смысла пропускать через все остальные правила фаервола. Далее должны расположиться вот эти 4 правила по отсеиванию флуда, а далее уже все остальные с пробросом к внутренним ресурсам.

-6

На этом пока все, надеюсь Вам было интересно! Не забывайте лайкнуть и подписаться - это очень поможет автору статьи, (Дзен дает по 1р. за каждого нового подписчика), если Вам не жалко, то подарите мне этот рублик. Вам же всего-всего наилучшего, здоровья и интересных задач!