Cloudflare
Cloudflare перед вашим сервером скрывает его адрес, поглощает объёмные атаки, которые не остановит никакая программа на самом сервере, и кэширует ваши страницы по всему миру. WardPane может работать за ним, но каждый проксируемый сайт нужно отметить, иначе для панели любой посетитель выглядит как Cloudflare.
За Cloudflare
В настройках сайта включите За Cloudflare для каждого сайта, чьи DNS-записи проксируются (оранжевое облако). От этого переключателя зависят четыре вещи, описанные ниже.
Настоящие IP посетителей
За Cloudflare каждое соединение с вашим сервером приходит с адреса Cloudflare, а собственный адрес посетителя находится в заголовке CF-Connecting-IP. WardPane берёт IP посетителя из этого заголовка, но только для сайтов с отметкой «За Cloudflare» и только когда соединение действительно приходит с адреса Cloudflare. Из любого другого источника заголовок игнорируется: записать в него любой адрес может кто угодно.
Диапазоны адресов Cloudflare встроены в панель и раз в день обновляются с cloudflare.com.
Когда настоящий IP известен, для каждого посетителя отдельно работают: лимит запросов и баны, проверки адресов в Bot Fight Mode, Гео-блокировка, общий чёрный список, привязка к IP в обязательных параметрах ссылки, журналы и REMOTE_ADDR для PHP-скриптов.
Сертификаты за оранжевым облаком
WardPane выпускает сертификаты Let’s Encrypt, даже если DNS домена указывает на Cloudflare вместо вашего сервера. Настройте режим SSL/TLS зоны в Cloudflare так:
- Для самого первого сертификата используйте Full или Flexible. Пока сертификата нет, сервер отвечает самоподписанным, а «Full (strict)» его не принимает.
- Когда сертификат выпущен, переключитесь на Full (strict). Тогда Cloudflare проверяет сертификат вашего сервера, и соединение между Cloudflare и вашим сервером как следует зашифровано.
Режим SSL/TLS настраивается для всей зоны: он влияет на все сайты в этой зоне Cloudflare.
Если в зоне включён режим «I’m Under Attack» или высокий уровень безопасности, проверочные запросы Let’s Encrypt может остановить челлендж Cloudflare. Эту проблему решает интеграция с API, о ней ниже.
Перенаправление на HTTPS без циклов
В режиме «Flexible» Cloudflare обращается к вашему серверу по обычному HTTP, даже когда посетитель использует HTTPS. Простое перенаправление с HTTP на HTTPS в этом случае зациклилось бы. WardPane читает настоящую схему посетителя из заголовка CF-Visitor и перенаправляет только тех посетителей, которые действительно пришли по HTTP. PHP-скрипты для посетителей по HTTPS тоже получают HTTPS=on, так что и WordPress не уходит в цикл перенаправлений.
Пропускать трафик только через Cloudflare
Если включить Пропускать трафик только через Cloudflare, прямые запросы к этому сайту по IP вашего сервера получают 404. Тогда атакующий, узнавший настоящий адрес сервера, не доберётся до сайта в обход защиты Cloudflare. Включайте это, когда сайт уже работает через Cloudflare.
Если переключатель выключен, а сайт за Cloudflare
В этом случае каждый запрос приходит с адреса Cloudflare, а за каждым таким адресом стоят сразу многие ваши посетители. Бан одного адреса закрыл бы сайт для всех, кто идёт через этот сервер Cloudflare, поэтому WardPane распознаёт адреса Cloudflare и обращается с ними иначе:
- Адреса Cloudflare никогда не банятся.
- Лимит запросов считается на каждый сервер Cloudflare, с лимитом в десять раз больше, чем у сайта.
- Баны, публичные списки блокировки IP, проверка и блокировка краулеров по IP, обнаружение сканирования, страны и сети для таких запросов пропускаются. Работают только проверки самого запроса: правила User-Agent, атаки в URL, пробы и методы. Фильтр по языку браузера тоже работает.
- Привязка к IP в обязательных параметрах ссылки отключена: запоминание адреса Cloudflare открыло бы сайт всем, кто стоит за тем же сервером Cloudflare.
- В журнал записывается предупреждение, не чаще раза в день для каждого сайта, с предложением включить «За Cloudflare».
Сайт продолжает работать, но большая часть защиты простаивает, пока вы не включите переключатель.
Cloudflare Workers
Запросы, сделанные Cloudflare Worker, тоже приходят с адресов Cloudflare, а бесплатный Worker может создать кто угодно. Если бы такие запросы считались «Cloudflare», атакующий с Worker обходил бы все правила по IP. Поэтому WardPane учитывает их по зоне Worker из заголовка CF-Worker (worker:<zone>), с обычными лимитами и банами, и Worker, который ведёт себя плохо, банится как любой посетитель.
Worker собственной зоны сайта (домена сайта или его родительского домена) несёт всех ваших настоящих посетителей, поэтому он считается обычным адресом Cloudflare и никогда не банится.
Подключение панели к Cloudflare
Панель может обращаться к API Cloudflare, чтобы проверять и исправлять ваши зоны. Подключение необязательно. Без него панель никогда не обращается к API Cloudflare, а всё описанное выше всё равно работает. В 2.0 панель подключается API-токеном; вход через Cloudflare появится в версии 2.4.
С API-токеном
-
В панели нажмите Создать токен Cloudflare. Кнопка открывает страницу API-токенов Cloudflare с шаблоном, в котором уже есть нужные права:
- Zone: Read
- DNS: Edit
- Zone Settings: Edit
- Config Settings: Edit (так в Cloudflare называется право на Configuration Rules)
-
Создайте токен в Cloudflare, при желании ограничьте его своими зонами и скопируйте.
-
Вставьте его в панели в Настройки > Интеграции или задайте в
/opt/wardpane/.env:CLOUDFLARE_API_TOKEN=your_tokenЗначение, сохранённое в панели, применяется сразу; изменение в
.envприменяется послеsudo systemctl restart wardpane.
Используйте ограниченный API-токен, а не Global API Key: Global API Key даёт полный контроль над всей вашей учётной записью Cloudflare. Панель никогда не отправляет токен обратно в ваш браузер; она лишь показывает, что токен задан.
Вход через Cloudflare
Появится в версии 2.4, см. в плане развития. Вход через Cloudflare будет подключать панель без копирования токена: вы подтверждаете доступ на сайте Cloudflare.
Панель сама начинает авторизацию по PKCE, поэтому секретная часть обмена создаётся в вашей панели и никогда её не покидает. Каждая панель WardPane работает на своём адресе, а у OAuth-клиента Cloudflare только один фиксированный адрес возврата. Поэтому после подтверждения Cloudflare сначала отправляет вас на промежуточную страницу https://cloudflare.wardpane.com/callback.
Эта промежуточная страница крупными буквами показывает адрес панели, в которую будет отправлена авторизация, и отправляет её туда только после нажатия Continue:
- Нажимайте Continue, только если показан адрес вашей собственной панели.
- Если это не так или вы только что не начинали подключение, нажмите Cancel.
Промежуточная страница никогда не перенаправляет сама и ничего не хранит и не записывает в журналы об авторизации. Если Cloudflare отказал в авторизации, промежуточная страница предложит сообщить вашей панели, что подключение не удалось.
Интеграция с API Cloudflare
Когда подключение настроено, в разделе За Cloudflare настроек сайта появляется кнопка Проверить настройки Cloudflare. Она читает зону и показывает, что в ней есть, ничего не меняя:
- DNS-записи каждого домена и псевдонима сайта: существует ли каждая, указывает ли на этот сервер и проксируется ли (оранжевое облако);
- режим SSL/TLS зоны и рекомендуемый режим: Full, пока у сайта нет доверенного сертификата, и Full (strict), когда он появился;
- уровень безопасности и исключён ли из него путь для ACME-челленджа.
Затем она предлагает исправить только найденные проблемы, и ничего не меняется, пока вы не нажмёте Применить исправления:
- создать или исправить записи
A, чтобы каждое имя указывало на этот сервер через оранжевое облако; - установить рекомендуемый режим SSL/TLS (для всей зоны);
- добавить правило ACME (см. ниже).
Каждое изменение перечисляется в результате и записывается в журнал.
Правило ACME
Let’s Encrypt проверяет домен, загружая файл из /.well-known/acme-challenge/. При режиме Cloudflare «I’m Under Attack» или высоком уровне безопасности этот запрос натыкается на страницу проверки, и проверка домена не проходит. Это решает Configuration Rule в зоне, которое отключает уровень безопасности для одного этого пути. По этому пути лежат только одноразовые случайные токены, а остальной сайт сохраняет полную защиту.
Это правило единственное, что панель меняет без спроса: оно добавляется автоматически перед выпуском сертификата, потому что без него выпуск невозможен. Других правил панель не трогает, а если вы уже сами создали равнозначное правило, она его распознает.
Снятие режима Under Attack как крайняя мера
Если Cloudflare отказывается создавать правило (например, у токена нет права Config Settings), панель может на время прохождения проверки переключить зону с «I’m Under Attack» на «High» и сразу вернуть обратно. Прежний уровень сначала записывается на диск, поэтому он восстанавливается, даже если панель упадёт посередине; неудачное восстановление повторяется с растущими паузами, а журнал сообщит, если вам нужно включить режим обратно вручную.
В эти секунды вся зона защищена слабее, поэтому панель идёт на это, только если Cloudflare отказался создать точечное правило. Чтобы запретить это совсем, задайте:
CLOUDFLARE_LIFT_UNDER_ATTACK=false
(в .env или в Настройки > Интеграции; по умолчанию true).
Синхронизация DNS
Синхронизация зон DNS с Cloudflare появится в версии 2.4 вместе с собственным DNS-сервером WardPane; см. DNS. Уже в 2.0 кнопка Проверить настройки Cloudflare создаёт или исправляет записи A каждого сайта в его зоне Cloudflare, как описано выше.
За другими прокси
WardPane доверяет адресу посетителя только от Cloudflare. За любым другим прокси или CDN каждый запрос несёт адрес прокси: не включайте защиту от DDoS для такого сайта, потому что один бан заблокирует всех.