From 9bdb02514d909ee9814cbc3b495c0818812b390c Mon Sep 17 00:00:00 2001 From: boksbc Date: Fri, 17 Oct 2025 03:16:19 +0200 Subject: [PATCH] Laudende Default seite entfernen --- scripts/21-le-deploy-hook.sh | 319 +++++++++++++++++++++-------------- scripts/75-le-issue.sh | 170 ++++++++++++++----- 2 files changed, 320 insertions(+), 169 deletions(-) diff --git a/scripts/21-le-deploy-hook.sh b/scripts/21-le-deploy-hook.sh index 79691ee..18c2abd 100644 --- a/scripts/21-le-deploy-hook.sh +++ b/scripts/21-le-deploy-hook.sh @@ -4,11 +4,20 @@ source ./lib.sh log "Let's Encrypt Deploy-Hooks und Wrapper anlegen …" -# 1) Wrapper-Skript, das Symlinks setzt und Nginx reloaded +# 1) Wrapper, den Certbot bei Issue/Renew aufruft cat >/usr/local/sbin/mw-deploy.sh <<'WRAP' #!/usr/bin/env bash set -euo pipefail +# Installer-Variablen laden (UI_HOST, WEBMAIL_HOST, MAIL_HOSTNAME, optional LE_EMAIL etc.) +set +u +[ -r /etc/mailwolt/installer.env ] && . /etc/mailwolt/installer.env +set -u + +UI_HOST="${UI_HOST:-}" +WEBMAIL_HOST="${WEBMAIL_HOST:-}" +MAIL_HOSTNAME="${MAIL_HOSTNAME:-}" + link_if() { local le_base="$1" target_dir="$2" local cert="${le_base}/fullchain.pem" @@ -22,22 +31,35 @@ link_if() { echo "[+] Linked ${target_dir} -> ${le_base}" } -UI_HOST="${UI_HOST:-}" -WEBMAIL_HOST="${WEBMAIL_HOST:-}" -MAIL_HOSTNAME="${MAIL_HOSTNAME:-}" +# Nur für Domains arbeiten, die im aktuellen Lauf erneuert/ausgestellt wurden +RDOMS=" ${RENEWED_DOMAINS:-} " -[[ -n "$UI_HOST" ]] && link_if "/etc/letsencrypt/live/${UI_HOST}" "/etc/ssl/ui" -[[ -n "$WEBMAIL_HOST" ]] && link_if "/etc/letsencrypt/live/${WEBMAIL_HOST}" "/etc/ssl/webmail" -[[ -n "$MAIL_HOSTNAME" ]] && link_if "/etc/letsencrypt/live/${MAIL_HOSTNAME}" "/etc/ssl/mail" +# UI +if [[ -n "$UI_HOST" && "$RDOMS" == *" ${UI_HOST} "* ]]; then + link_if "/etc/letsencrypt/live/${UI_HOST}" "/etc/ssl/ui" +fi +# Webmail +if [[ -n "$WEBMAIL_HOST" && "$RDOMS" == *" ${WEBMAIL_HOST} "* ]]; then + link_if "/etc/letsencrypt/live/${WEBMAIL_HOST}" "/etc/ssl/webmail" +fi +# MX +if [[ -n "$MAIL_HOSTNAME" && "$RDOMS" == *" ${MAIL_HOSTNAME} "* ]]; then + link_if "/etc/letsencrypt/live/${MAIL_HOSTNAME}" "/etc/ssl/mail" +fi +# Optional: TLSA via Laravel, falls App schon vorhanden (sonst still überspringen) +if command -v php >/dev/null 2>&1 && [ -d /var/www/mailwolt ]; then + (cd /var/www/mailwolt && php artisan dns:tlsa:refresh) || true +fi + +# Nginx nur neu laden, wenn aktiv if systemctl is-active --quiet nginx; then systemctl reload nginx || true fi WRAP - chmod +x /usr/local/sbin/mw-deploy.sh -# 2) Certbot Deploy-Hook-Verzeichnis + Symlink für Renewals +# 2) Certbot-Deploy-Hooks einrichten (ruft nur den Wrapper auf) install -d -m 0755 /etc/letsencrypt/renewal-hooks/deploy cat >/etc/letsencrypt/renewal-hooks/deploy/50-mailwolt-symlinks.sh <<'HOOK' #!/usr/bin/env bash @@ -51,133 +73,182 @@ log "[✓] MailWolt Deploy-Hook eingerichtet" #set -euo pipefail #source ./lib.sh # -## ──────────────────────────────────────────────────────────────────────────── -## 21-le-deploy-hook.sh -## • legt /etc/mailwolt/installer.env an (falls fehlt) -## • erzeugt Deploy-Hooks: -## - 50-mailwolt-symlinks.sh → verlinkt LE-Zerts nach /etc/ssl/{ui,webmail,mail} -## - 60-mailwolt-tlsa.sh → aktualisiert TLSA (3 1 1) für MX bei jedem Renew -## • KEIN Reload von Postfix/Dovecot (kommt später im Installer) -## ──────────────────────────────────────────────────────────────────────────── +#log "Let's Encrypt Deploy-Hooks und Wrapper anlegen …" # -## 0) Hostnamen persistent speichern (für spätere Deploys) -#install -d -m 0755 /etc/mailwolt -#if [[ ! -f /etc/mailwolt/installer.env ]]; then -# cat >/etc/mailwolt/installer.env </etc/letsencrypt/renewal-hooks/deploy/50-mailwolt-symlinks.sh </usr/local/sbin/mw-deploy.sh <<'WRAP' ##!/usr/bin/env bash #set -euo pipefail # -#UI_LE="/etc/letsencrypt/live/${UI_HOST}" -#WEBMAIL_LE="/etc/letsencrypt/live/${WEBMAIL_HOST}" -#MX_LE="/etc/letsencrypt/live/${MAIL_HOSTNAME}" -# -#UI_SSL_DIR="/etc/ssl/ui" -#WEBMAIL_SSL_DIR="/etc/ssl/webmail" -#MAIL_SSL_DIR="/etc/ssl/mail" -# -## Zielverzeichnisse anlegen (einmalig) -#install -d -m 0755 "\$UI_SSL_DIR" "\$WEBMAIL_SSL_DIR" "\$MAIL_SSL_DIR" -# #link_if() { -# local le_base="\$1" target_dir="\$2" -# local cert="\${le_base}/fullchain.pem" -# local key="\${le_base}/privkey.pem" -# [[ -s "\$cert" && -s "\$key" ]] || return 0 -# ln -sf "\$cert" "\${target_dir}/fullchain.pem" -# ln -sf "\$key" "\${target_dir}/privkey.pem" -# chmod 644 "\${target_dir}/fullchain.pem" 2>/dev/null || true -# chmod 600 "\${target_dir}/privkey.pem" 2>/dev/null || true -# echo "[+] Linked \${target_dir} -> \${le_base}" +# local le_base="$1" target_dir="$2" +# local cert="${le_base}/fullchain.pem" +# local key="${le_base}/privkey.pem" +# [[ -s "$cert" && -s "$key" ]] || return 0 +# install -d -m 0755 "$target_dir" +# ln -sf "$cert" "${target_dir}/fullchain.pem" +# ln -sf "$key" "${target_dir}/privkey.pem" +# chmod 644 "${target_dir}/fullchain.pem" 2>/dev/null || true +# chmod 600 "${target_dir}/privkey.pem" 2>/dev/null || true +# echo "[+] Linked ${target_dir} -> ${le_base}" #} # -## Verlinken (nur wenn Host konfiguriert) -#[[ -n "${UI_HOST}" ]] && link_if "\$UI_LE" "\$UI_SSL_DIR" -#[[ -n "${WEBMAIL_HOST}" ]] && link_if "\$WEBMAIL_LE" "\$WEBMAIL_SSL_DIR" -#[[ -n "${MAIL_HOSTNAME}" ]] && link_if "\$MX_LE" "\$MAIL_SSL_DIR" +#UI_HOST="${UI_HOST:-}" +#WEBMAIL_HOST="${WEBMAIL_HOST:-}" +#MAIL_HOSTNAME="${MAIL_HOSTNAME:-}" +# +#[[ -n "$UI_HOST" ]] && link_if "/etc/letsencrypt/live/${UI_HOST}" "/etc/ssl/ui" +#[[ -n "$WEBMAIL_HOST" ]] && link_if "/etc/letsencrypt/live/${WEBMAIL_HOST}" "/etc/ssl/webmail" +#[[ -n "$MAIL_HOSTNAME" ]] && link_if "/etc/letsencrypt/live/${MAIL_HOSTNAME}" "/etc/ssl/mail" # -## Nur reloaden, wenn Nginx aktiv ist (Installer startet ihn später erst) #if systemctl is-active --quiet nginx; then # systemctl reload nginx || true #fi +#WRAP +# +#chmod +x /usr/local/sbin/mw-deploy.sh +# +## 2) Certbot Deploy-Hook-Verzeichnis + Symlink für Renewals +#install -d -m 0755 /etc/letsencrypt/renewal-hooks/deploy +#cat >/etc/letsencrypt/renewal-hooks/deploy/50-mailwolt-symlinks.sh <<'HOOK' +##!/usr/bin/env bash +#exec /usr/local/sbin/mw-deploy.sh #HOOK #chmod +x /etc/letsencrypt/renewal-hooks/deploy/50-mailwolt-symlinks.sh # -## ──────────────────────────────────────────────────────────────────────────── -## 3) 60-mailwolt-tlsa.sh -## → nutzt Laravel, falls vorhanden; sonst Fallback mit OpenSSL. -## → schreibt nur, wenn sich der Hash geändert hat (idempotent) -## ──────────────────────────────────────────────────────────────────────────── -#cat >/etc/letsencrypt/renewal-hooks/deploy/60-mailwolt-tlsa.sh <<'HOOK' -##!/usr/bin/env bash -#set -euo pipefail +#log "[✓] MailWolt Deploy-Hook eingerichtet" # -## installer.env lesen -#set +u -#[ -r /etc/mailwolt/installer.env ] && . /etc/mailwolt/installer.env -#set -u -# -#APP_ENV_VAL="${APP_ENV:-production}" -#BASE_DOMAIN_VAL="${BASE_DOMAIN:-example.com}" -# -#case "$APP_ENV_VAL" in -# local|dev|development) exit 0 ;; -#esac -#[ "$BASE_DOMAIN_VAL" = "example.com" ] && exit 0 -# -#MX_HOST="${MAIL_HOSTNAME:-}" -#SERVICE="_25._tcp" -#DNS_DIR="/etc/mailwolt/dns" -#OUT_FILE="${DNS_DIR}/${MX_HOST}.tlsa.txt" -# -## Nur reagieren, wenn MX-Zertifikat betroffen war -#case " ${RENEWED_DOMAINS:-} " in -# *" ${MX_HOST} "*) ;; -# *) exit 0 ;; -#esac -# -#CERT="${RENEWED_LINEAGE}/fullchain.pem" -#[ -s "$CERT" ] || exit 0 -# -## Wenn Laravel vorhanden ist → interner Command (DB + Datei idempotent) -#if command -v php >/dev/null 2>&1 && [ -d /var/www/mailwolt ]; then -# cd /var/www/mailwolt || exit 0 -# php artisan dns:tlsa:refresh || true -# exit 0 -#fi -# -## Fallback: nur Datei aktualisieren, wenn Hash sich ändert -#HASH="$(openssl x509 -in "$CERT" -noout -pubkey \ -# | openssl pkey -pubin -outform DER \ -# | openssl dgst -sha256 | sed 's/^.*= //')" -#NEW_LINE="${SERVICE}.${MX_HOST}. IN TLSA 3 1 1 ${HASH}" -# -#mkdir -p "$DNS_DIR" -# -#if [ -r "$OUT_FILE" ] && grep -q "IN TLSA" "$OUT_FILE"; then -# if grep -q "$HASH" "$OUT_FILE"; then -# echo "[TLSA] Unverändert – kein Update nötig." -# exit 0 -# fi -#fi -# -#echo "$NEW_LINE" > "$OUT_FILE" -#echo "[TLSA] Aktualisiert: $NEW_LINE" -#HOOK -#chmod +x /etc/letsencrypt/renewal-hooks/deploy/60-mailwolt-tlsa.sh -# -## ──────────────────────────────────────────────────────────────────────────── -#echo "[✓] Deploy-Hooks installiert." \ No newline at end of file +###!/usr/bin/env bash +##set -euo pipefail +##source ./lib.sh +## +### ──────────────────────────────────────────────────────────────────────────── +### 21-le-deploy-hook.sh +### • legt /etc/mailwolt/installer.env an (falls fehlt) +### • erzeugt Deploy-Hooks: +### - 50-mailwolt-symlinks.sh → verlinkt LE-Zerts nach /etc/ssl/{ui,webmail,mail} +### - 60-mailwolt-tlsa.sh → aktualisiert TLSA (3 1 1) für MX bei jedem Renew +### • KEIN Reload von Postfix/Dovecot (kommt später im Installer) +### ──────────────────────────────────────────────────────────────────────────── +## +### 0) Hostnamen persistent speichern (für spätere Deploys) +##install -d -m 0755 /etc/mailwolt +##if [[ ! -f /etc/mailwolt/installer.env ]]; then +## cat >/etc/mailwolt/installer.env </etc/letsencrypt/renewal-hooks/deploy/50-mailwolt-symlinks.sh </dev/null || true +## chmod 600 "\${target_dir}/privkey.pem" 2>/dev/null || true +## echo "[+] Linked \${target_dir} -> \${le_base}" +##} +## +### Verlinken (nur wenn Host konfiguriert) +##[[ -n "${UI_HOST}" ]] && link_if "\$UI_LE" "\$UI_SSL_DIR" +##[[ -n "${WEBMAIL_HOST}" ]] && link_if "\$WEBMAIL_LE" "\$WEBMAIL_SSL_DIR" +##[[ -n "${MAIL_HOSTNAME}" ]] && link_if "\$MX_LE" "\$MAIL_SSL_DIR" +## +### Nur reloaden, wenn Nginx aktiv ist (Installer startet ihn später erst) +##if systemctl is-active --quiet nginx; then +## systemctl reload nginx || true +##fi +##HOOK +##chmod +x /etc/letsencrypt/renewal-hooks/deploy/50-mailwolt-symlinks.sh +## +### ──────────────────────────────────────────────────────────────────────────── +### 3) 60-mailwolt-tlsa.sh +### → nutzt Laravel, falls vorhanden; sonst Fallback mit OpenSSL. +### → schreibt nur, wenn sich der Hash geändert hat (idempotent) +### ──────────────────────────────────────────────────────────────────────────── +##cat >/etc/letsencrypt/renewal-hooks/deploy/60-mailwolt-tlsa.sh <<'HOOK' +###!/usr/bin/env bash +##set -euo pipefail +## +### installer.env lesen +##set +u +##[ -r /etc/mailwolt/installer.env ] && . /etc/mailwolt/installer.env +##set -u +## +##APP_ENV_VAL="${APP_ENV:-production}" +##BASE_DOMAIN_VAL="${BASE_DOMAIN:-example.com}" +## +##case "$APP_ENV_VAL" in +## local|dev|development) exit 0 ;; +##esac +##[ "$BASE_DOMAIN_VAL" = "example.com" ] && exit 0 +## +##MX_HOST="${MAIL_HOSTNAME:-}" +##SERVICE="_25._tcp" +##DNS_DIR="/etc/mailwolt/dns" +##OUT_FILE="${DNS_DIR}/${MX_HOST}.tlsa.txt" +## +### Nur reagieren, wenn MX-Zertifikat betroffen war +##case " ${RENEWED_DOMAINS:-} " in +## *" ${MX_HOST} "*) ;; +## *) exit 0 ;; +##esac +## +##CERT="${RENEWED_LINEAGE}/fullchain.pem" +##[ -s "$CERT" ] || exit 0 +## +### Wenn Laravel vorhanden ist → interner Command (DB + Datei idempotent) +##if command -v php >/dev/null 2>&1 && [ -d /var/www/mailwolt ]; then +## cd /var/www/mailwolt || exit 0 +## php artisan dns:tlsa:refresh || true +## exit 0 +##fi +## +### Fallback: nur Datei aktualisieren, wenn Hash sich ändert +##HASH="$(openssl x509 -in "$CERT" -noout -pubkey \ +## | openssl pkey -pubin -outform DER \ +## | openssl dgst -sha256 | sed 's/^.*= //')" +##NEW_LINE="${SERVICE}.${MX_HOST}. IN TLSA 3 1 1 ${HASH}" +## +##mkdir -p "$DNS_DIR" +## +##if [ -r "$OUT_FILE" ] && grep -q "IN TLSA" "$OUT_FILE"; then +## if grep -q "$HASH" "$OUT_FILE"; then +## echo "[TLSA] Unverändert – kein Update nötig." +## exit 0 +## fi +##fi +## +##echo "$NEW_LINE" > "$OUT_FILE" +##echo "[TLSA] Aktualisiert: $NEW_LINE" +##HOOK +##chmod +x /etc/letsencrypt/renewal-hooks/deploy/60-mailwolt-tlsa.sh +## +### ──────────────────────────────────────────────────────────────────────────── +##echo "[✓] Deploy-Hooks installiert." \ No newline at end of file diff --git a/scripts/75-le-issue.sh b/scripts/75-le-issue.sh index 190212c..37aae44 100644 --- a/scripts/75-le-issue.sh +++ b/scripts/75-le-issue.sh @@ -5,15 +5,15 @@ source ./lib.sh ACME_WEBROOT="/var/www/letsencrypt" install -d -m 0755 "${ACME_WEBROOT}/.well-known/acme-challenge" -# Let's Encrypt: Staging optional aktivieren (keine echten Zertifikate) +# Let's Encrypt: Staging optional (für Tests) CERTBOT_EXTRA=() -LE_STAGING="${LE_STAGING:-0}" # 1 = Staging +LE_STAGING="${LE_STAGING:-0}" [[ "$LE_STAGING" = "1" ]] && CERTBOT_EXTRA+=(--test-cert) # Einheitliche LE-E-Mail mit Fallback LE_MAIL="${LE_EMAIL:-admin@${BASE_DOMAIN}}" -# DNS-Auflösung gegen unsere bekannte(n) IP(s) prüfen (nur als Warnsignal) +# DNS zeigt auf diese Kiste? resolve_ok() { local host="$1" local pats=() @@ -24,7 +24,7 @@ resolve_ok() { | grep -Eq "^($(IFS='|'; echo "${pats[*]}"))$" } -# HTTP-01 Erreichbarkeit schnell antesten (IPv4/IPv6) +# HTTP-01 erreichbar? probe_http() { local host="$1" echo test > "${ACME_WEBROOT}/.well-known/acme-challenge/_probe" @@ -32,7 +32,7 @@ probe_http() { || curl -fsS --max-time 5 -6 "http://${host}/.well-known/acme-challenge/_probe" >/dev/null } -# Ein Zertifikat für einen Host ausstellen +# Ein Zertifikat ausstellen issue() { local host="$1" [[ -z "$host" ]] && return 0 @@ -46,11 +46,10 @@ issue() { if ! probe_http "$host"; then echo "[!] ACME-HTTP-Check für ${host} fehlgeschlagen (Port 80/IPv6/Firewall/Nginx prüfen)." - # wir versuchen es trotzdem – Certbot meldet sich, falls es scheitert fi - # Für MX den Key wiederverwenden (stabiler TLSA-Hash 3 1 1) EXTRA_ARGS=() + # MX: Key wiederverwenden → stabiler TLSA-Hash (3 1 1) [[ "${host}" == "${MAIL_HOSTNAME}" ]] && EXTRA_ARGS+=(--reuse-key) certbot certonly \ @@ -60,24 +59,23 @@ issue() { "${EXTRA_ARGS[@]}" "${CERTBOT_EXTRA[@]}" || true } -# ----------------------------------------------------------------------------- -# Hauptlauf -# ----------------------------------------------------------------------------- +# ------------------- Hauptlauf ------------------- if [[ "${BASE_DOMAIN}" != "example.com" ]]; then issue "${UI_HOST:-}" issue "${WEBMAIL_HOST:-}" issue "${MAIL_HOSTNAME:-}" - # Der Deploy-Hook hat Symlinks bereits gesetzt und nginx ggf. neu geladen. - # Optional trotzdem manuell ausführen (harmlos, hilft bei exotischen Setups): - if [[ -d /etc/letsencrypt/renewal-hooks/deploy ]]; then - run-parts /etc/letsencrypt/renewal-hooks/deploy || true + # Falls Deploy-Hook erst JETZT angelegt wurde: einmal manuell ausführen + if [[ -x /usr/local/sbin/mw-deploy.sh ]]; then + /usr/local/sbin/mw-deploy.sh || true fi + + # Nginx nur neu laden, wenn aktiv if systemctl is-active --quiet nginx; then systemctl reload nginx || true fi else - echo "[i] BASE_DOMAIN=example.com – LE-Ausstellung wird übersprungen." + echo "[i] BASE_DOMAIN=example.com – LE wird übersprungen." fi ##!/usr/bin/env bash @@ -87,21 +85,26 @@ fi #ACME_WEBROOT="/var/www/letsencrypt" #install -d -m 0755 "${ACME_WEBROOT}/.well-known/acme-challenge" # +## Let's Encrypt: Staging optional aktivieren (keine echten Zertifikate) #CERTBOT_EXTRA=() -#LE_STAGING="${LE_STAGING:-0}" # 1 = Let's Encrypt Staging aktivieren +#LE_STAGING="${LE_STAGING:-0}" # 1 = Staging #[[ "$LE_STAGING" = "1" ]] && CERTBOT_EXTRA+=(--test-cert) # +## Einheitliche LE-E-Mail mit Fallback +#LE_MAIL="${LE_EMAIL:-admin@${BASE_DOMAIN}}" +# +## DNS-Auflösung gegen unsere bekannte(n) IP(s) prüfen (nur als Warnsignal) #resolve_ok() { # local host="$1" # local pats=() # [[ -n "${SERVER_PUBLIC_IPV4:-}" ]] && pats+=("${SERVER_PUBLIC_IPV4//./\\.}") # [[ -n "${SERVER_PUBLIC_IPV6:-}" ]] && pats+=("${SERVER_PUBLIC_IPV6//:/\\:}") -# # Wenn gar nichts bekannt ist, lieber nicht blockieren: # [[ ${#pats[@]} -eq 0 ]] && return 0 # getent ahosts "$host" | awk '{print $1}' | sort -u \ # | grep -Eq "^($(IFS='|'; echo "${pats[*]}"))$" #} # +## HTTP-01 Erreichbarkeit schnell antesten (IPv4/IPv6) #probe_http() { # local host="$1" # echo test > "${ACME_WEBROOT}/.well-known/acme-challenge/_probe" @@ -109,47 +112,124 @@ fi # || curl -fsS --max-time 5 -6 "http://${host}/.well-known/acme-challenge/_probe" >/dev/null #} # +## Ein Zertifikat für einen Host ausstellen #issue() { # local host="$1" +# [[ -z "$host" ]] && return 0 +# # echo "[i] Versuche LE für ${host} …" -# resolve_ok "$host" || { echo "[!] DNS zeigt (noch) nicht hierher – skip ${host}"; return 0; } +# +# if ! resolve_ok "$host"; then +# echo "[!] DNS zeigt (noch) nicht hierher – überspringe: ${host}" +# return 0 +# fi # # if ! probe_http "$host"; then # echo "[!] ACME-HTTP-Check für ${host} fehlgeschlagen (Port 80/IPv6/Firewall/Nginx prüfen)." +# # wir versuchen es trotzdem – Certbot meldet sich, falls es scheitert # fi # -# # MX: Key beibehalten (TLSA 3 1 1 bleibt stabil) +# # Für MX den Key wiederverwenden (stabiler TLSA-Hash 3 1 1) # EXTRA_ARGS=() -# [[ "$host" == "$MAIL_HOSTNAME" ]] && EXTRA_ARGS+=(--reuse-key) +# [[ "${host}" == "${MAIL_HOSTNAME}" ]] && EXTRA_ARGS+=(--reuse-key) # -# certbot certonly --agree-tos -m "$LE_EMAIL" --non-interactive \ -# --webroot -w "$ACME_WEBROOT" -d "$UI_HOST" \ -# --deploy-hook /usr/local/sbin/mw-deploy.sh -# -# certbot certonly --agree-tos -m "${LE_EMAIL:-admin@${BASE_DOMAIN}}" \ -# --non-interactive --webroot -w "$ACME_WEBROOT" -d "$host" \ +# certbot certonly \ +# --agree-tos -m "${LE_MAIL}" --non-interactive \ +# --webroot -w "${ACME_WEBROOT}" -d "${host}" \ +# --deploy-hook /usr/local/sbin/mw-deploy.sh \ # "${EXTRA_ARGS[@]}" "${CERTBOT_EXTRA[@]}" || true #} # -#if [[ "$BASE_DOMAIN" != "example.com" ]]; then -# issue "$UI_HOST" -# issue "$WEBMAIL_HOST" -# issue "$MAIL_HOSTNAME" +## ----------------------------------------------------------------------------- +## Hauptlauf +## ----------------------------------------------------------------------------- +#if [[ "${BASE_DOMAIN}" != "example.com" ]]; then +# issue "${UI_HOST:-}" +# issue "${WEBMAIL_HOST:-}" +# issue "${MAIL_HOSTNAME:-}" # -#run-parts /etc/letsencrypt/renewal-hooks/deploy || true -#systemctl reload nginx || true -# -# # TLSA direkt einmal schreiben (Hook macht es bei Renewals sowieso) -# MX_CERT="/etc/letsencrypt/live/${MAIL_HOSTNAME}/fullchain.pem" -# if [[ -s "$MX_CERT" ]]; then -# HASH="$(openssl x509 -in "$MX_CERT" -noout -pubkey \ -# | openssl pkey -pubin -outform DER \ -# | openssl dgst -sha256 | sed 's/^.*= //')" -# TLSA_LINE="_25._tcp.${MAIL_HOSTNAME}. IN TLSA 3 1 1 ${HASH}" -# install -d -m 0755 /etc/mailwolt/dns -# echo "${TLSA_LINE}" > "/etc/mailwolt/dns/${MAIL_HOSTNAME}.tlsa.txt" -# echo "[TLSA] ${TLSA_LINE}" +# # Der Deploy-Hook hat Symlinks bereits gesetzt und nginx ggf. neu geladen. +# # Optional trotzdem manuell ausführen (harmlos, hilft bei exotischen Setups): +# if [[ -d /etc/letsencrypt/renewal-hooks/deploy ]]; then +# run-parts /etc/letsencrypt/renewal-hooks/deploy || true +# fi +# if systemctl is-active --quiet nginx; then +# systemctl reload nginx || true # fi #else -# echo "[i] BASE_DOMAIN=example.com – LE wird übersprungen." -#fi \ No newline at end of file +# echo "[i] BASE_DOMAIN=example.com – LE-Ausstellung wird übersprungen." +#fi +# +###!/usr/bin/env bash +##set -euo pipefail +##source ./lib.sh +## +##ACME_WEBROOT="/var/www/letsencrypt" +##install -d -m 0755 "${ACME_WEBROOT}/.well-known/acme-challenge" +## +##CERTBOT_EXTRA=() +##LE_STAGING="${LE_STAGING:-0}" # 1 = Let's Encrypt Staging aktivieren +##[[ "$LE_STAGING" = "1" ]] && CERTBOT_EXTRA+=(--test-cert) +## +##resolve_ok() { +## local host="$1" +## local pats=() +## [[ -n "${SERVER_PUBLIC_IPV4:-}" ]] && pats+=("${SERVER_PUBLIC_IPV4//./\\.}") +## [[ -n "${SERVER_PUBLIC_IPV6:-}" ]] && pats+=("${SERVER_PUBLIC_IPV6//:/\\:}") +## # Wenn gar nichts bekannt ist, lieber nicht blockieren: +## [[ ${#pats[@]} -eq 0 ]] && return 0 +## getent ahosts "$host" | awk '{print $1}' | sort -u \ +## | grep -Eq "^($(IFS='|'; echo "${pats[*]}"))$" +##} +## +##probe_http() { +## local host="$1" +## echo test > "${ACME_WEBROOT}/.well-known/acme-challenge/_probe" +## curl -fsS --max-time 5 -4 "http://${host}/.well-known/acme-challenge/_probe" >/dev/null \ +## || curl -fsS --max-time 5 -6 "http://${host}/.well-known/acme-challenge/_probe" >/dev/null +##} +## +##issue() { +## local host="$1" +## echo "[i] Versuche LE für ${host} …" +## resolve_ok "$host" || { echo "[!] DNS zeigt (noch) nicht hierher – skip ${host}"; return 0; } +## +## if ! probe_http "$host"; then +## echo "[!] ACME-HTTP-Check für ${host} fehlgeschlagen (Port 80/IPv6/Firewall/Nginx prüfen)." +## fi +## +## # MX: Key beibehalten (TLSA 3 1 1 bleibt stabil) +## EXTRA_ARGS=() +## [[ "$host" == "$MAIL_HOSTNAME" ]] && EXTRA_ARGS+=(--reuse-key) +## +## certbot certonly --agree-tos -m "$LE_EMAIL" --non-interactive \ +## --webroot -w "$ACME_WEBROOT" -d "$UI_HOST" \ +## --deploy-hook /usr/local/sbin/mw-deploy.sh +## +## certbot certonly --agree-tos -m "${LE_EMAIL:-admin@${BASE_DOMAIN}}" \ +## --non-interactive --webroot -w "$ACME_WEBROOT" -d "$host" \ +## "${EXTRA_ARGS[@]}" "${CERTBOT_EXTRA[@]}" || true +##} +## +##if [[ "$BASE_DOMAIN" != "example.com" ]]; then +## issue "$UI_HOST" +## issue "$WEBMAIL_HOST" +## issue "$MAIL_HOSTNAME" +## +##run-parts /etc/letsencrypt/renewal-hooks/deploy || true +##systemctl reload nginx || true +## +## # TLSA direkt einmal schreiben (Hook macht es bei Renewals sowieso) +## MX_CERT="/etc/letsencrypt/live/${MAIL_HOSTNAME}/fullchain.pem" +## if [[ -s "$MX_CERT" ]]; then +## HASH="$(openssl x509 -in "$MX_CERT" -noout -pubkey \ +## | openssl pkey -pubin -outform DER \ +## | openssl dgst -sha256 | sed 's/^.*= //')" +## TLSA_LINE="_25._tcp.${MAIL_HOSTNAME}. IN TLSA 3 1 1 ${HASH}" +## install -d -m 0755 /etc/mailwolt/dns +## echo "${TLSA_LINE}" > "/etc/mailwolt/dns/${MAIL_HOSTNAME}.tlsa.txt" +## echo "[TLSA] ${TLSA_LINE}" +## fi +##else +## echo "[i] BASE_DOMAIN=example.com – LE wird übersprungen." +##fi \ No newline at end of file