README: port 80, ACME challenges (HTTP-01/DNS/TLS-ALPN), future HAProxy sketch

This commit is contained in:
PTah
2026-04-11 20:03:41 +10:00
parent 81e5819d0e
commit e739ead995
+44
View File
@@ -209,6 +209,50 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg
На хосте с HAProxy с интернета обычно открывают только то, что слушает конфиг: **25**, **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности.
## Порт 80 и Lets 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`.
## Лицензия
Конфигурация поставляется как есть, без гарантий. Используйте на свой риск.