!!!Дисклеймер!!!
Здесь собраны мои личные мнение и опыт, вам эти настройки могут не подойти, или ваши настройки могут быть лучше.
Подготовка сервера
Подразумевается, что у вас установлен Nginx.
Открываем файл конфигурации сайта, заменяем порт на 80 (
Затем блокируем доступ к сайту со всех IP-адресов кроме адресов Cloudflare.
Создаем IPset:Добавляем адреса: Блокируем 80 (и по желанию 443) порт:
Чтобы правила и IPset сохранялись после перезагрузки, нужно установить netfilter-persistent и ipset-persistent:
Настройка домена
Заходим на https://dash.cloudflare.com/, регистрируемся/входим в аккаунт, и нажимаем кнопку Add site.

Вводим ваш домен и нажимаем Continue.

Листаем вниз, и выбираем Free, нажимаем Continue.

Подгружаем имеющиеся DNS-записи.

Затем Cloudflare выдает нам NS-сервера, которые необходимо установить в настройках домена в панели регистратора, это займет до 24 часов, но в большинстве случаев все обновляется за несколько минут.



После этого мы переходим в панель домена на Cloudflare. Нам нужен раздел с DNS записями.

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

Настройка SSL/TLS
Переходим в раздел SSL/TLS, и устанавливаем режим Flexible, чтобы вся обработка TLS происходила на серверах Cloudflare.

Затем переходим во вкладку Edge Certificates, и включаем Always use HTTPS, TLS 1.3 и Automatic HTTPS Rewrites. Так же рекомендую установить минимальную версию TLS в 1.3.


Оптимизация загрузки сайта
Переходим в раздел Optimization, нажимаем кнопку Enable all available optimizations, затем во вкладках Content Optimization и Protocol Optimization включаем все доступные опции.


Настройка кэширования
Переходим в раздел Cache, устанавливаем Caching level в Ignore query string, Browser cache TTL в удобное вам значение, и по необходимости включаем Crawler Hints.


По умолчанию, Cloudflare кэширует только файлы с данными расширениями, но можно кэшировать целые страницы, или исключать что-либо из кэша. Для этого нужно создать правило кэширования в разделе Cache Rules.

Например, мы будем кэшировать страницу оферы. Для этого, в фильтре запросов надо выбрать URI Path, equals, в значение указать путь к странице, и выбрать Eligible for cache. Так же можно настроить дополнительные параметры кэширования, такие как Edge и Browser TTL.


Защита сайта
Переходим в настройки раздела Security, устанавливаем Security Level на High, и включаем Browser Integrity Check.


Затем переходим в раздел DDoS, и нажимаем кнопку Deploy DDoS Override.

Листаем до DDoS L7 Ruleset configuration, Ruleset action устанавливаем в Block, Ruleset sensivity в High, сохраняем.

В разделе Bots включаем Bot Fight Mode.

Переходим в раздел WAF (фаервол), и создаем необходимые правила.

Первым правилом мы создадим вайтлист для запросов, например для поисковиков и каких-либо API.

Следующими двумя правилами мы заблокируем запросы от большей части бесплатных прокси-серверов (осторожно, могут быть заблокированы нужные вам страны/провайдеры). Открыть текстовый редактор можно кнопкой Edit expression.
Блокировка стран, континентов и IP с плохой репутацией. Можно добавить свои страны.

Блокировка провайдеров, на которых могут быть расположены прокси и боты (в основном сети хостингов).

Затем добавляем правило для валидации HTTP запросов и отсеивания плохо настроенных прокси (может быть неактуальным, часть проверок может быть встроена в собственные правила Cloudflare. Отключен HTTP/1 ввиду устаревания и использования по большей части только ботами и бесплатными флудерами.)

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

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

Затем мы переходим в раздел Rate limiting rules, и создаем правило, ограничивающее количество запросов к страницам до 25 запросов/10 сек. (Подбирается индивидуально, можно добавить собственные исключения, например всё содержимое по пути /assets).


Заключение
Эти настройки были собраны из моего личного опыта использования Cloudflare и проверены временем. Правила фаервола/кэширования могут требовать адаптации под специфику работы вашего сайта. Данная настройка не обеспечивает полную защиту от всех угроз, ни одна система не безопасна.
Здесь собраны мои личные мнение и опыт, вам эти настройки могут не подойти, или ваши настройки могут быть лучше.
Подготовка сервера
Подразумевается, что у вас установлен Nginx.
Открываем файл конфигурации сайта, заменяем порт на 80 (
listen 80;
) и убираем настройки SSL (строки с префиксом ssl_
), так как мы будем использовать сертификаты на стороне Cloudflare.Затем блокируем доступ к сайту со всех IP-адресов кроме адресов Cloudflare.
Создаем IPset:
Код:
ipset create cloudflare hash:net
Код:
for ip in $(curl https://www.cloudflare.com/ips-v4); do ipset add cloudflare $ip; done
Код:
iptables -t raw -I PREROUTING -p tcp -d <ip сервера> --dport 80 -m set ! --match-set cloudflare src -j DROP
iptables -t raw -I PREROUTING -p tcp -d <ip сервера> --dport 443 -m set ! --match-set cloudflare src -j DROP
Чтобы правила и IPset сохранялись после перезагрузки, нужно установить netfilter-persistent и ipset-persistent:
Код:
apt install netfilter-persistent ipset-persistent
systemctl enable netfilter-persistent ipset-persistent
Настройка домена
Заходим на https://dash.cloudflare.com/, регистрируемся/входим в аккаунт, и нажимаем кнопку Add site.
Вводим ваш домен и нажимаем Continue.
Листаем вниз, и выбираем Free, нажимаем Continue.
Подгружаем имеющиеся DNS-записи.
Затем Cloudflare выдает нам NS-сервера, которые необходимо установить в настройках домена в панели регистратора, это займет до 24 часов, но в большинстве случаев все обновляется за несколько минут.
После этого мы переходим в панель домена на Cloudflare. Нам нужен раздел с DNS записями.
Затем нам нужно добавить A-запись, указывающую на IP-адрес вашего сайта, и включить проксирование.
Настройка SSL/TLS
Переходим в раздел SSL/TLS, и устанавливаем режим Flexible, чтобы вся обработка TLS происходила на серверах Cloudflare.
Затем переходим во вкладку Edge Certificates, и включаем Always use HTTPS, TLS 1.3 и Automatic HTTPS Rewrites. Так же рекомендую установить минимальную версию TLS в 1.3.
Оптимизация загрузки сайта
Переходим в раздел Optimization, нажимаем кнопку Enable all available optimizations, затем во вкладках Content Optimization и Protocol Optimization включаем все доступные опции.
Настройка кэширования
Переходим в раздел Cache, устанавливаем Caching level в Ignore query string, Browser cache TTL в удобное вам значение, и по необходимости включаем Crawler Hints.
По умолчанию, Cloudflare кэширует только файлы с данными расширениями, но можно кэшировать целые страницы, или исключать что-либо из кэша. Для этого нужно создать правило кэширования в разделе Cache Rules.
Например, мы будем кэшировать страницу оферы. Для этого, в фильтре запросов надо выбрать URI Path, equals, в значение указать путь к странице, и выбрать Eligible for cache. Так же можно настроить дополнительные параметры кэширования, такие как Edge и Browser TTL.
Защита сайта
Переходим в настройки раздела Security, устанавливаем Security Level на High, и включаем Browser Integrity Check.
Затем переходим в раздел DDoS, и нажимаем кнопку Deploy DDoS Override.
Листаем до DDoS L7 Ruleset configuration, Ruleset action устанавливаем в Block, Ruleset sensivity в High, сохраняем.
В разделе Bots включаем Bot Fight Mode.
Переходим в раздел WAF (фаервол), и создаем необходимые правила.
Первым правилом мы создадим вайтлист для запросов, например для поисковиков и каких-либо API.
Следующими двумя правилами мы заблокируем запросы от большей части бесплатных прокси-серверов (осторожно, могут быть заблокированы нужные вам страны/провайдеры). Открыть текстовый редактор можно кнопкой Edit expression.
Блокировка стран, континентов и IP с плохой репутацией. Можно добавить свои страны.
Код:
(ip.geoip.country in {"CN" "HK" "IN" "ID" "IR" "IQ" "T1" "XX" "HN"}) or (not ip.geoip.continent in {"AS" "EU" "NA"} and not ip.geoip.country in {"AR"}) or (cf.threat_score gt 0)
Блокировка провайдеров, на которых могут быть расположены прокси и боты (в основном сети хостингов).
Код:
(ip.geoip.asnum in {792 793 794 1215 1216 1217 1218 1219 1442 2590 3188 3214 3249 3457 3722 3842 5056 5408 6181 6188 6718 7349 7552 7598 7713 8075 8477 8987 9059 9829 9925 10124 10200 10297 12876 13032 13188 13647 13909 14059 14061 14567 14618 14708 14986 16276 16509 17439 17451 17493 17920 17971 17974 18637 19969 20081 20141 20450 20454 20473 20692 23881 23969 24381 24611 24940 24958 24997 25642 25820 26277 26496 26548 27229 27747 28006 28333 29119 29331 30083 30235 30475 30823 30900 31898 32275 33070 33182 33251 33932 34241 34588 34619 34745 35048 35278 35366 35467 35624 35830 35913 35916 36352 36408 38107 38895 38934 39111 39368 40021 40676 40715 40819 41079 41369 41427 42120 42465 42510 42622 42705 43541 43620 43624 44398 44725 44812 45102 45152 46177 46475 47143 47205 47583 48093 48812 49389 49392 49505 49635 49981 50582 50608 50633 51167 51241 51765 52000 52270 52321 52465 52674 52925 53101 53225 53667 54203 54600 54825 55081 55229 55286 56465 56799 57363 57682 58113 58588 59317 59554 59854 61107 61412 62026 62240 62370 62567 62651 63949 131090 131229 131384 132005 132074 132203 132258 132509 132563 132705 132714 132717 132779 133058 133165 141039 141995 196678 196745 196944 197329 197439 197540 197598 197914 198047 198153 198313 198347 198380 198414 198432 198754 199213 201449 201709 201862 202269 202448 202700 203020 204213 208006 208046 208425 212219 212598 213230 213371 262170 262978 264771 269818 270004 396356 396982 397630 398101 399296})
Затем добавляем правило для валидации HTTP запросов и отсеивания плохо настроенных прокси (может быть неактуальным, часть проверок может быть встроена в собственные правила Cloudflare. Отключен HTTP/1 ввиду устаревания и использования по большей части только ботами и бесплатными флудерами.)
Код:
(not http.user_agent contains "Mozilla/5.0") or (any(http.request.headers["host"][*] contains ":")) or (not http.request.version in {"HTTP/2" "HTTP/3"}) or (http.x_forwarded_for ne "") or ((any(http.request.headers["sec-ch-ua"][*] contains "(Not(A:Brand")) and (not any(http.request.headers["sec-ch-ua-platform"][*] contains "Linux"))) or
(((lower(http.user_agent) contains "chrome/") and (any(http.request.headers.names[*] == "sec-ch-ua-mobile"))) and not any(http.request.headers.names[*] == "sec-gpc")) and (not any(http.request.headers["sec-ch-ua"][*] contains "Chromium") and not lower(http.user_agent) contains "samsungbrowser" and not lower(http.user_agent) contains "mobile safari/" and not lower(http.user_agent) contains "smart tv") or ((any(http.request.headers["sec-ch-ua-platform"][*] eq "Android")) and (any(http.request.headers["sec-ch-ua-mobile"][*] ne "?1") and not ((any(http.request.headers["sec-ch-ua"][*] contains "Tenta"))) and (not http.user_agent contains "; Android "))) or (any(http.request.headers.names[*] == "x-original-host")) or (any(http.request.headers.names[*] == "x-forwarder-for")) or (any(http.request.headers.names[*] == "x-remote-addr")) or (any(http.request.headers.names[*] == "x-server")) or (any(http.request.headers.names[*] == "x-remote-ip")) or (any(http.request.headers.names[*] == "x-cluster-ip")) or (any(http.request.headers.names[*] == "x-true-client")) or (any(http.request.headers.names[*] == "x-originating-ip")) or (any(http.request.headers.names[*] == "x-client-ip")) or (any(http.request.headers.names[*] == "x-forwarded-https")) or (any(http.request.headers.names[*] == "x-forwarded-https")) or (any(http.request.headers.names[*] contains "x-ref-fe")) or (any(http.request.headers.names[*] contains "X-Req-Ip-"))
Последним правилом включаем интерактивную проверку на все запросы, прошедшие предыдущие правила. Правило может быть отключено по умолчанию, и включаться через API условно при повышении использования процессора.
Порядок правил должен получиться следующим, первым должен идти белый список, а последним интерактивная проверка. Порядок блокирующих правил не важен.
Затем мы переходим в раздел Rate limiting rules, и создаем правило, ограничивающее количество запросов к страницам до 25 запросов/10 сек. (Подбирается индивидуально, можно добавить собственные исключения, например всё содержимое по пути /assets).
Код:
(not ends_with(http.request.uri.path, ".js") and not ends_with(http.request.uri.path, ".css") and not ends_with(http.request.uri.path, ".png") and not ends_with(http.request.uri.path, ".jpg") and not ends_with(http.request.uri.path, ".ico") and not ends_with(http.request.uri.path, ".ttf") and not starts_with(http.request.uri.path, "/assets/"))
Заключение
Эти настройки были собраны из моего личного опыта использования Cloudflare и проверены временем. Правила фаервола/кэширования могут требовать адаптации под специфику работы вашего сайта. Данная настройка не обеспечивает полную защиту от всех угроз, ни одна система не безопасна.