• Форум посвящен самостоятельной (бесплатной) защите от ддос атак.
    Есть мануалы по настройке сервера от Ddos для сисадминов и готовые инструменты от ддос-атак для вебмастеров.

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

Настройка Cloudflare от ддос атак

admin

admin

Администратор
Администрация
#1
Сервис Cloudflare даже на бесплатном тарифе может обеспечить хорошую защиту от ддос-атак. Единственный минус - ip сервиса часто попадают в реестр запрещенных сайтов, поскольку Cloudflare не выполняет требования Роскомнадзора. Но сегодня большинство провайдеров блокируют по url, а не по IP, поэтому большой просадки по трафику быть не должно. Проверить доступность сайта у российских провайдеров можно здесь.

Первое, что нужно будет сделать, после подключения к 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]
Первое время в настройках DNS в клоудфларе вы можете вписать левый IP, а не своего сервера, чтобы осмотреться. Потом зайдите в меню Analytics и прокрутите до раздела Geography.
Увидите географию ддоса на ваш сайт.

Карта ддос-атак Cloudflare


Чем ярче цвет, тем больше запросов идет с этой страны. Ддосеры не любят использовать российские или американские IP для дешевых атак - они хорошо абузятся. Скорее всего большинство ботов будут китайские, бразильские и т.д. Проверьте статистику своего сайта (счетчик лайвинтернет или другие) - если за последний месяц из этих стран не было целевого трафика, то их можно смело закрывать. За поисковых ботов не переживайте - Cloudflare умеет их определять.

Чтобы закрыть страну, заходим в меню Firewall, прокручиваем до Access Rules и добавляем нужные (не нужные) страны. В конце темы есть скрипт ПХП для добавления в Cloudflare.
Firewall Cloudflare


Block - означает полную блокировку трафика из этой страны. Если же, к примеру, у вас много ддос-ботов из США, но вам не хочется штаты целиком закрывать (чтобы не отсечь VPN-трафик), то вы можете выбрать не полную блокировку, а Challenge или JavaScript Challenge. При выборе Challenge будет появляться заглушка на сайт с капчей, правда на английском языке. Но с глупыми ботами справится JavaScript Challenge - определение ботов яваскриптом, без заглушки.

update
Cloudflare отключил возможность включать block для стран на бесплатном тарифе. Используйте режим Challenge.


Если вас атакуют через сторонние ресурсы, то может помочь инструмент Firewall Rules. Инструкцию по настройке смотрите здесь.

Если вас атакует достаточно много ботов из целевых стран, используйте php скрипт для их фильтрации и автоматического добавления в Firewall Клоудфлара.



В крайнем случае, если не хочется заморачиваться с антиддос-скриптами и настройкой сервера, а ботов из целевых стран слишком много, вы можете подключить Rate Limiting - в самом начале меню Firewall. Сервис позволяет настроить ограничения по количеству подключений с одного IP.

Например, такая запись означает, что IP, совершивший за минуту 20 обращений к главной странице, отправляется в баню на час. Если атака сильна, смело выставляйте 12 часов или больше.

Настраиваем Rate Limiting в Cloudflare


Сервис платный, но первые 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'
);
 
Последнее редактирование:
admin

admin

Администратор
Администрация
#2
Страны, которые я рекомендовал бы закрыть сразу в файрволе, т.к. часто используются в ддос-атаках и почти не используются для VPN: China, Indonesia, Brazil, Pakistan, Morocco, Chile, Jordan, Saudi Arabia, Cambodia, Mexico, Venezuela, Colombia, Iraq, Iran, Panama, Vietnam, India, Argentina, Tunisia.

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

Если запросов из нужных вам стран много, а вы ходите сэкономить на Rate Limiting, вы можете настроить ограничение по количеству запросов на своем сервере. На ISPmanager 5 это можно сделать не обладая специальными знаниями.

У Cloudflare есть еще API, позволяющее автоматически включать, усиливать или снижать защиту, в зависимости от нагрузки на сервер.
Вот пример такого скрипта.
Код:
#!/bin/bash

#  $1 = 1min, $2 = 5min, $3 = 15min
loadavg=$(cat /proc/loadavg|awk '{printf "%f", $1}')

# Порог нагрузки, при превышении срабатывает защита, при снижении отключается
maxload=10

# Настройки API Cloudflare
api_key=YOUR_API_KEY
email=YOUR_EMAIL
zone_id=ZONE_ID_DOMAIN

attacking=./attacking

if [ ! -e $attacking ];
  then
  echo 0 > $attacking
fi

hasattack=$(cat $attacking)

if [ $(echo "$loadavg > $maxload"|bc) -eq 1 ];
then
  if [[ $hasattack = 0 && $1 = 0 ]];
  then
   # Включаем защиту
   echo 1 > $attacking
   curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$zone_id/settings/security_level" \
                 -H "X-Auth-Email: $email" \
                 -H "X-Auth-Key: $api_key" \
                 -H "Content-Type: application/json" \
                 --data '{"value":"under_attack"}'
  fi

else
  if [[ $hasattack = 1 && $1 = 1 ]];
  then
   # Отключаем защиту
   echo 0 > $attacking
   curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$zone_id/settings/security_level" \
                 -H "X-Auth-Email: $email" \
                 -H "X-Auth-Key: $api_key" \
                 -H "Content-Type: application/json" \
                 --data '{"value":"low"}'
  fi
fi

exit 0
Прислали еще одну карту ддоса.

Индия и Китай на карте ддос атак

