Certbot: Timeout during connect (likely firewall problem) — порт 80 закрыт
Let’s Encrypt не дождался ответа от сервера на порту 80. Откройте порт 80 в фаерволе на сервере и в панели провайдера и проверьте, что A-запись ведёт на ваш сервер.
Содержание 11
Что сделать прямо сейчас
- Сверьте IP-адрес из сообщения с адресом сервера — шаг 1.
- Откройте порт 80 в фаерволе ufw — шаг 2.
- Проверьте фаервол в панели провайдера — шаг 3.
- Проверьте порт со своего компьютера — шаг 4.
- Повторите выпуск — шаг 5.
Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Что значит это сообщение
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for example.com and www.example.com
Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems:
Identifier: example.com
Type: connection
Detail: 203.0.113.10: Fetching http://example.com/.well-known/acme-challenge/kD8…: Timeout during connect (likely firewall problem)
Identifier: www.example.com
Type: connection
Detail: 203.0.113.10: Fetching http://www.example.com/.well-known/acme-challenge/x7Q…: Timeout during connect (likely firewall problem)
Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet.
Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.Timeout during connect (likely firewall problem) — «время ожидания подключения вышло (похоже, мешает фаервол)». В начале строки Detail — IP-адрес, который Let’s Encrypt нашёл в DNS. Он пытался подключиться к этому адресу на порт 80, но не получил ни ответа, ни отказа.
Так бывает в двух случаях: порт 80 закрыт фаерволом, который молча отбрасывает подключения, или по этому IP-адресу нет вашего сервера. Длинная строка из букв и цифр после acme-challenge/ у вас будет своя — здесь она сокращена до многоточия.
Вместо example.com в примерах подставьте свой домен. Адрес 203.0.113.10 в примерах — условный, у вас в сообщении будет IP-адрес из DNS вашего домена.
Шаг 1. Сверьте IP-адрес
Найдите IP-адрес сервера в панели провайдера и сравните с адресом в начале строки Detail. Если они разные, A-запись домена ведёт не туда — исправьте её по инструкции A-запись и дождитесь, пока новый адрес будет виден в DNS (Как проверить DNS-записи).
Шаг 2. Откройте порт 80 в ufw
На сервере посмотрите правила фаервола ufw:
sudo ufw statusЕсли фаервол включён, ответ будет похож на этот:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)Здесь разрешён только SSH, а порт 80 закрыт. Откройте порты 80 и 443 — второй понадобится сайту после выпуска сертификата:
sudo ufw allow 80
sudo ufw allow 443Если в списке уже есть строка 80 со словом DENY, сначала удалите её. Покажите правила с номерами и удалите нужное по номеру — вместо 3 поставьте номер из своего списка:
sudo ufw status numbered
sudo ufw delete 3ufw спросит подтверждение — напечатайте y и нажмите Enter. Если sudo ufw status отвечает Status: inactive, фаервол ufw выключен и ничего не закрывает — переходите к шагу 3. Как настроить фаервол с нуля, разобрано в статье Как настроить VPS с нуля: фаервол.
Шаг 3. Проверьте фаервол в панели провайдера
У части провайдеров есть свой фаервол — в панели управления, отдельно от сервера. Он стоит перед сервером, и ufw о нём не знает. Откройте карточку сервера в панели и найдите раздел с правилами фаервола или сетевой защиты. Если там есть правила для входящих подключений, добавьте разрешение для TCP-портов 80 и 443. Если такого раздела нет — этот шаг пропустите.
Шаг 4. Проверьте порт с другого компьютера
Проверьте порт не с сервера, а со своего компьютера — так, как к нему подключается Let’s Encrypt. Откройте терминал (Как открыть терминал) и выполните:
curl -I http://example.com/В Windows вводите curl в командной строке, а не в PowerShell — почему, сказано в разделе Как открыть терминал в Windows.
Если порт открыт, первая строка ответа начнётся с HTTP/1.1 и кода, например HTTP/1.1 200 OK или HTTP/1.1 301 Moved Permanently. Если команда долго молчит и заканчивается ошибкой, порт по-прежнему закрыт — вернитесь к шагам 2 и 3.
Шаг 5. Повторите выпуск
Сначала проверьте на тестовом сервере Let’s Encrypt, чтобы не тратить лимит неудачных проверок:
sudo certbot certonly --nginx --dry-run -d example.com -d www.example.comЕсли в конце строка The dry run was successful., выпустите сертификат:
sudo certbot --nginx -d example.com -d www.example.comКак проверить
curl -I http://example.com/ с вашего компьютера отвечает строкой с HTTP/1.1, а Certbot с ключом --dry-run пишет The dry run was successful.
Похожие ошибки
| Сообщение | Чем отличается |
|---|---|
| Connection refused | Сервер отвечает сразу, но отказом: на порту 80 никто не слушает |
Timeout after connect (your server may be slow or overloaded) | Подключиться удалось, но сервер не ответил вовремя. Посмотрите журнал ошибок nginx — где он |
| DNS problem: NXDOMAIN | До подключения не дошло: у имени нет записи в DNS |
| ERR_CONNECTION_TIMED_OUT | То же самое, но в браузере |
Тексты сообщений сверены с исходным кодом Certbot 5.8.0 — эта версия ставится через snap, как в инструкции Бесплатный SSL-сертификат, — и сервера Let’s Encrypt. В Certbot 2.9.0 из пакетов Ubuntu 24.04 вместо Identifier: стоит Domain:, а некоторые строки могут немного отличаться.
Источники
- Исходный код сервера Let’s Encrypt (Boulder): va.go — текст Timeout during connect (likely firewall problem).
- Исходный код сервера Let’s Encrypt (Boulder): http.go — адрес …/.well-known/acme-challenge/ и порт 80.
- man ufw — правила deny и reject.
- Исходный код Certbot 5.8.0: auth_handler.py — как Certbot показывает неудачную проверку.
- Исходный код Certbot 2.9.0: auth_handler.py — эта версия стоит в пакетах Ubuntu 24.04.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026