Інструкція

HTTPS для домашніх сервісів: Caddy, NPM і DNS-01

Reverse proxy, автоматичні сертифікати, wildcard і DNS-01 для сервісів на власному домені .app.

Перевірка джерела:

Reverse proxy приймає HTTPS на 443 і передає запит потрібному застосунку в LAN за доменним ім’ям. Сертифікати та публічний вхід зосереджені в одному місці. Панель керування самого проксі залишайте приватною.

DNS і порти

Створіть A-запис або CNAME для кожного сервісу. Перевірте публічну IPv4 та CGNAT. Для HTTP-перевірки сертифіката центру сертифікації потрібен доступ до 80; публічний сервіс працює на 443. Для DNS-01 вхідний вебпорт не потрібен, але DNS-токен повинен дозволяти потрібні зміни записів.

Caddy

Вкажіть публічне ім’я й локальну адресу застосунку в Caddyfile. Caddy сам отримує та поновлює сертифікат за виконання мережевих умов. Переконайтеся, що зберігається його каталог стану, особливо у контейнері. Відкривайте лише необхідні порти й перевіряйте журнал при невдалому випуску.

Nginx Proxy Manager

Додайте Proxy Host: домен, схему, LAN-адресу і порт застосунку. На вкладці SSL виберіть чинний сертифікат або замовте новий, а після перевірки ввімкніть HTTPS. WebSocket потрібен застосункам, які його використовують. Адміністративний порт NPM не відкривайте в інтернет.

Wildcard через DNS-01

Сертифікат *.yourname.uk.app охоплює один рівень піддоменів, але не саме yourname.uk.app і не довільну глибину. Для uk.app використовуйте ACME-hook із доступом лише до потрібних DNS-записів. DDNS-токен і API-токен для DNS-01 виконують різні задачі. Зберігайте секрет у захищеному файлі та переконайтеся, що завдання поновлення має доступ до нього.

Налаштування застосунку

Додайте проксі до списку довірених адрес застосунку, вкажіть зовнішню HTTPS-адресу, передавайте потрібні заголовки та не довіряйте всім адресам мережі без потреби. Для Nextcloud важливі довірені домени, HTTPS-схема, завантаження великих файлів і службові шляхи.

Перевірка

Перевіряйте точне ім’я сертифіката, ланцюжок, строк дії та поновлення. Перезапуск або reload сервісу після оновлення сертифіката має бути частиною автоматизації. Приклади конфігурацій наведені нижче.

Приклади конфігурації

Замініть умовні значення, інтерфейси й порти на власні. Приклади можуть стосуватися різних версій — не виконуйте несумісні варіанти разом. Не публікуйте справжні токени або приватні ключі.

ha.yourname.uk.app {
	reverse_proxy 192.168.1.20:8123
}

films.yourname.uk.app {
	reverse_proxy 192.168.1.30:8096
}

cloud.yourname.uk.app {
	reverse_proxy 192.168.1.40:11000
}
sudo systemctl reload caddy
journalctl -u caddy -f      # watch the certificates being issued
# as root on the proxy machine (sudo -i)
apt install unzip python3 curl
curl https://get.acme.sh | sh -s email=you@example.com
curl -fsSLO https://uk.app/downloads/ukapp-tools.zip && unzip ukapp-tools.zip
install -m 755 ukapp.py /usr/local/bin/ukapp
cp dns_ukapp.sh ~/.acme.sh/dnsapi/

install -m 600 /dev/null /root/.ukapp-api-token
nano /root/.ukapp-api-token          # paste the API token, save
export UKAPP_TOKEN="$(cat /root/.ukapp-api-token)"
~/.acme.sh/acme.sh --issue --server letsencrypt --dns dns_ukapp --dnssleep 300 \
  -d yourname.uk.app -d '*.yourname.uk.app'
mkdir -p /etc/caddy/certs
~/.acme.sh/acme.sh --install-cert -d yourname.uk.app --ecc \
  --fullchain-file /etc/caddy/certs/fullchain.pem \
  --key-file /etc/caddy/certs/key.pem \
  --reloadcmd "chown -R caddy:caddy /etc/caddy/certs && systemctl reload caddy"
(wildcard) {
	tls /etc/caddy/certs/fullchain.pem /etc/caddy/certs/key.pem
}

ha.yourname.uk.app {
	import wildcard
	reverse_proxy 192.168.1.20:8123
}
cat > /usr/local/sbin/acme-renew <<'EOF'
#!/bin/sh
UKAPP_TOKEN="$(cat /root/.ukapp-api-token)"
export UKAPP_TOKEN
exec /root/.acme.sh/acme.sh --cron --home /root/.acme.sh
EOF
chmod 700 /usr/local/sbin/acme-renew
~/.acme.sh/acme.sh --uninstall-cronjob
echo '17 3 * * * root /usr/local/sbin/acme-renew >/var/log/acme-renew.log 2>&1' > /etc/cron.d/acme-renew

Підсумкова перевірка

Тестуйте через мобільну мережу поза домашнім Wi-Fi. Окремо перевірте DNS, потрібний порт, чинний HTTPS-сертифікат та вхід у застосунок. Залишайте адмінпанелі приватними, встановлюйте оновлення й перевіряйте відновлення резервних копій. Контролюйте firewall IPv6 разом з IPv4. Успішний тест порту не є аудитом безпеки.

Ця локалізована редакція стисло викладає вихідну інструкцію. Команди зберігають оригінальний синтаксис. Для своєї версії звіряйтеся з документацією виробника за посиланнями.

Джерела та документація

Партнери