Discourse 및 Cloudflare

네, HTTP-01 챌린지는 Cloudflare의 “오렌지 클라우드” 모드와 함께 작동합니다. 하지만 HTTPS를 통해 작동하지는 않으며, HTTP-01 챌린지는 포트 80에서만 작동합니다. 그리고:

Cloudflare를 사용하는 많은 사람들이 HTTP를 HTTPS로 자동으로 리디렉션하도록 설정하는데, 이것이 원본 서버의 포트 80을 사용할 수 없게 만들고, 이것이 HTTP-01 챌린지가 작동하지 않도록 막습니다.

따라서 해당 리디렉션을 활성화하지 않으면 정상적으로 작동합니다.

엄밀히 말하면 이것은 사실이 아닙니다.
Let’s Encrypt는 포트 80의 트래픽이 원본 서버에 도달하기 전에 리디렉션되도록 Cloudflare가 설정된 경우에만 실패합니다.

동의합니다. 다만, IT 보안이 그 어느 때보다 중요해지고 있으며, CF Tunnel이 포함된 Zero Trust 제품군을 활용하는 사용자가 점점 늘고 있기 때문에, 이러한 기술의 활용이 증가할 수밖에 없고 증가해야 한다고 생각합니다. 그래서 이 주제를 꺼내게 되었습니다.

LE의 HTTP-01 챌린지가 어떻게 작동하는지 오해하신 것 같습니다.
이것은 보통 certbot 또는 다른 LE 클라이언트 변형이 웹서버의 .well-known 하위 폴더에 배치하는 토큰을 찾습니다.
하지만 요청을 포트 80에서 시작하도록 하드코딩되어 있지는 않으며, HTTP 코드 리디렉트를 무시하거나 토큰을 찾지 못할 경우 즉시 실패하지도 않습니다.
HTTP-01 챌린지는 HTTP 리디렉션(301 및 302)을 따를 수 있으므로, 443 포트와 HTTPS를 통해 .well-known 폴더를 읽을 수 있습니다.
그리고 이것이 Cloudflare Universal SSL WITH Redirect(및 Cloudflare Tunnel)에서 작동하는 이유는, Cloudflare이 포트 80에서 웹서버 대신 응답하여 요청을 443 포트의 리디렉션하고,在那里 LE가 토큰을 읽고 CA가 인증서를 발급할 수 있기 때문입니다.

흐름의 고수준 다이어그램:

Certbot이 HTTP-01 시작
→ CA에 인증서 요청을 POST하고 토큰을 .well-known에 배치
→ CA가 FQDN 포트 80에서 토큰을 위한 GET 시작
→ CF가 포트 443으로 리디렉션하고 Universal SSL 인증서로 요청을 보안 처리
→ 요청이 웹서버 자체로 전달됨(CF Tunnel을 통해 또는 직접)
→ 443 포트가 HTTP와 포트 80과 동일한 방식으로 토큰을 제시할 수 있으므로 CA가 .well-known에서 토큰을 GET할 수 있음
→ CA가 RAW 인증서 데이터를 POST하고 Certbot이 파일 생성

3월에 토픽을 만들어서 Cloudflare 구현에 대한 더 최신 세부 정보나 가이드를 찾고 있었습니다.

아직도 찾고 있어요 :slight_smile:

저는 CDN으로 Cloudfront을 사용 중인데, Cloudflare가 제공하는 DDoS 보호 기능을 추가하고 싶습니다. 저희는 공격을 많이 받거든요 :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를 사용할 이유가 없다고 생각합니다. 그래서 Cloudflare에 대해서는 평판으로만 알고 있을 뿐입니다.

하지만 Cloudflare의 유일한 이점이 DDoS 공격을 차단하는 것이라면, DDoS 공격은 대부분 다음과 같은 것들 때문에 발생하는 것입니다:

  • 쓸모없는 SEO 크롤러
  • 스크립트 키디들이 만든 다른 봇

그렇다면 Discourse 앞에 Nginx를 두고 알려진 사용자 에이전트를 거기서 차단하는 것은 어떨까요? 이 방법을 Fail2ban과 결합하면 부하가 약 90%까지 감소할 것입니다(물론 스테튼의 통계이지만, 그래도 상당한 수치입니다).

이 토론은 매우 가치 있습니다. 중국 웹사이트 관리자에게 Cloudflare는 중국 사용자가 외부 세계와 정상적으로 데이터를 교환할 수 있는지 여부를 결정하는 핵심 요소입니다. 과거에 테스트를 해본 적이 있는데, Cloudflare를 사용하지 않고 중국에서 해외 서버에 접속하면 네트워크 지연(지터)이 매우 심각했습니다. 더 문제는 중국에서 포럼을 운영하려면 엄격한 검열을 받아야 한다는 점입니다. 비정치적 포럼을 운영했음에도 불구하고 여전히 영향을 받았습니다. 따라서 웹사이트 서버가 중국 밖에 위치한다고 가정해야 합니다. 그래서 Discourse를 사용해 포럼을 만들 경우, Cloudflare를 사용할 수 있는지 반드시 고려해야 합니다.