No se puede cambiar el socket OpenDKIM en Debian stretch en / etc / default / opendkim


18

Estoy tratando de configurar opendkim en el estiramiento de Debian pero no puedo cambiar el socket. Quiero cambiar el zócalo para /var/spool/postfix/opendkim/opendkim.sockpoder usarlo con postfix.

He agregado Socket local:/var/spool/postfix/opendkim/opendkim.socka/etc/opendkim.conf

y también intenté agregar SOCKET="local:/var/spool/postfix/opendkim/opendkim.socka /etc/default/opendkim(que tuve que crear).

No importa lo que cambie o con qué frecuencia reinicie opendkim, siempre se usa /var/run/opendkim/opendkim.sockcomo socket.

➜  ~ netstat -a | fgrep LISTEN | grep open
unix  2      [ ACC ]     STREAM     LISTENING     5534128  /var/run/opendkim/opendkim.sock

➜  ~ sudo systemctl status opendkim.service

● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter
   Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-04-30 12:41:54 CEST; 5min ago
     Docs: man:opendkim(8)
           man:opendkim.conf(5)
           man:opendkim-genkey(8)
           man:opendkim-genzone(8)
           man:opendkim-testadsp(8)
           man:opendkim-testkey
           http://www.opendkim.org/docs.html
  Process: 25246 ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock (code=exited, status=0/SUCCESS)
 Main PID: 25248 (opendkim)
    Tasks: 7 (limit: 4915)
   CGroup: /system.slice/opendkim.service
           ├─25248 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
           └─25249 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

Apr 30 12:41:54 vServer systemd[1]: Starting OpenDKIM DomainKeys Identified Mail (DKIM) Milter...
Apr 30 12:41:54 vServer systemd[1]: Started OpenDKIM DomainKeys Identified Mail (DKIM) Milter.
Apr 30 12:41:54 vServer opendkim[25249]: OpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)

¿Qué estoy haciendo mal? (Supongo que es mi error ya que no puedo encontrar a nadie más con el mismo problema)

ACTUALIZAR:

Cambiar /etc/default/opendkima SOCKET="inet:8891@localhost"y el cambio de la configuración de sufijo para utilizar estos resultados de socket eninet:localhost:8891: Connection refused

ACTUALIZACIÓN2:

Ahora he reemplazado con el archivo incluido en el paquete de estiramiento de Debian:

# Command-line options specified here will override the contents of                                                                                                         
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.                                                                                                       
#DAEMON_OPTS=""                                                                                                                                                             
# Change to /var/spool/postfix/var/run/opendkim to use a Unix socket with                                                                                                   
# postfix in a chroot:                                                                                                                                                      
RUNDIR=/var/spool/postfix/var/run/opendkim                                                                                                                                  
#RUNDIR=/var/run/opendkim                                                                                                                                                   
#                                                                                                                                                                           
# Uncomment to specify an alternate socket                                                                                                                                  
# Note that setting this will override any Socket value in opendkim.conf                                                                                                    
# default:                                                                                                                                                                  
SOCKET=local:$RUNDIR/opendkim.sock                                                                                                                                          
# listen on all interfaces on port 54321:                                                                                                                                   
#SOCKET=inet:54321                                                                                                                                                          
# listen on loopback on port 12345:                                                                                                                                         
#SOCKET=inet:12345@localhost                                                                                                                                                
# listen on 192.0.2.1 on port 12345:                                                                                                                                        
#SOCKET=inet:12345@192.0.2.1                                                                                                                                                
USER=opendkim                                                                                                                                                               
GROUP=opendkim                                                                                                                                                              
PIDFILE=$RUNDIR/$NAME.pid                                                                                                                                                   
EXTRAAFTER=   

Incluye las siguientes líneas donde se decide el zócalo:

if [ -f /etc/opendkim.conf ]; then                                                                                                                                          
    CONFIG_SOCKET=`awk '$1 == "Socket" { print $2 }' /etc/opendkim.conf`                                                                                                    
fi                                                                                                                                                                          

# This can be set via Socket option in config file, so it's not required                                                                                                    
if [ -n "$SOCKET" -a -z "$CONFIG_SOCKET" ]; then                                                                                                                            
    DAEMON_OPTS="-p $SOCKET $DAEMON_OPTS"                                                                                                                                   
fi

