Порт 443 закрыт: что делать
Что означает «порт 443 закрыт»
Порт 443 — стандартный порт HTTPS. Когда он «закрыт», браузер не может установить защищённое соединение, и пользователь видит одну из классических ошибок: «Не удаётся получить доступ к сайту», «Сайт не отвечает», «ERR_CONNECTION_REFUSED», «ERR_CONNECTION_TIMED_OUT», «ERR_SSL_PROTOCOL_ERROR». Само сообщение редко указывает на настоящую причину: за одной и той же надписью стоят и файрвол, и остановленный веб-сервер, и неправильно настроенный прокси, и блокировка на стороне хостера.
Важно понимать: «порт 443 закрыт» — это не диагноз, а симптом. За ним скрываются минимум четыре разных состояния сети, и лечатся они по-разному. Прежде чем что-то менять, нужно понять, какое именно из них ваше. Быстрый способ — внешняя проверка порта 443: она покажет, открыт ли порт снаружи, и это сразу отсекает половину гипотез.

Четыре разных состояния: «закрыт», «отказ», «таймаут», «фильтр»
Ошибка «порт 443 закрыт» может означать четыре принципиально разные вещи. Различить их критично: от этого зависит, идти ли настраивать файрвол или проверять веб-сервер.
| Симптом | Что технически происходит | Вероятная причина |
|---|---|---|
Мгновенный отказ, Connection refused |
сервер прислал TCP RST | на порту 443 никто не слушает либо файрвол настроен на reject |
Долгое ожидание, Connection timed out |
пакеты молча отброшены | файрвол с политикой DROP, блокировка у провайдера или хостера |
| Соединение есть, но TLS-ошибка | порт открыт, но рукопожатие падает | не настроен сертификат, сломан SNI, старый протокол |
| Соединение есть, ответ пустой или странный | на порту 443 слушает чужая служба | порт занят другим процессом, перепутаны конфиги |
| Изнутри сервера всё работает, снаружи нет | фильтрация до сервера | облачный firewall, security group, блокировка IP |
Разница между refused и timed out — ключевая. Connection refused означает, что сеть до сервера работает и кто-то активно отклонил соединение. Timed out означает, что пакеты уходят в пустоту: их кто-то молча выбрасывает. Первое чаще указывает на веб-сервер, второе — на файрвол и хостинг.

Быстрая диагностика: nc, telnet, curl с разбором вывода
Начните с самой простой проверки — отвечает ли порт вообще, без всякого HTTPS.
Проверка порта через nc
nc -vz example.com 443
Разбор флагов и вывода:
-v— подробный режим, покажет результат попытки;-z— zero-I/O: только проверить соединение, ничего не передавать;- успех выглядит так:
Connection to example.com 443 port [tcp/https] succeeded!; - отказ:
nc: connect to example.com port 443 (tcp) failed: Connection refused— порт закрыт явно, RST; - зависание без ответа и сообщение о таймауте (или подвисание до срабатывания
-w) — трафик фильтруется.
Полезно ограничить ожидание, чтобы не ждать минуты:
nc -vz -w 5 example.com 443
Флаг -w 5 задаёт таймаут 5 секунд. Если команда упирается в таймаут — с порта нет ответа вовсе, это почерк DROP-правила или блокировки у провайдера.
Проверка через telnet
telnet example.com 443
Разбор: telnet пытается открыть TCP-соединение на указанный порт.
Connected to example.com.— порт открыт, TCP-соединение проходит;Connection refused— порт закрыт, сервер активно отказал;Connection timed out— пакеты отбрасываются;Could not resolve host— проблема не в порте, а в DNS; проверьте записи в проверке DNS;- пустой экран после
Connected to ...— нормально: вы соединились с HTTPS-портом «голым» telnet, но TLS-рукопожатие не выполнили, поэтому сервер молчит.
Если telnet на вашей машине не установлен, nc полностью его заменяет.
Проверка «как браузер» через curl
curl -vI https://example.com/ 2>&1 | head -30
Разбор строк вывода:
Trying 203.0.113.10:443...— клиент начал TCP-соединение, здесь виден IP, который реально отвечает (важно: если IP не ваш, где-то висит прокси или старая DNS-запись);Connected to example.com (203.0.113.10) port 443— TCP прошёл, порт открыт;connection timed outна этом месте — порт не отвечает, дальше идти некуда;Connection refused— RST, никто не слушает на 443;TLS handshake, Client helloи далееSSL certificate problemилиerror:1408F10B— порт открыт, но TLS не настроен;- строка
subject:иissuer:— сертификат получен, соединение работает; < HTTP/1.1 200 OK— сервер ответил, HTTPS работает.
Полезно разделить проверку соединения и проверку TLS:
curl -sS -o /dev/null -w "connect=%{time_connect} tls=%{time_appconnect} code=%{http_code}\n" https://example.com/
- если команда падает с ошибкой соединения — проблема на уровне TCP/фильтра;
- если соединение есть, а
time_appconnectравен нулю или команда падает на TLS — проблема в сертификате или конфиге HTTPS; - если всё заполнено и
code=200— порт и HTTPS работают, причина «недоступности» была в другом.
Отдельная проверка самого TLS-слоя:
openssl s_client -connect example.com:443 -servername example.com </dev/null
Разбор: -servername передаёт SNI — критично, если на одном IP несколько сайтов. В выводе смотрите строку Verify return code: 0 (ok) — цепочка валидна, любое другое значение указывает на проблему с сертификатом, которую стоит разобрать в проверке SSL-сертификата. Флаг </dev/null нужен, чтобы команда завершилась, а не ждала ввода.

