Llevar a la imagen los cuatro arreglos del incidente del 2026-07-29
Some checks failed
Build smtp-relay / build (push) Failing after 1m10s
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>
This commit is contained in:
parent
63dbc331a1
commit
2d7863bc01
@ -10,7 +10,12 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
netcat-openbsd \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& (getent group postdrop || groupadd -r postdrop) \
|
||||
&& usermod -aG postdrop postfix
|
||||
&& usermod -aG postdrop postfix \
|
||||
# /etc/sasldb2 es root:sasl 0640: sin este grupo, smtpd no puede abrirlo y
|
||||
# devuelve "454 4.7.0 Temporary authentication failure: generic failure"
|
||||
# (incidente 2026-07-29, fallo 3).
|
||||
&& (getent group sasl || groupadd -r sasl) \
|
||||
&& usermod -aG sasl postfix
|
||||
|
||||
COPY main.cf /etc/postfix/main.cf
|
||||
COPY master.cf /etc/postfix/master.cf
|
||||
|
||||
@ -15,6 +15,12 @@ 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
|
||||
|
||||
|
||||
10
main.cf
10
main.cf
@ -6,13 +6,21 @@ inet_interfaces = all
|
||||
inet_protocols = all
|
||||
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
|
||||
|
||||
# Logging a fichero — requiere el servicio postlog/postlogd en master.cf.
|
||||
# Sin esto Postfix escribe a syslog, que aquí no existe, y `kubectl logs` sale vacío.
|
||||
maillog_file = /var/log/postfix.log
|
||||
|
||||
# SASL authentication (Cyrus SASL / sasldb2)
|
||||
smtpd_sasl_auth_enable = yes
|
||||
smtpd_sasl_type = cyrus
|
||||
smtpd_sasl_path = smtpd
|
||||
smtpd_sasl_security_options = noanonymous
|
||||
smtpd_sasl_local_domain = $myhostname
|
||||
cyrus_sasl_config_path = /etc/postfix/sasl
|
||||
# smtpd_sasl_local_domain lo fija el entrypoint desde RELAY_AUTH_DOMAIN — la MISMA
|
||||
# variable con la que saslpasswd2 crea la entrada del sasldb. Antes estaba aquí a
|
||||
# $myhostname y divergía: el realm salía relayuser@relay.manabo.org y la entrada real
|
||||
# era relayuser@manabo.org ⇒ "454 4.7.0 Temporary authentication failure"
|
||||
# (incidente 2026-07-29, fallo 3). No lo pongas aquí: se volverían a poder separar.
|
||||
|
||||
# Only accept mail from authenticated clients
|
||||
smtpd_relay_restrictions = permit_sasl_authenticated, reject
|
||||
|
||||
54
master.cf
54
master.cf
@ -1,36 +1,52 @@
|
||||
# Postfix master process configuration
|
||||
# service type private unpriv chroot wakeup maxproc command + args
|
||||
#
|
||||
# chroot = n en TODOS los servicios (incidente 2026-07-29, fallo 4).
|
||||
# El chroot de Postfix exige poblar /var/spool/postfix/{etc,dev} en el build; sin
|
||||
# resolv.conf dentro del jail no hay resolución de MX y el correo se queda en cola
|
||||
# con "Name service error for name=<destino> type=MX" — aunque `getent hosts` dentro
|
||||
# del contenedor SÍ resuelva. En un contenedor el chroot no aporta nada: el
|
||||
# contenedor ES el jail.
|
||||
|
||||
# Port 25 — SMTP (TLS optional, SASL required to relay)
|
||||
smtp inet n - y - - smtpd
|
||||
smtp inet n - n - - smtpd
|
||||
|
||||
# Port 587 — Submission (TLS required, SASL required)
|
||||
submission inet n - y - - smtpd
|
||||
submission inet n - n - - smtpd
|
||||
-o smtpd_tls_security_level=encrypt
|
||||
-o smtpd_tls_auth_only=yes
|
||||
-o smtpd_sasl_auth_enable=yes
|
||||
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
|
||||
-o smtpd_tls_loglevel=1
|
||||
|
||||
pickup unix n - y 60 1 pickup
|
||||
cleanup unix n - y - 0 cleanup
|
||||
pickup unix n - n 60 1 pickup
|
||||
cleanup unix n - n - 0 cleanup
|
||||
qmgr unix n - n 300 1 qmgr
|
||||
rewrite unix - - y - - trivial-rewrite
|
||||
bounce unix - - y - 0 bounce
|
||||
defer unix - - y - 0 bounce
|
||||
trace unix - - y - 0 bounce
|
||||
verify unix - - y - 1 verify
|
||||
flush unix n - y 1000? 0 flush
|
||||
rewrite unix - - n - - trivial-rewrite
|
||||
bounce unix - - n - 0 bounce
|
||||
defer unix - - n - 0 bounce
|
||||
trace unix - - n - 0 bounce
|
||||
verify unix - - n - 1 verify
|
||||
flush unix n - n 1000? 0 flush
|
||||
proxymap unix - - n - - proxymap
|
||||
proxywrite unix - - n - 1 proxymap
|
||||
smtp unix - - y - - smtp
|
||||
relay unix - - y - - smtp
|
||||
showq unix n - y - - showq
|
||||
error unix - - y - - error
|
||||
retry unix - - y - - error
|
||||
discard unix - - y - - discard
|
||||
smtp unix - - n - - smtp
|
||||
relay unix - - n - - smtp
|
||||
showq unix n - n - - showq
|
||||
error unix - - n - - error
|
||||
retry unix - - n - - error
|
||||
discard unix - - n - - discard
|
||||
local unix - n n - - local
|
||||
virtual unix - n n - - virtual
|
||||
lmtp unix - - y - - lmtp
|
||||
anvil unix - - y - 1 anvil
|
||||
scache unix - - y - 1 scache
|
||||
lmtp unix - - n - - lmtp
|
||||
anvil unix - - n - 1 anvil
|
||||
scache unix - - n - 1 scache
|
||||
|
||||
# tlsmgr — sin este daemon smtpd ANUNCIA STARTTLS en el EHLO pero no puede hacerlo,
|
||||
# y devuelve "454 4.7.0 TLS not available due to local problem" (incidente, fallo 2).
|
||||
tlsmgr unix - - n 1000? 1 tlsmgr
|
||||
|
||||
# postlogd — Postfix escribe a syslog y en este contenedor no corre ninguno, así que
|
||||
# `kubectl logs` salía VACÍO y el incidente se diagnosticó a ciegas (fallo 5).
|
||||
# Junto con maillog_file en main.cf, manda el log a un fichero legible.
|
||||
postlog unix-dgram n - n - 1 postlogd
|
||||
|
||||
Loading…
Reference in New Issue
Block a user