"para que pueda usarlo con postfix" ¿Está seguro de que necesita esto para que funcione con Postfix?
Miloš Đakonović

@Miloshio pensé que sí, ya que postfix se ejecuta en un chroot (Según el tutorial que estoy siguiendo )
lw1.at

@Miloshio postfix afirma connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directoryincluso que existe, ya que se ha reducido a/var/spool/postfix/
lw1.at

Parece que no está chrooteado. Por favor, ¿puedes comprobar de nuevo? Sus caminos debe ser similar /var/spool/postfix/var/run...si es
Miloš Đakonović

En cualquier escenario, usaría en inetlugar de local. Tal vez, si no está depurando el servicio, intente implementar: digitalocean.com/community/tutorials/…
Miloš Đakonović

Respuestas:


31

Finalmente encontré la solución.

El /etc/init.d/opendkimno parece hacer nada. Pero en su lugar /lib/systemd/system/opendkim.servicese utiliza el archivo de servicio que tenía el socket incorrecto codificado.

Pero el paquete debian también parece incluir un bash que genera el servicio systemd correcto.

Entonces después de correr

/lib/opendkim/opendkim.service.generate
systemctl daemon-reload
service opendkim restart

y reiniciando opendkim, el archivo de socket aparece en el lugar esperado, que se puede verificar llamando a:

tail /var/log/mail.log | grep OpenDKIM

Actualización: Parece que hay un informe de errores de Debian sobre este problema: # 861169


2

No tengo suficiente reputación para comentar y quería reconocer que después de horas de buscar una solución al mensaje de error 'Conexión rechazada' de OpenDKim-Postfix, la /lib/systemd/system/opendkim.serviceedición proporcionada por LocutusBE funcionó con Ubuntu 17.04:

warning: connect to Milter service inet:localhost:8891: Connection refused

editar /lib/systemd/system/opendkim.service

cambio:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

a:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:12301@localhost

systemctl daemon-reload

y

systemctl opendkim restart

Antes de intentar la edición, agregué el usuario de postfix al grupo opendkim e intenté /lib/opendkim/opendkim.service.generatesegún la solución de Lukas Winkler . El error de conexión rechazada persistió hasta que se agregó el número de puerto /lib/systemd/system/opendkim.service.

Para actualizar /lib/systemd/system/opendkim.service, utilicé el puerto 8891 para Ubuntu y comenté la línea original de ExecStart para fines de prueba, luego agregué una nueva línea con el puerto #:

/lib/systemd/system/opendkim.service (Service category):

    [Service]
    Type=forking
    PIDFile=/var/run/opendkim/opendkim.pid
    User=opendkim
    UMask=0007
    #ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
    ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:8891@localhost
    Restart=on-failure
    ExecReload=/bin/kill -USR1 $MAINPID

El número de puerto correspondiente se especificó adicionalmente en /etc/opendkim.conf:

Socket                  inet:8891@localhost

Y /etc/postfix/main.cf:

smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

Después de reiniciar el systemctl daemon, opendkim y postfix, el correo saliente se firmó sin problemas y el registro de correo mostró "campo de firma DKIM agregado".

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

No hubo problemas de conexión al configurar OpenDkim con Centos7 recientemente, por lo que aparentemente en este caso estaba relacionado con Ubuntu. Gracias a Lukas Winkler por publicar la pregunta y a quienes compartieron sus soluciones.


1

Para utilizar el inetsocket, debe especificar:

SOCKET="inet:12301@localhost" a /etc/default/opendkim

Además, debe cambiar la configuración en Postfix en consecuencia:

en /etc/postfix/main.cf agregar:

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

si no puede establecer la localruta deseada, le sugiero que:

  • tomar un registro de mail, syslogo opendkimen /var/logy comprobar

  • compruebe la /etc/init.d/opendkimsecuencia de comandos e inspeccione si el archivo de calcetines está establecido en un valor

  • intente ir con el valor predeterminado local:/var/run/opendkim/opendkim.sock, y especifique smtpd_milters = local:/var/run/opendkim/opendkim.socky non_smtpd_milters = local:/var/run/opendkim/opendkim.socken/etc/postfix/main.cf


Ahora he cambiado la configuración para que sea exactamente igual a la suya (mismo puerto) pero todavía obtengowarning: connect to Milter service inet:localhost:12301: Connection refused
lw1.at

¿Intentaste reiniciar ambos servicios después de editar?
Miloš Đakonović

