Postfix - Opendkim - No se puede conectar al socket local

Postfix - Opendkim - No se puede conectar al socket local

Recibo errores denegados cuando postfix intenta conectarse al socket Unix para opendkim, error real:

Sep 24 15:41:43 service-a-4 postfix/cleanup[17414]: warning: connect to Milter service unix:var/run/opendkim/opendkim.sock: Permission denied

De acuerdo adocumentos postfix, postfix se ejecuta en "modo chroot" de forma predeterminada, por lo que postfix está bloqueado en /var/spool/postfix/, y de acuerdo condocumentos postfix, si se ejecuta en "modo chroot", todas las referencias de milter (socket) son relativas (a /var/spool/postfix).

Entonces mis configuraciones se ven así:

# /etc/opendkim.conf
Socket local:/var/spool/postfix/var/run/opendkim/opendkim.sock

# /etc/postfix/main.cf
smtpd_milters = unix:/var/run/opendkim/opendkim.sock

Ahora, cuando intento enviar un correo electrónico de prueba, aparece el error de permiso denegado, así que intenté algunas pruebas de permiso:

# Correctly lists the socket file
sudo su -s /bin/bash postfix -c "ls /var/spool/postfix/var/run/opendkim/opendkim.sock"

Pero cuando intento conectarme como postfix, no pasa nada:

# Does not work
sudo su -s /bin/bash postfix -c "nc -U -D /var/spool/postfix/var/run/opendkim/opendkim.sock"

# Does work (as root)
nc -U -D /var/spool/postfix/var/run/opendkim/opendkim.sock

SELinux está temporalmente deshabilitado (permisivo) mientras se depura este sitio. Y estoy reiniciando ambos procesos (opendkim y postfix) después de cada cambio de configuración.

¿Qué más me falta?

Versiones:

CentOS 6.5
Postfix v2.6.6
Opendkim v2.9

Respuesta1

Probado en mi CentOS6, ese postfix no parece realmente "chrooteado".
Mi configuración:

# /etc/opendkim.conf
Socket local:/var/run/opendkim/opendkim.sock

# /etc/postfix/main.cf
smtpd_milters = unix:/var/run/opendkim/opendkim.sock

Esto producirá: connect to Milter service unix:/var/run/opendkim/opendkim.sock: Permission denied.
Sin embargo, la máscara de usuario del socket es 002, lo que da como resultado srwxrwxr-x. opendkim:opendkim opendkim.sock.

Cambiar la umask a 000 resuelve el problema. Aún así, es mejor tener opendkim switch user:group que simplemente abrir al mundo.

Ambiente:

centos 6.5 2.6.32-573.7.1.el6.x86_64
postfix 2.6.6-6.el6_5 @updates
opendkim 2.10.3-1.el6 @epel

Respuesta2

Para aquellos que encuentran esto y el problema no se resuelve con las respuestas anteriores, mi problema fue que faltaban permisos de ejecución grupal en la carpeta de socket opendkim./var/run/opendkim/

Agregué un cron @reboot para asegurar que se establecieran los permisos del grupo. @reboot root chmod g+x /var/run/opendkim/

Corrige/parchea la siguiente advertencia para que no regrese después de un reinicio.

advertencia: conéctese al servicio Milter unix:/var/run/opendkim/opendkim.sock: permiso denegado

Una conexión TCP no fue una buena solución para mí, ya que firmo más de 100.000 correos electrónicos por hora.

Respuesta3

IIRC, postfix en centos 6 no se ejecuta chrooted en su configuración estándar. Cuando configuré opendkim desde epel vino con esta configuración:

Socket                  inet:8891@localhost

entonces habilitarlo en postfix fue solo cuestión de agregar esto a main.cf:

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2

es reiniciando ambos opendkim y postfixdespuésconfigurar correctamente las claves, TrustedHosts, SigningTable, Keytable y publicar los registros txt en dns.

O, y lo olvidé: postfix también debería ser miembro del grupo opendkim.

Respuesta4

Para que postfix y opendkim se comuniquen a través de sockets Unix, opendkim debe poder crear el socket y postfix debe poder leer el socket.

En Debian, postfix se ejecuta como chroot /var/spool/postfix, por lo que una posible configuración es:

/etc/opendkim.conf:
Socket                  local:/var/spool/postfix/opendkim/opendkim.sock

/etc/postfix/main.cf:
smtpd_milters = unix:opendkim/opendkim.sock

/var/spool/postfix/opendkim debe existir y debe ser propiedad de opendkim:

drwxr-xr-x 2 opendkim opendkim 4096 Jul 27 15:22 opendkim/

Esto debería permitir a opendkim crear el socket y a postfix acceder al directorio, pero postfix todavía no puede leer el socket:

srwxrwx--- 1 opendkim opendkim 0 Jul 27 15:22 opendkim.sock=

Puedes poner el socket en el grupo postfix:

/etc/opendkim.conf:
UserID                  opendkim:postfix

srwxrwx--- 1 opendkim postfix 0 Jul 27 15:43 opendkim.sock=

o poner postfix en el grupo opendkim:

$ usermod -a -G opendkim postfix

Cualquiera de los dos debería otorgar a Postfix los permisos correctos. Ahora postfix debería poder firmar mensajes. Las diferentes distribuciones pueden funcionar de manera ligeramente diferente, pero eso debería servirte para empezar.

En teoría, también podrías cambiar la máscara de usuario opendkim a 002, pero eso haría que el mundo del socket fuera legible, lo que probablemente sea un problema de seguridad, por lo que no lo recomendaría.

información relacionada