Евгений Горяев
Разработка, поддержка и развитие сайтов

Защита от DDos с помощью Cloudflare

Обложка для статьи Защита от DDos с помощью Cloudflare

Надо признать, что раньше достаточно скептически относился к Клаудфелур и другим компаниям, предоставляющим похожий сервис (проксирование веб-трафика через сеть своих серверов, веб фаервол, защита от дидос,, кеширование и прочие плюшки). Так я относился к ним пока не довелось попадать под качественную DDoS атаку.

Предыстория

На прошедшей неделе пришлось экстренно спасать одного из своих клиентов, который хостился на слабом, арендуемом независимо от меня, сервере. Спасать надо было от DDoS атаки на его сайт. Атака представляла собой запросы на различные страницы сайта со скоростью 6-7 тысяч запросов в секунду - что, конечно, положит почти любой неподготовленный сайт и его сервер, даже если отдавать статику.

Надо сказать, что и клиентский сервер - лег сразу. Причем, отключение сайта, который работал в докере не помогло. Traefic, в виде балансировщика в полном одиночестве, отбивающтй на все запросы код 404: на сервере с процессором i3 и 4 гигами оперативки он пожирал 100% ресурсов уже при 1т запросах в секунду.

В случае такой атаки без cloudflare никуда..

Что делать если атака уже идет?

Активирум Клаудфлер: меняем днс-сервера домена

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

Настройка DNS в Cloudflare

После того, как домен делигируется на новые ДНС-сервера, необходимо отметить, трафик каких доменов мы направи напрямую, а какие будет проксировать через Cloudflare.

Переносим сайт на более мощный сервер

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

Закрываем доступ для всех, кроме сети клаудфлер

Если на сервере в виде балансировщика стоит nginx, как было в моем случае, то запретить все соединения, кроме приходящих через веб-прокси, можно так:

Создаем конфиг со списком сетей клаудфлера (наприме в /etc/nginx/cloudflare-only.conf):

# https://www.cloudflare.com/ips
# IPv4
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
# IPv6
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2405:b500::/32;
allow 2405:8100::/32;
allow 2a06:98c0::/29;
allow 2c0f:f248::/32;
# Deny all other
deny all;

Затем подключаем его в нужный контекст конфига nginx (либо в секцию http - чтобы применить правила для всего сервера в целом, либо в секцию server - тогда правила затронут только эту часть конфига).

server {
        listen 443 ssl http2;
        include /etc/nginx/cloudflare-only.conf;
...

Активируем Веб-фаервол в панели управления Cloudflare

Для достаточно успешной борьбы с атакой, чаще всего достаточно ввести 2 правила. Первое - заблокировать весь трафик с территории стран, на которых компания не ведет бизнес (обычно это все, кроме одной страны).

Настройка DNS в Cloudflare

Второе - для посетителей целевой страны активируем Managed Challenge.

Настройка DNS в Cloudflare

Кроме того, выбираем режим “under attack” в настройках сайта. Такие простые, а главное практически бесплатные действия позволили мне отбить атаку, которая терзала сайт клиента 6 ней. Надеюсь, это поможет и вам.