Discourse и Cloudflare

Да, проверка HTTP-01 работает в сочетании с Cloudflare в режиме «оранжевого облака». Однако она не работает по HTTPS: проверка HTTP-01 возможна только через порт 80, и:

Многие пользователи Cloudflare настраивают автоматическое перенаправление HTTP на HTTPS, и это делает порт 80 на исходном сервере недоступным, что мешает выполнению проверок HTTP-01.

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

Таким образом, строго говоря, это неверно.
Let’s Encrypt завершится ошибкой только в том случае, если Cloudflare настроен на перенаправление трафика порта 80 до его поступления на исходный сервер.

Я согласен, однако, поскольку информационная безопасность сейчас более актуальна, чем когда-либо, и люди начинают активнее работать с продуктами Zero Trust, частью которых является CF Tunnel, мы будем и должны наблюдать рост использования подобных технологий. Именно поэтому я поднял этот вопрос.

Кажется, вы неправильно поняли, как работает проверка HTTP-01 от Let’s Encrypt.
Она ищет токен, который certbot или другой клиент LE размещает, чаще всего, в подпапке .well-known веб-сервера.
Однако проверка не жестко привязана к запуску запроса на порту 80, игнорированию редиректов HTTP-кодов и немедленному сбою, если токен не найден.
Проверка HTTP-01 способна следовать за HTTP-редиректами (301 и 302) и поэтому может читать папку .well-known через порт 443 по протоколу HTTPS.
Именно поэтому это работает для Cloudflare Universal SSL с перенаправлением (и Cloudflare Tunnel): Cloudflare отвечает вместо веб-сервера на порту 80, перенаправляет запрос на порт 443, где Let’s Encrypt может прочитать токен, а центр сертификации выдает сертификат.

Высокоуровневая схема процесса:

Certbot запускает проверку HTTP-01
→ Отправляет POST-запрос с данными сертификата в CA и размещает токен в .well-known
→ CA отправляет GET-запрос для получения токена по FQDN на порту 80
→ CF перенаправляет запрос на порт 443 и защищает его своим сертификатом Universal SSL
→ Запрос пересылается на сам веб-сервер (через CF Tunnel или напрямую)
→ CA может получить токен из .well-known, так как порт 443 способен предоставить токен так же, как это сделали бы HTTP и порт 80
→ CA отправляет POST-запрос с необработанными данными сертификата, и Certbot создает файлы

В марте я создал тему, чтобы найти более свежие подробности или руководства по внедрению Cloudflare.

Я всё ещё ищу такое руководство :slight_smile:

Я использую Cloudfront в качестве CDN, но хотел бы добавить защиту от DDoS-атак, которую предоставляет Cloudflare. Нас часто атакуют :confused:

Я думаю, что понимаю это довольно хорошо. Вы правы, запрос можно перенаправить на HTTPS, но это зависит от настроек Cloudflare и конфигурации веб-сервера, сработает ли это, так как изначально на сервере-источнике не будет действительного сертификата.

Да, их можно перенаправить на другой порт, но проверки HTTP-01 обязаны всегда начинаться на порту 80.

См. Challenge Types - Let's Encrypt

Проверка HTTP-01 может выполняться только на порту 80. Разрешение клиентам указывать произвольные порты сделало бы проверку менее безопасной, поэтому это не допускается стандартом ACME.

Я согласен, я просто указал на вашу неточность: утверждение, что это никогда не сработает, неверно.


То, как вы процитировали моё предложение, довольно коварно, так как это создаёт ложное впечатление о контексте обсуждения и придаёт фразе иной смысл. Вот моё полное предложение:

Ключевая часть моего утверждения — это сочетание «зашито в код так, чтобы запрос всегда начинался с порта 80», «игнорируются любые HTTP-перенаправления» и «непосредственный сбой», поскольку вы написали:

Это создаёт впечатление, что причиной сбоя вызова HTTP-01 является только перенаправление, что неверно. Кроме того, строго говоря, перенаправление не делает порт 80 «недоступным».

Зла не подразумевалось и не планировалось.

Он делает порт 80 исходного сервера недоступным для всего трафика, направленного на это имя хоста.

Мне не нравится текущий тон обсуждения в этой теме, поэтому я отписываюсь от неё.

Моё мнение о Cloudflare в сочетании с Discourse можно сформулировать так: «многие люди, судя по всему, не могут настроить его правильно, поэтому в целом я бы рекомендовал не включать его. Если вы хотите использовать его для защиты от DDoS-атак, то я бы рекомендовал включать его только с очень специфичными настройками».

Это чёткое заявление, спасибо.

Это может быть ещё один глупый вопрос, но так как я обслуживаю только финскую аудиторию, я не вижу причин использовать Cloudflare, поэтому знаю о нём только по репутации.

Но если его единственное преимущество — это защита от DDoS-атак, а DDoS в основном означает просто слишком много запросов от:

  • бесполезных SEO-краулеров
  • других ботов, созданных скрипт-кидди

то почему бы не использовать Nginx перед Discourse и не блокировать известных агентов пользователей прямо там? В сочетании с Fail2ban это снизило бы нагрузку примерно на 90 % (конечно, статистика Стетсона, но всё равно это много).

Эта дискуссия очень ценна. Для администратора китайского сайта «Flare» может означать возможность для китайских пользователей нормально обмениваться данными с внешним миром. Я проводил тест некоторое время назад. Если не использовать Orange Cloud и обращаться к серверам в других странах из Китая, сетевые задержки будут очень серьезными. Проблема в том, что запуск форума в Китае подвергается строгой цензуре. Даже несмотря на то, что я создавал неполитический форум, я всё равно пострадал. Мы должны исходить из того, что сервер сайта расположен за пределами Китая. Поэтому, если я создам форум с помощью Discourse, мне придется учитывать, можно ли использовать Cloudflare.