Форум упал, затем ошибка обновления сертификата, связанная с конфигурацией брандмауэра?

Привет!

Мой форум упал сегодня ночью, между 10 и 17 часами назад (точно не скажу). Страницы, по-видимому, загружали кэшированные версии, и многие ресурсы не загрузились.

Я остановил и перезапустил контейнер, но это не помогло.

Я пересобрал его (один раз), и теперь получаю сообщение о просроченном сертификате.

https://www.ssllabs.com/ssltest/analyze.html?d=unicyclist.com показывает:
Действителен до Ср, 13 апр 2022 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
}

Я внимательно изучил лог и заметил, что ранее многократно, раз в день в марте (этого было недостаточно для срабатывания ограничения скорости Let’s Encrypt, судя по моим логам):

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

В начале марта я настроил эти правила брандмауэра на Hetzner:

Итак, у меня есть несколько вопросов:

  1. Могли ли эти правила брандмауэра Hetzner стать причиной проблемы? Если да, то каких правил не хватало, что вызвало эту проблему? Кстати, я только что удалил все эти правила.

  2. Почему я получил сообщение unicyclist.com:Verify error:Fetching […] Timeout during connect (likely firewall problem) 10 раз за одну пересборку сегодня утром? Может ли одна пересборка вызвать срабатывание ограничения скорости Let’s Encrypt? :thinking:

  3. Поскольку я достиг ограничения скорости, это означает, что мой форум фактически недоступен в течение недели и я ничего не могу с этим поделать? :grimacing:

Решение, которое я применял, — добавить второе имя хоста (например, www, но это может быть что угодно), как предлагается в статье Настройка Let’s Encrypt с несколькими доменами. Однако, по-моему, в шаблоны внесли некоторые изменения, из-за которых эти инструкции перестали работать. То, что я сделал для другого сайта пару дней назад, — отредактировал файл /etc/runit/1.d/letsencrypt и добавил -d newdomain в тех местах, где указано -d realdomain. Затем убедитесь, что новый домен указывает на ваш сервер, и выполните /etc/runit/1.d/letsencrypt.

Возможно, также потребуется открыть порт 80. Насколько я понимаю, он не нужен, если есть действительный сертификат, но у вас его пока нет, поэтому, думаю, необходимо чтение через порт 80 для инициализации процесса. Никаких недостатков в открытом порте 80 нет: некоторые пользователи могут пытаться зайти по адресу http://, и если порт 80 открыт, их можно перенаправить на https.

Я займусь обновлением этих инструкций, но завтра подъедет грузовик для переезда, и мне действительно нужно готовиться к этому, а не писать на meta. :slight_smile:

Спасибо за ваш ответ!
Но потребует ли использование нового домена/поддомена повторную пересборку всех постов?
У меня 1,6 млн постов. Повторная пересборка также вызовет ограничение скорости встраивания YouTube, с чем я уже сталкивался при импорте этого форума из vBulletin.

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

Я действительно видел на Challenge Types - Let's Encrypt, что порт 80 должен быть доступен для некоторых «проверок» (я не знаю, какой тип проверки используется при обновлении сертификата в Discourse).


Кроме того, мне очень интересно узнать немного больше о том, что, похоже, является 10 неудачными проверками (равно ли это одному запросу сертификата?) во время одной пересборки.

Возможно, официальный ответ по этому вопросу был бы полезен?

Потому что если по какой-то причине это вызывает больше запросов сертификатов, чем разрешено лимитами скорости 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 форума, а просто добавляете второй домен в запрос сертификата. Это может быть любой другой домен, поэтому вы можете перенаправить какой-либо принадлежащий вам домен на форум и пересобрать его, как я предлагал, но, к счастью, вам это не понадобилось.)