Конфигурация Настройка Cloudflare для вашего сайта от А до Я для параноиков.

Настройка Cloudflare для вашего сайта от А до Я для параноиков.
Краткое описание:
Если знашь как сделать лучше, либо не читай, либо пиши что и как.
3 961
  • Лайк 0
  • Gold love
  • Дизлайк
Реакции:17 пользователей
!!!Дисклеймер!!!

Здесь собраны мои личные мнение и опыт, вам эти настройки могут не подойти, или ваши настройки могут быть лучше.

Подготовка сервера

Подразумевается, что у вас установлен 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
Блокируем 80 (и по желанию 443) порт:
Код:
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.
1713960070060

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

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

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

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

1713960536010

1713960606827

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

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


Настройка SSL/TLS

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

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


Оптимизация загрузки сайта

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


Настройка кэширования

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


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

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

1713962682492


Защита сайта

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


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


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

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


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

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


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


Блокировка стран, континентов и IP с плохой репутацией. Можно добавить свои страны.
1713964194021

Код:
(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)

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

Код:
(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 ввиду устаревания и использования по большей части только ботами и бесплатными флудерами.)
1713964510149

Код:
(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 условно при повышении использования процессора.
1713964683017


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


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

1713965347335

Код:
(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 и проверены временем. Правила фаервола/кэширования могут требовать адаптации под специфику работы вашего сайта. Данная настройка не обеспечивает полную защиту от всех угроз, ни одна система не безопасна.
  • 1713960115912.png
    1713960115912.png
    58,5 КБ · Просмотры: 76
  • 1713962966105.png
    1713962966105.png
    10,9 КБ · Просмотры: 74
  • 1713963960148.png
    1713963960148.png
    67,8 КБ · Просмотры: 62

Автор

SkyWatcher_2019

Еще ресурсы от SkyWatcher_2019

VuTuV - 3D-модель, подготовленная к печати
VuTuV - 3D-модель, подготовленная к печати
VuTuV Monke
LimboReconnect
LimboReconnect
Переподключайте игроков после рестарта сервера!
ВерхНиз