포럼이 중단된 후 방화벽 설정 관련 인증서 갱신 오류 발생?

안녕하세요!

제 포럼이 지난밤, 약 10시간에서 17시간 사이(정확히는 모르겠습니다) 다운되었습니다. 페이지가 캐시된 버전으로 로드되었고 많은 리소스가 로드되지 않았습니다.

컨테이너를 중지하고 다시 시작해 봤지만 효과가 없었습니다.

컨테이너를 다시 구축(1회)한 결과, 이제 인증서가 만료되었다는 메시지가 표시됩니다.

https://www.ssllabs.com/ssltest/analyze.html?d=unicyclist.com에서 다음을 반환합니다:
만료일 2022년 4월 13일 수요일 23:22:28 UTC (11시간 15분 전에 만료됨) 만료됨

acme.sh.log에는 다음과 같이 표시됩니다:

Create new order error. Le_OrderFinalize not found. {
  "type": "urn:ietf:params:acme:error:rateLimited",
  "detail": "Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/",
  "status": 429
}

로그를 더 자세히 살펴보니 3월부터 하루 한 번씩 여러 번(로그 기준으로 보면 Letsencrypt 레이트 리미트를 트리거할 정도는 아니지만) 다음과 같은 메시지가 있었습니다:

unicyclist.com:Verify error:Fetching http://unicyclist.com/.well-known/acme-challenge/uSv1JIUxVs-Nn7Zn2cIZO355KGaqrtutELs4pgw67_Y: Timeout during connect (likely firewall problem)

저는 3월 초에 Hetzner에 이 방화벽 규칙을 설정했습니다:

결국, 몇 가지 질문이 있습니다:

  1. 이 Hetzner 방화벽 규칙이 문제일 수 있나요? 그렇다면 어떤 규칙이 누락되어 이 문제를 일으킬 수 있을까요? 참고로 방금 이 모든 규칙을 삭제했습니다.

  2. 왜 오늘 아침에 단 한 번의 재구축 중에 unicyclist.com:Verify error:Fetching […] Timeout during connect (likely firewall problem) 메시지가 10번이나 발생했나요? 재구축 한 번으로 Letsencrypt 레이트 리미트가 트리거될 수 있을까요? :thinking:

  3. 이미 레이트 리미트에 도달했으므로, 제 포럼이 일주일 동안 기본적으로 다운된 상태이고 제가 할 수 있는 것이 아무것도 없는 걸까요? :grimacing:

제가 사용한 해결책은 여러 도메인으로 Let’s Encrypt 설정하기 문서에서 제안한 대로 두 번째 호스트명(예: www, 또는 다른 이름)을 추가하는 것이었습니다. 하지만 템플릿에 일부 변경이 있어 해당 설명이 더 이상 작동하지 않는 것 같습니다. 며칠 전 다른 사이트에서 제가 한 작업은 /etc/runit/1.d/letsencrypt 파일을 편집하여 -d realdomain이 보이는 위치에 -d newdomain을 추가하는 것이었습니다. 그런 다음 새 도메인이 내 서버를 가리키도록 설정하고 /etc/runit/1.d/letsencrypt를 실행하면 됩니다.

포트 80을 열어야 할 수도 있습니다. 유효한 인증서가 있으면 포트 80이 필요하지 않다고 이해하고 있지만, 현재 유효한 인증서가 없으므로 시작하려면 포트 80에서 읽어야 할 것 같습니다. 포트 80을 열어 두는 데는 단점이 없습니다. 일부 사용자가 http://로 접속을 시도할 수 있는데, 포트 80이 열려 있으면 그들을 https로 리다이렉트할 수 있기 때문입니다.

해당 설명을 업데이트하는 작업을 진행하겠습니다. 하지만 내일 이삿짐차가 도착할 예정이라 메타 포럼에 글을 쓰는 것보다 이사 준비를 해야 할 것 같습니다. :slight_smile:

답변 감사합니다!
새 도메인/서브도메인을 사용하는 경우에도 모든 게시물을 다시 생성(rebake)해야 하나요?
저는 160만 개의 게시물이 있습니다. 이 포럼을 vBulletin에서 가져올 때 경험해 보았듯이, 다시 생성을 하면 YouTube 임베딩 속도 제한(rate limit)도 발생하게 됩니다.

임시 새 도메인/서브도메인을 사용하는 문제점은 제 포럼이 호스팅된 도메인의 소유자가 저라는 점인데, 이는 꽤 귀찮은 일입니다. 소유자의 응답이 느릴 수 있고, 문제가 발생하면 다른 이메일을 오가야 하니까요. 매우 실용적이지 않습니다 :grimacing:

실제로 Challenge Types - Let's Encrypt 에서 포트 80이 일부 "challenge"에서 사용 가능해야 한다는 것을 확인했습니다. (Discourse에서 인증서를 갱신할 때 어떤 종류의 challenge가 사용되는지는 모르겠습니다.)