Диагностика файрвола: откуда берётся «закрытый» порт
Если nc даёт таймаут или отказ, а веб-сервер по конфигу должен слушать 443, проверяем сначала сам процесс, затем файрвол.
Проверить, слушает ли кто-то 443-й порт:
sudo ss -tlnp | grep ':443'
Пояснение: -t — только TCP, -l — слушающие сокеты, -n — не разворачивать номера в имена, -p — показать процесс. Нормальный вывод содержит строку вроде LISTEN 0 511 0.0.0.0:443 users:(("nginx",pid=1234,fd=6)). Если строки нет вообще — проблема не в файрволе, а в том, что веб-сервер не слушает 443. Обратите внимание на адрес: 127.0.0.1:443 означает, что сервер слушает только локально и снаружи недоступен — классическая причина «порт закрыт».
Если процесс есть, но снаружи порт недоступен, смотрим правила.
Для nftables:
sudo nft list ruleset | grep -A5 -E 'chain (input|INPUT)'
Для старого iptables:
sudo iptables -L INPUT -n --line-numbers
Для ufw:
sudo ufw status verbose
Разбор: ищите правило DROP или REJECT без исключения для порта 443, а также политику по умолчанию (policy DROP). Для ufw наличие строки 443/tcp ALLOW означает, что порт разрешён; отсутствие строки при включённом ufw (Status: active) — вероятная причина проблемы. Разрешить порт можно так:
sudo ufw allow 443/tcp
Для firewalld:
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
Дополнительно проверьте, не блокирует ли трафик fail2ban или похожий механизм защиты: он может занести ваш IP в блокировку после серии неудачных попыток, и тогда «порт закрыт» будет только для вас. Репутацию адреса стоит проверить отдельно, чтобы исключить блокировку именно вашего IP.
Диагностика на стороне хостинга и облака
Очень частая история: на сервере всё настроено, ss показывает слушающий 443, локальный curl работает, а снаружи — таймаут. Значит, блокировка находится не на вашем сервере, а на уровне инфраструктуры, до него.
Что проверять по порядку:
- Правила облачного firewall / security group. У облачных провайдеров порт может быть закрыт на уровне виртуальной сети, независимо от правил внутри ВМ. Проверьте inbound-правила для TCP 443 и адрес источника (
0.0.0.0/0, если сайт должен быть публичным). - Файрвол в панели управления хостингом. Многие панели имеют свой отдельный «сетевой экран» с собственным набором правил, который перекрывает серверный.
- Прокси и CDN перед сервером. Если трафик идёт через промежуточный слой, порт 443 может быть открыт на прокси, но закрыт до бэкенда, либо наоборот. Проверьте, какой IP отдаёт DNS, и совпадает ли он с вашим сервером: если нет, проблема в конфигурации прокси.
- Блокировка у провайдера. Бывает, что хостер приостанавливает сервис (например, из-за жалобы или неоплаты) и фильтрует порты. Признак — сайт не отвечает из всех внешних точек, включая независимые проверки.
- Блокировка на стороне клиента или его провайдера. Если порт открыт для всех, кроме вас, дело в вашей сети, корпоративном прокси или региональной фильтрации. Сравните с внешней проверкой: она покажет картину «снаружи».
- Порты в конфигурации приложения. Обратный прокси может слушать 443, а приложение — другой порт, и падать при передаче. Проверьте, что upstream в конфиге указан верно.
- Домен и DNS. Если A-запись указывает на старый или чужой IP, вы будете стучаться «не туда» и получать отказ. Сверьте записи в DNS и проверьте, на какой адрес указывает домен.
Полезный приём для локализации: проверьте порт изнутри сервера на локальный адрес, затем на внешний IP, затем с внешней точки. Это даёт три разных ответа и сразу указывает слой:
curl -sS -o /dev/null -w "local %{http_code}\n" https://127.0.0.1/ -k --resolve example.com:443:127.0.0.1
curl -sS -o /dev/null -w "public %{http_code}\n" https://example.com/ || echo "public: не отвечает"
Пояснение: первый вызов идёт напрямую на локальный адрес и минует сеть — если он успешен, значит, веб-сервер и TLS живы, а проблема во внешнем доступе. Второй обращается к публичному имени, как обычный пользователь. Разница между «local 200» и «public: не отвечает» с высокой вероятностью означает файрвол, security group или блокировку у провайдера.
Таблица «симптом → причина → решение»
| Симптом | Причина | Решение |
|---|---|---|
Connection refused мгновенно |
веб-сервер не слушает 443 или файрвол с reject |
проверить ss -tlnp | grep :443, запустить/починить HTTPS-конфиг |
Connection timed out |
DROP-правило, security group, блокировка провайдера |
открыть 443 в файрволе и облачных правилах, уточнить статус у хостера |
Снаружи нет, изнутри 200 |
фильтрация до сервера, локальный bind | исправить bind на 0.0.0.0, правила cloud firewall |
| Порт открыт, но ошибка TLS | нет сертификата, сломан SNI, старый протокол | проверить цепочку сертификата, перевыпустить его |
| «Порт закрыт» только у вас | блокировка IP, корпоративный прокси, провайдер | проверить репутацию IP, повторить с внешней точки |
| Работает HTTPS, но часть страниц не отдаётся | ошибка прокси или бэкенда | разобрать логи прокси, посмотреть коды ответа снаружи |
| Порт закрывается время от времени | лимиты, падение процесса приложения, перезапуски | проверить логи, метрики и стабильность хоста |
| Сайт недоступен, но 443 открыт | проблема не в порте | смотреть HTTP-статусы, редиректы и SSL; проверка SSL и срока действия сертификата |
Отдельно про HTTP: если у вас «закрыт» 80-й порт, логика диагностики та же, но контекст другой — разбор в статье Порт 80 закрыт: что делать.
Частные случаи: Nginx, Apache, Docker, IPv6
Nginx
Убедитесь, что есть блок server с listen 443 ssl; и корректно указаны ssl_certificate и ssl_certificate_key. Частая ошибка — listen 443 без ssl, из-за чего на порту служит HTTP-сервер, а браузер ждёт TLS и получает ошибку. Проверить конфиг до перезапуска:
sudo nginx -t
sudo systemctl reload nginx
Apache
Порт 443 обслуживается модулем SSL. Проверьте, включён ли он, и что виртуальный хост с SSLEngine on существует:
sudo apachectl configtest
sudo a2enmod ssl
Docker и контейнеры
Если приложение в контейнере, проверьте публикацию порта: -p 443:443. Без неё порт слушает только внутри контейнера, и снаружи он «закрыт», хотя сервис работает. Проверьте проброс:
docker ps --format '{{.Names}} {{.Ports}}'
IPv6
Если у домена есть AAAA-запись, но IPv6 на сервере не настроен или не слушается, часть пользователей будет получать «недоступно», тогда как остальные видят нормальную работу. Уберите лишнюю AAAA-запись или настройте прослушивание IPv6 — проверьте записи в проверке DNS.
Что проверить после восстановления
Порт открылся — не заканчивайте на этом. Пройдите короткий чек-лист:
- HTTPS отвечает с кодом 200 из внешней точки, а не только с вашей машины;
- сертификат валиден, цепочка полная, срок не истекает на днях;
- редирект с HTTP на HTTPS работает;
- сайт одинаково доступен по IPv4 и IPv6;
- таймауты и ошибки не повторяются — это стоит подтвердить наблюдением, а не разовым замером.
Для регулярного контроля доступности портов и сервисов удобно опираться на внешние проверки: они видят ровно то, что видят ваши пользователи. Начните с проверки порта, а SSL, DNS и общий статус сайта держите под наблюдением в UptimeChecker, чтобы узнавать о закрытом порте из своих метрик, а не из жалоб клиентов.