Ошибка обновления сертификата Certbot

У нас возникла проблема с обновлением SSL-сертификатов через Certbot. У нас есть несколько сайтов в директории /etc/nginx/sites-available/.

Для директории .well-known у нас настроен следующий блок location:

location ~ /\.well-known {
    auth_basic off;
    root /etc/letsencrypt;
    allow all;
}

Также в директории /etc/letsencrypt/renewal находятся конфигурации обновления для каждого сайта. Вот пример одной из них:

#renew_before_expiry = 30 days
version = 2.7.4
archive_dir = /etc/letsencrypt/archive/redacted.com
cert = /etc/letsencrypt/live/redacted.com/cert.pem
privkey = /etc/letsencrypt/live/redacted.com/privkey.pem
chain = /etc/letsencrypt/live/redacted.com/chain.pem
fullchain = /etc/letsencrypt/live/redacted.com/fullchain.pem

#Options used in the renewal process
[renewalparams]
allow_subset_of_names = True
account = 670273d7a9a89f2d3494cf6e38739b1c
rsa_key_size = 4096
post_hook = /bin/systemctl reload nginx
authenticator = webroot
webroot_path = /etc/letsencrypt,
server = https://acme-v02.api.letsencrypt.org/directory
key_type = rsa
[[webroot_map]]
redacted.com = /etc/letsencrypt

Наша версия Certbot — 2.7.4. Мы обновились с версии 1.32.0, но проблема осталась.

Мы знаем, что проблема связана с ip6tables, хотя у нас уже есть правила ACCEPT для портов 443 и 80.

При попытке доступа к файлам acme-challenge во время выполнения certbot renew --dry-run файлы успешно открываются. Значит, порты 80 и 443 не являются проблемой.

Когда мы меняем фильтр INPUT в ip6tables с DROP на ACCEPT, все сайты успешно обновляются. Однако при использовании фильтра INPUT с DROP большинство сайтов не могут обновиться и выдают следующую ошибку:

Certbot не смог аутентифицировать некоторые домены (аутентификатор: webroot). Центр сертификации сообщил о следующих проблемах:
Домен: redacted.com
Тип: connection
Детали: xxx.xxx.xxx.xxx: Загрузка https://redacted.com/.well-known/acme-challenge/EIJFF3UFqtZJCZtG_Kv9Ca7BGA5LiuBdb9JIWxXIhVg: Тайм-аут при подключении (вероятно, проблема с брандмауэром)

Мы уже пробовали минимальный набор правил, а также добавляли правила ACCEPT для портов 80 и 443 в начало цепочки INPUT, но это не помогло. Мы зашли в тупик.

Пример конфигурации nginx можно найти ниже:

server {
    listen [::]:80;
    server_name .redacted.com;
    return 301 https://redacted.com$request_uri;
}

server {
    listen [::]:443 ssl http2;
    server_name redacted.com;
    access_log /var/www/log/access/redacted.access.log main buffer=32k;
    error_log /var/www/log/error/redacted.com.error.log notice;
    limit_conn gulag 200;
    root /var/www/web/redacted.com/web;
    index index.php;

    ssl_certificate /etc/letsencrypt/live/redacted.com/fullchain.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/redacted.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/redacted.com/privkey.pem;
    include ssl_params;

    ## Standard site protection
    include		snippets/standard.conf;

    location ~ /\.well-known {
        auth_basic off;
        root /etc/letsencrypt;
        allow all;
    }

    ## Deny illegal Host headers
    if ($host !~* ^(redacted.com|redacted.com)$ ) {
        return 444;
        break;
    }

    ## Drupal configuration
    include snippets/drupal7-php7.4.conf;

    ## php handling
    include snippets/php7.4.conf;
}

Кстати, в логах nginx мы видим HTTP-коды 200 для файлов acme во время обновления через Certbot.

Я думаю, что вы получите более качественную помощь на форуме nginx или Let’s Encrypt. Это не совсем вопрос по Discourse.