이 외에도, 단일 재빌드(rebuild) 과정에서 발생한 10개의 실패한 challenge(이것이 인증서 요청과 같은 의미인가요?)에 대해 조금 더 알고 싶습니다.

이 부분에 대한 공식적인 답변이 있으면 도움이 될 것 같습니다.

만약 어떤 이유로 인해 Let’s Encrypt의 속도 제한이 허용하는 것보다 더 많은 인증서 요청이 트리거된다면, 이렇게 동작해서는 안 되니까요 :white_question_mark:

acme.sh.log 발췌:

[Thu 14 Apr 2022 10:29:01 AM UTC] payload
[Thu 14 Apr 2022 10:29:01 AM UTC] POST
[Thu 14 Apr 2022 10:29:01 AM UTC] _post_url='https://acme-v02.api.letsencrypt.org/acme/chall-v3/98157717290/JXMDvA'
[Thu 14 Apr 2022 10:29:01 AM UTC] _CURL='curl --silent --dump-header /shared/letsencrypt/http.header  -L '
[Thu 14 Apr 2022 10:29:01 AM UTC] _ret='0'
[Thu 14 Apr 2022 10:29:01 AM UTC] code='200'
[Thu 14 Apr 2022 10:29:01 AM UTC] Pending
[Thu 14 Apr 2022 10:29:01 AM UTC] sleep 2 secs to verify
[Thu 14 Apr 2022 10:29:03 AM UTC] checking
[Thu 14 Apr 2022 10:29:03 AM UTC] url='https://acme-v02.api.letsencrypt.org/acme/chall-v3/98157717290/JXMDvA'
[Thu 14 Apr 2022 10:29:03 AM UTC] payload
[Thu 14 Apr 2022 10:29:03 AM UTC] POST
[Thu 14 Apr 2022 10:29:03 AM UTC] _post_url='https://acme-v02.api.letsencrypt.org/acme/chall-v3/98157717290/JXMDvA'
[Thu 14 Apr 2022 10:29:03 AM UTC] _CURL='curl --silent --dump-header /shared/letsencrypt/http.header  -L '
[Thu 14 Apr 2022 10:29:04 AM UTC] _ret='0'
[Thu 14 Apr 2022 10:29:04 AM UTC] code='200'
[Thu 14 Apr 2022 10:29:04 AM UTC] unicyclist.com:Verify error:Fetching http://unicyclist.com/.well-known/acme-challenge/uSv1JIUxVs-Nn7Zn2cIZO355KGaqrtutELs4pgw67_Y: Timeout during connect (likely firewall problem)
[Thu 14 Apr 2022 10:29:04 AM UTC] pid

몇 초 후:

[Thu 14 Apr 2022 10:29:18 AM UTC] payload
[Thu 14 Apr 2022 10:29:19 AM UTC] POST
[Thu 14 Apr 2022 10:29:19 AM UTC] _post_url='https://acme-v02.api.letsencrypt.org/acme/chall-v3/98157816830/tzknWw'
[Thu 14 Apr 2022 10:29:19 AM UTC] _CURL='curl --silent --dump-header /shared/letsencrypt/http.header  -L '
[Thu 14 Apr 2022 10:29:19 AM UTC] _ret='0'
[Thu 14 Apr 2022 10:29:19 AM UTC] code='200'
[Thu 14 Apr 2022 10:29:19 AM UTC] unicyclist.com:Verify error:Fetching http://unicyclist.com/.well-known/acme-challenge/UUi8goql9f4QjXwqdk_CUISDmwUpLHqhrSqwbr5D2aY: Timeout during connect (likely firewall problem)
[Thu 14 Apr 2022 10:29:19 AM UTC] pid

그리고 이 재빌드 동안 10번 이렇게 반복되었습니다.

이 부분에 대해 잘 알지 못하므로, 여기서 완전히 오해하고 있을 수도 있습니다.

포트 80을 열어야 합니다. 인증서를 갱신하는 데 필요합니다. 또한, 처음 HTTP로 사이트를 접근하려는 사용자에게 HTTPS로의 영구 리다이렉트가 제공되지 않아 사이트가 정상적으로 작동하지 않을 수 있습니다.

포트 80을 사용 가능하도록 포럼을 다시 구축했고, 이제 포럼이 다시 온라인 상태입니다. 일주일 동안 기다릴 필요가 없었네요.

감사합니다!

그렇게 해결되어서 다행입니다! (Let’s Encrypt 요청이 너무 많을 때의 제 우회 방법은 포럼 URL을 변경하는 것이 아니라, 인증서 요청에 두 번째 도메인을 추가하는 것입니다. 그 도메인은 아무 도메인이든 될 수 있으므로, 본인이 소유한 다른 도메인을 포럼으로 가리키고 제가 제안한 대로 다시 구성할 수 있지만, 다행히도 그렇게 할 필요가 없었네요.)