Сервис Cloudflare даже на бесплатном тарифе может обеспечить хорошую защиту от ддос-атак. Единственный минус - ip сервиса часто попадают в реестр запрещенных сайтов, поскольку Cloudflare не выполняет требования Роскомнадзора. Но сегодня большинство провайдеров блокируют по url, а не по IP, поэтому большой просадки по трафику быть не должно. Проверить доступность сайта у российских провайдеров можно здесь.
Первое, что нужно будет сделать, после подключения к Cloudflare - запретить ботам обращаться к сайту по IP.
В Nginx пропишите поверх других записей server.
Другие стандартные порты желательно тоже закрыть.
Если у вас Апач, то пишем в .htaccess
Первое время в настройках DNS в клоудфларе вы можете вписать левый IP, а не своего сервера, чтобы осмотреться. Потом зайдите в меню Analytics и прокрутите до раздела Geography.
Увидите географию ддоса на ваш сайт.
Чем ярче цвет, тем больше запросов идет с этой страны. Ддосеры не любят использовать российские или американские IP для дешевых атак - они хорошо абузятся. Скорее всего большинство ботов будут китайские, бразильские и т.д. Проверьте статистику своего сайта (счетчик лайвинтернет или другие) - если за последний месяц из этих стран не было целевого трафика, то их можно смело закрывать. За поисковых ботов не переживайте - Cloudflare умеет их определять.
Чтобы закрыть страну, заходим в меню Firewall, прокручиваем до Access Rules и добавляем нужные (не нужные) страны. В конце темы есть скрипт ПХП для добавления в Cloudflare.
Block - означает полную блокировку трафика из этой страны. Если же, к примеру, у вас много ддос-ботов из США, но вам не хочется штаты целиком закрывать (чтобы не отсечь VPN-трафик), то вы можете выбрать не полную блокировку, а Challenge или JavaScript Challenge. При выборе Challenge будет появляться заглушка на сайт с капчей, правда на английском языке. Но с глупыми ботами справится JavaScript Challenge - определение ботов яваскриптом, без заглушки.
update
Cloudflare отключил возможность включать block для стран на бесплатном тарифе. Используйте режим Challenge.
Если вас атакуют через сторонние ресурсы, то может помочь инструмент Firewall Rules. Инструкцию по настройке смотрите здесь.
Если вас атакует достаточно много ботов из целевых стран, используйте php скрипт для их фильтрации и автоматического добавления в Firewall Клоудфлара.
В крайнем случае, если не хочется заморачиваться с антиддос-скриптами и настройкой сервера, а ботов из целевых стран слишком много, вы можете подключить Rate Limiting - в самом начале меню Firewall. Сервис позволяет настроить ограничения по количеству подключений с одного IP.
Например, такая запись означает, что IP, совершивший за минуту 20 обращений к главной странице, отправляется в баню на час. Если атака сильна, смело выставляйте 12 часов или больше.
Сервис платный, но первые 10000 бесплатные. За каждые последующие 10000 взимается плата 0.05$. Так, за 1$ сервис проверит 210000 запросов от ботов (исключая тех, которые вы отфильтровали по странам). Статистику по платным запросам можно посмотреть в меню Analytics в подразделе Rate Limiting, вкладка Billable Requests (оплачиваемые запросы).
В самом низу можно посмотреть журнал срабатывания файервола.
Если возникли вопросы по настройке или данный способ не помог - пишите, обсудим.
Скрипт PHP для автоматического добавления стран в Firewall Cloudflare
Первое, что нужно будет сделать, после подключения к Cloudflare - запретить ботам обращаться к сайту по IP.
В Nginx пропишите поверх других записей server.
Код:
server {
listen 192.168.0.1:80 default_server; # только введите ваш IP
server_name _;
return 403;
}
Если у вас Апач, то пишем в .htaccess
Код:
RewriteCond %{HTTP_HOST} ^(192\.168\.0\.1)$ # ip вашего сайта
RewriteRule (.*) - [F,L]
Увидите географию ддоса на ваш сайт.
Чем ярче цвет, тем больше запросов идет с этой страны. Ддосеры не любят использовать российские или американские IP для дешевых атак - они хорошо абузятся. Скорее всего большинство ботов будут китайские, бразильские и т.д. Проверьте статистику своего сайта (счетчик лайвинтернет или другие) - если за последний месяц из этих стран не было целевого трафика, то их можно смело закрывать. За поисковых ботов не переживайте - Cloudflare умеет их определять.
Чтобы закрыть страну, заходим в меню Firewall, прокручиваем до Access Rules и добавляем нужные (не нужные) страны. В конце темы есть скрипт ПХП для добавления в Cloudflare.
Block - означает полную блокировку трафика из этой страны. Если же, к примеру, у вас много ддос-ботов из США, но вам не хочется штаты целиком закрывать (чтобы не отсечь VPN-трафик), то вы можете выбрать не полную блокировку, а Challenge или JavaScript Challenge. При выборе Challenge будет появляться заглушка на сайт с капчей, правда на английском языке. Но с глупыми ботами справится JavaScript Challenge - определение ботов яваскриптом, без заглушки.
update
Cloudflare отключил возможность включать block для стран на бесплатном тарифе. Используйте режим Challenge.
Если вас атакуют через сторонние ресурсы, то может помочь инструмент Firewall Rules. Инструкцию по настройке смотрите здесь.
Если вас атакует достаточно много ботов из целевых стран, используйте php скрипт для их фильтрации и автоматического добавления в Firewall Клоудфлара.
В крайнем случае, если не хочется заморачиваться с антиддос-скриптами и настройкой сервера, а ботов из целевых стран слишком много, вы можете подключить Rate Limiting - в самом начале меню Firewall. Сервис позволяет настроить ограничения по количеству подключений с одного IP.
Например, такая запись означает, что IP, совершивший за минуту 20 обращений к главной странице, отправляется в баню на час. Если атака сильна, смело выставляйте 12 часов или больше.
Сервис платный, но первые 10000 бесплатные. За каждые последующие 10000 взимается плата 0.05$. Так, за 1$ сервис проверит 210000 запросов от ботов (исключая тех, которые вы отфильтровали по странам). Статистику по платным запросам можно посмотреть в меню Analytics в подразделе Rate Limiting, вкладка Billable Requests (оплачиваемые запросы).
В самом низу можно посмотреть журнал срабатывания файервола.
Если возникли вопросы по настройке или данный способ не помог - пишите, обсудим.
Скрипт PHP для автоматического добавления стран в Firewall Cloudflare
PHP:
$countries=array(
'MU'=>'challenge',
'BD'=>'challenge',
'NP'=>'challenge',
'AR'=>'challenge',
'IQ'=>'challenge',
'CM'=>'challenge',
'CN'=>'challenge',
'MX'=>'challenge',
'ID'=>'challenge',
'AU'=>'challenge',
'ZA'=>'challenge',
'JP'=>'challenge',
'VN'=>'challenge',
'BR'=>'challenge',
'PA'=>'challenge',
'CO'=>'challenge',
'VE'=>'challenge',
'CU'=>'challenge',
'IR'=>'challenge',
'IN'=>'challenge',
'LK'=>'challenge',
'KH'=>'challenge',
'AM'=>'challenge',
'SY'=>'challenge',
'MM'=>'challenge',
'SA'=>'challenge',
'JO'=>'challenge',
'CL'=>'challenge',
'MA'=>'challenge',
'PK'=>'challenge',
'RO'=>'challenge',
'DO'=>'challenge',
'TH'=>'challenge',
'PH'=>'challenge',
'LY'=>'challenge',
'MY'=>'challenge',
'AL'=>'challenge',
'DZ'=>'challenge',
'TW'=>'challenge',
'TN'=>'challenge',
'MN'=>'challenge',
'BA'=>'challenge',
'RS'=>'challenge',
'LA'=>'challenge',
'HK'=>'challenge',
'SG'=>'challenge',
'SD'=>'challenge',
'QA'=>'challenge',
'UY'=>'challenge',
'ET'=>'challenge',
'HU'=>'challenge',
'CI'=>'challenge',
'KE'=>'challenge',
'ES'=>'challenge',
'TG'=>'challenge',
'MG'=>'challenge',
'AT'=>'challenge',
'BG'=>'challenge',
'GN'=>'challenge',
'MK'=>'challenge',
'AF'=>'challenge',
'CR'=>'challenge',
'BZ'=>'challenge',
'GH'=>'challenge',
'KW'=>'challenge',
'JM'=>'challenge',
'HN'=>'challenge',
'PT'=>'challenge',
'BO'=>'challenge',
'TT'=>'challenge',
'GF'=>'challenge',
'PE'=>'challenge',
'EC'=>'challenge',
'PS'=>'challenge',
'BE'=>'challenge',
'PY'=>'challenge',
'ME'=>'challenge',
'TZ'=>'challenge',
'HR'=>'challenge',
'NG'=>'challenge',
'SB'=>'challenge',
'LB'=>'challenge',
'BH'=>'challenge',
'RE'=>'challenge',
'PL'=>'challenge',
'GB'=>'challenge',
'IT'=>'challenge',
'GE'=>'challenge',
'MD'=>'challenge',
'T1'=>'challenge',
'EG'=>'challenge',
'FR'=>'js_challenge',
'KR'=>'challenge'
);
Последнее редактирование: