diff --git a/README.md b/README.md index 84f0a91..172e543 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,50 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg На хосте с HAProxy с интернета обычно открывают только то, что слушает конфиг: **25**, **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности. +## Порт 80 и Let’s Encrypt / ACME (на будущее) + +Сейчас в `haproxy.cfg` **порт 80 не используется**. Ниже — что иметь в виду, если появится, например, **Ubuntu** во внутренней сети, на которую нужно выпускать сертификаты **Let’s Encrypt** с автообновлением. + +### Нужен ли для ACME именно порт 80? + +**Не всегда.** У Let’s Encrypt (протокол **ACME**) есть несколько типов проверки владения доменом: + +| Тип | Порт | Комментарий | +|-----|------|-------------| +| **HTTP-01** | **80** (HTTP) | Центр сертификации делает запрос вида `http://ваш-домен/.well-known/acme-challenge/...`. С **интернета** до отвечающего хоста порт **80** должен быть **доступен** (напрямую или через проброс на HAProxy). | +| **DNS-01** | не нужен 80/443 | Запись в DNS; удобно, когда **80 снаружи открывать нельзя** или сертификат для внутреннего имени. | +| **TLS-ALPN-01** | **443** | Проверка по TLS; порт 80 не обязателен. | + +Итого: при классическом **Certbot + webroot/standalone** с проверкой **HTTP-01** порт **80** действительно участвует. При **DNS-01** отдельный HTTP на 80 для выпуска не нужен. + +Автообновление обычно делают **`certbot renew`** по **systemd timer** или cron — это на стороне машины с Certbot, не в HAProxy. + +### Если позже понадобится HTTP на 80 через этот HAProxy (например, HTTP-01) + +1. На **пограничном роутере** разрешить с интернета **TCP 80** на IP хоста с HAProxy (или на тот хост, где будет отвечать ACME). +2. В **`haproxy.cfg`** добавить отдельный **HTTP**-фронтенд на **80** и отправлять только путь проверки на бэкенд с ответом ACME (остальное — редирект на HTTPS, пустой ответ или отказ — по политике). + +Черновик логики (пути и имена бэкендов подставьте свои): + +```text +frontend fe_http + bind *:80 + mode http + option httplog + acl path_acme path_beg /.well-known/acme-challenge/ + use_backend be_acme_http if path_acme + http-request deny if !path_acme + +backend be_acme_http + mode http + # Пример: веб-корень Certbot на внутренней Ubuntu (nginx/apache или certbot webroot) + server acme 192.168.x.x:80 check +``` + +Варианты без отдельного «полного» веб-сервера на бэкенде: **DNS-01** на той же Ubuntu; либо плагины/схемы, где HAProxy отдаёт challenge (требует отдельной настройки и обычно скриптов обновления). + +После добавления `bind :80` обновите раздел **«Порты на фаерволе»** выше и проверку: `sudo haproxy -c -f /etc/haproxy/haproxy.cfg`. + ## Лицензия Конфигурация поставляется как есть, без гарантий. Используйте на свой риск.