Lo hice y ahora también reinicié. Cuando miro mail.log siempre veo la siguiente líneaOpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
lw1.at

¿Ves esa línea incluso con SOCKET="inet:12301@localhostset to opendkim conf file?
Miloš Đakonović

1
opendkim ignora la configuración de socket / etc / default / opendkim - por ahora tenemos que cambiar /etc/opendkim.conf
SledgehammerPL

1

Esto funcionó para mí:

editar /lib/systemd/system/opendkim.service

cambio:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

a:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:12301@localhost

systemctl daemon-reload

y

systemctl opendkim restart

Este es exactamente el cambio que realiza el script /lib/opendkim/opendkim.service.generate.
lw1.at

Muchas gracias, esto lo solucionó en Ubuntu 16.04.3 LTS que falta opendkim.service.generate.
Ivan Mir

0

OpenDKIM funcionó hasta que actualicé mi servidor. OpenDKIM no se iniciará y no se ejecutará ningún socket para que el Milter se conecte. En /var/log/syslogpude ver que opendkim falló al intentar crear un socket en el lugar diferente que antes de la actualización. Traté de editar la configuración de socket en /etc/opendkim.conf, /etc/default/opendkimy /lib/systemd/system/opendkim.servicepero no sirvió de nada. Resulta que la información estuvo frente a mí todo el tiempo:

opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter 
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)   
Drop-In: /etc/systemd/system/opendkim.service.d
           └─override.conf    
Active: active (running) since Sat 2017-10-14 16:03:45 CEST; 4h 44min ago

Noté que la configuración fue sobrescrita por el archivo "override.conf" y editada para que estuviera alineada con mi /etc/postfix/main.cf(se ejecuta como chroot):

smtpd_milters = local:/opendkim/opendkim.sock
non_smtpd_milters = local:/opendkim/opendkim.sock

Editar /etc/systemd/system/opendkim.service.d/override.conf

[Service]
PIDFile=/var/spool/postfix/opendkim/opendkim.pid
ExecStart=
ExecStart=/usr/sbin/opendkim -P /var/spool/postfix/opendkim/opendkim.pid -p local:/var/spool/postfix/opendkim/opendkim.sock

Y finalmente reiniciando el demonio y opendkim:

systemctl daemon-reload && systemctl restart opendkim

0

Acabo de renombrar /etc/systemd/system/opendkim.service.d/override.conf a /etc/systemd/system/opendkim.service.d/override.conf.old para que no anule los parámetros de ExecStart.

Todo funciona bien seleccionando la configuración de /etc/opendkim.conf


0

Mi servicio opendkim no se activó en el puerto 8100 después de la instalación y las soluciones anteriores no ayudaron. Así que lo intenté

/lib/opendkim/opendkim.service.generate

con dicho

-bash: /lib/opendkim/opendkim.service.generate: No such file or directory

así que miré el archivo de servicio

cat /lib/systemd/system/opendkim.service
# If you are using OpenDKIM with SQL datasets it might be necessary to start OpenDKIM after the database servers.
# For example, if using both MariaDB and PostgreSQL, change "After=" in the "[Unit]" section to:
# After=network.target nss-lookup.target syslog.target mariadb.service postgresql.service

[Unit]
Description=DomainKeys Identified Mail (DKIM) Milter
Documentation=man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html
After=network.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=-/etc/default/opendkim
PIDFile=/var/run/opendkim/opendkim.pid
PermissionsStartOnly=true
User=opendkim
Group=opendkim
ExecStartPre=-/bin/mkdir -p /var/run/opendkim
ExecStartPre=-/bin/chown opendkim.opendkim /var/run/opendkim
ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS
TimeoutStartSec=10
ExecReload=/bin/kill -USR1 $MAINPID

y encontré caminos extraños

EnvironmentFile=-/etc/default/opendkim
ExecStartPre=-/bin/mkdir -p /var/run/opendkim
ExecStartPre=-/bin/chown opendkim.opendkim /var/run/opendkim

y mando

 /usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS

dijo

/usr/sbin/opendkim: option requires an argument -- 'p'

(mira la segunda línea de la cuota anterior) así que fui a

sudo nano /lib/systemd/system/opendkim.service

y eliminó "-" 3 veces Luego

sudo systemctl daemon-reload
sudo service opendkim restart
sudo netstat -tulpn

Eso me ayudó :-)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.