Some checks failed
Build smtp-relay / build (push) Failing after 1m10s
El correo saliente de manabo.org lo sostenian cuatro cambios aplicados con
postconf/adduser sobre el contenedor vivo. Llevaban 70 dias fuera de git: el
primer rollout restart, reschedule o actualizacion del Image Updater los borraba
y el relay volvia a quedar mudo -- sin aviso posible, porque la alerta ES el
correo.
La lista no se copio del README: se midio. Se arranco un contenedor de la imagen
que corre hoy (digest 38ebbe1d) y se diffeo su postconf -n/-M contra el pod vivo.
Son SEIS cambios, no cuatro:
master.cf falta el daemon tlsmgr -> smtpd ANUNCIA STARTTLS en el EHLO y luego
no puede hacerlo: 454 4.7.0 TLS not available due to local problem
master.cf falta postlog/postlogd -> Postfix escribe a syslog, aqui no hay
ninguno y kubectl logs sale VACIO (el incidente se diagnostico a
ciegas)
master.cf chroot y->n en los 20 servicios
main.cf falta maillog_file = /var/log/postfix.log
main.cf smtpd_sasl_local_domain: $myhostname -> el dominio real
Dockerfile postfix no estaba en el grupo sasl -> /etc/sasldb2 es root:sasl 0640
y smtpd no puede abrirlo: 454 Temporary authentication failure
Dos matices sobre lo que estaba anotado:
El chroot no se "pobla desde el build", se DESACTIVA. En el pod vivo
/var/spool/postfix/etc sigue vacio con fecha Mar 6 2024: nadie lo poblo nunca.
Poblarlo habria metido un mecanismo jamas ejercitado y dejado fuera el que
sostiene el correo. En un contenedor el chroot no aporta nada: el contenedor ES
el jail.
El realm no se fija a pelo en main.cf sino desde RELAY_AUTH_DOMAIN en el
entrypoint, que es la misma variable con la que saslpasswd2 crea la entrada del
sasldb. Declarados aparte pudieron divergir en silencio, y eso es exactamente lo
que causo el fallo de autenticacion.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
1.2 KiB
Bash
32 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Required (from ExternalSecret)
|
|
: "${RELAY_AUTH_USER:?Missing RELAY_AUTH_USER}"
|
|
: "${RELAY_AUTH_PASS:?Missing RELAY_AUTH_PASS}"
|
|
: "${RELAY_AUTH_DOMAIN:?Missing RELAY_AUTH_DOMAIN}"
|
|
|
|
# Optional hostname override
|
|
if [ -n "${POSTFIX_MYHOSTNAME:-}" ]; then
|
|
echo "${POSTFIX_MYHOSTNAME}" > /etc/mailname
|
|
postconf -e "myhostname=${POSTFIX_MYHOSTNAME}"
|
|
fi
|
|
|
|
# Create SASL user in sasldb2
|
|
echo "${RELAY_AUTH_PASS}" | saslpasswd2 -p -c -u "${RELAY_AUTH_DOMAIN}" "${RELAY_AUTH_USER}"
|
|
|
|
# El realm SASL tiene que ser EL MISMO dominio con el que se acaba de crear la entrada
|
|
# del sasldb (arriba). Se deriva de la misma variable a propósito: si se declara aparte
|
|
# en main.cf, los dos valores pueden divergir sin que nadie lo note y la autenticación
|
|
# falla con "454 4.7.0 Temporary authentication failure" (incidente 2026-07-29).
|
|
postconf -e "smtpd_sasl_local_domain=${RELAY_AUTH_DOMAIN}"
|
|
|
|
chown root:sasl /etc/sasldb2 2>/dev/null || true
|
|
chmod 640 /etc/sasldb2 2>/dev/null || true
|
|
|
|
# Postfix spool and state directories (required inside container)
|
|
mkdir -p /var/spool/postfix /var/lib/postfix
|
|
postfix set-permissions 2>/dev/null || true
|
|
|
|
exec postfix start-fg
|