Обычно Индия или Китай. На Европу, США можно выставить челлендж, на Россию, временно, яваскрипт челлендж. Если у вас ISP Manager 5, то задайте лимиты по инструкции и никаких ограничений на Россию выставлять не надо.

Сейчас при добавлении стран появляется такая ошибка.
firewallaccessrules.api.not_entitled.country_block (Code: 10016)

Но работает режим Challenge, что эквивалентно блоку.

Также фаервол на бесплатном тарифе позволяет банить по маскам, а многие страны имеют маски вида 128.0.0.0/8.

В крайнем случае можете поставить Security Level в режим I'm under attack - как временное решение вполне сгодится. Можно включать этот режим автоматически скриптом, как описано выше.
 
Последнее редактирование:
M

mentor

New Member
#3
Если включить челлендж на США, поисковые боты будут заходить?
 
admin

admin

Администратор
Администрация
#4
Cloudflare умеет определять поисковых ботов. В разделе Analytics в таблице Top Crawlers / Bots (под картой) есть статистика по поисковым ботам. Можете включать челлендж на США поисковым ботам это не должно навредить.
 
S

Serg_2

New Member
#5
Ушел от платной защиты на клоудфлар. Посмотрим. Жаль фильтр по странам сделали платным, как я понял в этом вся соль.
 
admin

admin

Администратор
Администрация
#6
Можно забанить подсети стран. Вы можете включить режим "я под атакой" - это снизит нагрузку на сервер. А просочившихся через защиту ботов можно отловить пхп скриптом.
 
DeathStar

DeathStar

Member
#7
чтоб сайт не открывался по IP в конфиг вирт хоста

Код:
if ($host !~ ^(ddosforum.com|www.ddosforum.com)$ ) {
return 444;
}
также можно при помощи API банить IP ддосеров и разбанивать. Вот action для утилиты fail2ban
Код:
[Definition]
actionstart =

actionstop =

actioncheck =

actionban = curl -s -o /dev/null -X POST -H 'X-Auth-Email: <cfuser>' -H 'X-Auth-Key: <cftoken>' \
            -H 'Content-Type: application/json' -d '{ "mode": "block", "configuration": { "target": "ip", "value": "<ip>" } }' \
            https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules

actionunban = curl -s -o /dev/null -X DELETE -H 'X-Auth-Email: <cfuser>' -H 'X-Auth-Key: <cftoken>' \
              https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules/$(curl -s -X GET -H 'X-Auth-Email: <cfuser>' -H 'X-Auth-Key: <cftoken>' \
              'https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules?mode=block&configuration_target=ip&configuration_value=<ip>&page=1&per_page=1' | cut -d'"' -f6)

[Init]
cftoken =
cfuser =
где внизу надо прописать токент и имыя юзера
 
Последнее редактирование модератором:
admin

admin

Администратор
Администрация
#8
Отлично, причем это еще на бесплатном тарифе. На бесплатном тарифе нельзя теперь добавлять страны, если не успели их добавить пока было разрешено, но отдельные IP или подсети без проблем заносятся. Лучше банить сразу по маске 24, потому что количество правил в клоудфларе ограничено.

Кстати, есть ли какой нибудь способ настроить iptables сервера c cloudflare? Там в конфиге есть аналог set_real_from_ip?
 
DeathStar

DeathStar

Member
#9
С помощью iptables можно только закрыть всех на порту 80 и разрешить трафик от серверов CF, есть ли в этом толк - судите сами) По поводу ограниченного кол-ва правил - забанил более 10к адресов все ок.
 
Последнее редактирование модератором:
admin

admin

Администратор
Администрация
#10
Смысла конечно в этом нет, можно просто доступ по IP запретить. Ну в принципе новые IP в фаервол клоудфларе можно на ходу добавлять.

А лучше добавлять подсети. Клоуд передает страну, по IP можно узнать подсеть с помощью утилиты whois и добавить в фаер route. Одной записью по моему опыту можно забанить до тысячи ботов.

В iptables также командой
iptables -n -L -v --line-numbers

Можно посмотреть какие подсети самые активные и даже занести их в ручную ну или скриптом. Я заметил что большинство IP в атаке идут как бы фоном а реально ддосят от силы 100-1000 IP. Как вариант, можно особо активные IP отправлять на вечный бан а остальные разбанивать спустя сутки чтобы не перезагружать фаервол при постоянных ддос атаках.
 
admin

admin

Администратор
Администрация
#11
чтоб сайт не открывался по IP в конфиг вирт хоста

Код:
if ($host !~ ^(ddosforum.com|www.ddosforum.com)$ ) {
return 444;
}
Читал что конструкция if дополнительную нагрузку создает на сервер.

Может лучше так?
Код:
server {
    listen       ip:80 default;
    server_name  _;
    access_log /dev/null;
    error_log /dev/null;
    return 403;
}
 
I

Ivanovich

New Member
#13
Как можно настроить скрипт на шаред хостинге? Напишите пожалуйста инструкцию.
 
M

MIL

New Member
#16
День добрый

А можно как-то в .htaccess или в cloudflare (в сloud похоже, что нет, там на уровне страны заканчивается география) заблокировать заходы с пустыми регионами в Яндекс Метрике?
У ботов отображается только Россия, а далее расшифровки нет- Москва, Петербург, Брянская область и т.д., а у людей полностью отображается регион.

БОТЫ:
309


ЛЮДИ

310
 
D

denis_sss

New Member
#17
Буду пробовать скрипт - ддос атаки стали слишком уж частые теперь....
 
Сверху