Não é possível alterar o soquete do OpenDKIM no trecho Debian em / etc / default / opendkim

18

Estou tentando configurar o opendkim no trecho Debian, mas falho ao alterar o soquete. Quero mudar o soquete para /var/spool/postfix/opendkim/opendkim.sockque eu possa usá-lo com o postfix.

Eu adicionei Socket local:/var/spool/postfix/opendkim/opendkim.socka/etc/opendkim.conf

e também tentei adicionar SOCKET="local:/var/spool/postfix/opendkim/opendkim.socka /etc/default/opendkim(que eu tive que criar).

Não importa o que mude ou com que frequência reinicie o opendkim, ele sempre será usado /var/run/opendkim/opendkim.sockcomo soquete.

➜  ~ 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)

O que estou fazendo de errado? (Acho que foi meu erro, pois não consigo encontrar mais ninguém com o mesmo problema)

ATUALIZAR:

Mudar /etc/default/opendkimpara SOCKET="inet:8891@localhost"e alterar a configuração do postfix para usar esse soquete resulta eminet:localhost:8891: Connection refused

UPDATE2:

Agora substituí pelo arquivo empacotado no pacote debian stretch:

# 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:[email protected]                                                                                                                                                
USER=opendkim                                                                                                                                                               
GROUP=opendkim                                                                                                                                                              
PIDFILE=$RUNDIR/$NAME.pid                                                                                                                                                   
EXTRAAFTER=   

O inclui as seguintes linhas onde o soquete é decidido:

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
lw1.at
fonte
"para que eu possa usá-lo com o postfix" Você tem certeza de que precisa disso para fazê-lo funcionar com o Postfix?
Miloš Đakonović
@Miloshio pensei assim como o postfix é executado em um chroot. (De acordo com o tutorial que estou seguindo )
lw1.at 30/04
Reivindicações postfix @Miloshio connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directoryaté pensei que ela existe, como é chrooted para/var/spool/postfix/
lw1.at
Parece que não está chrootado. Por favor, você pode verificar novamente? Seus caminhos deve olhar como /var/spool/postfix/var/run...se é
Miloš Đakonović
Em qualquer cenário, eu usaria em inetvez de local. Talvez, se você não está depurando para baixo serviço, tentar implementar: digitalocean.com/community/tutorials/...
Miloš Đakonović

Respostas:

31

Finalmente encontrei a solução.

O /etc/init.d/opendkimparece não fazer nada. Mas, em vez disso, o arquivo de serviço /lib/systemd/system/opendkim.serviceé usado com o soquete errado codificado.

Mas o pacote debian também parece incluir um bash que gera o serviço systemd correto.

Então, depois de correr

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

e reiniciando o opendkim, o arquivo de soquete aparece no local esperado, o que pode ser verificado chamando:

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

Atualização: Parece que há um relatório de bug do debian sobre esse problema: # 861169

lw1.at
fonte
3

Eu não tenho reputação suficiente para comentar e queria reconhecer que, após horas procurando uma solução para a mensagem de erro 'conexão recusada' do OpenDKim-Postfix, a /lib/systemd/system/opendkim.serviceedição fornecida pelo LocutusBE funcionou com o Ubuntu 17.04:

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

editar /lib/systemd/system/opendkim.service

mudança:

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

para:

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

systemctl daemon-reload

e

systemctl opendkim restart

Antes de tentar a edição, adicionei o usuário do postfix ao grupo opendkim e tentei de /lib/opendkim/opendkim.service.generateacordo com a solução de Lukas Winkler . O erro de conexão recusada persistiu até o número da porta ser adicionado /lib/systemd/system/opendkim.service.

Para atualizar /lib/systemd/system/opendkim.service, usei a porta 8891 para Ubuntu e comentei a linha ExecStart original para fins de teste e adicionei uma nova linha com a porta #:

/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

O número da porta correspondente também foi especificado em /etc/opendkim.conf:

Socket                  inet:8891@localhost

E /etc/postfix/main.cf:

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

Após reiniciar o daemon systemctl, opendkim e postfix, o correio de saída foi assinado sem problemas e o log de mensagens mostrou "Campo de assinatura DKIM adicionado".

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

Não havia nenhum problema de conexão ao configurar o OpenDkim com o Centos7 recentemente, então, aparentemente, neste caso, estava relacionado ao Ubuntu. Agradecemos a Lukas Winkler por postar a pergunta e àqueles que compartilharam suas soluções.

1keown
fonte
2

Para usar o inetsoquete, você precisa especificar:

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

Além disso, você precisa alterar as configurações no Postfix, consequentemente:

em /etc/postfix/main.cf adição:

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

se você não pode definir localo caminho desejado, sugiro que você:

  • agarrar um log de mail, syslogou opendkimem /var/loge verifique

  • verifique o /etc/init.d/opendkimscript e verifique se o arquivo sock está com um valor fixo

  • tentar ir com padrão local:/var/run/opendkim/opendkim.sock- e especificar smtpd_milters = local:/var/run/opendkim/opendkim.socke non_smtpd_milters = local:/var/run/opendkim/opendkim.sockem/etc/postfix/main.cf

Miloš Đakonović
fonte
Eu já mudou a configuração para ser exatamente como a sua (mesma porta), mas eu ainda obterwarning: connect to Milter service inet:localhost:12301: Connection refused
lw1.at
você tentou reiniciar os dois serviços após a edição?
Miloš Đakonović 30/04
Eu fiz e agora eu também reiniciei. Ao olhar para mail.log, eu sempre vejo a seguinte linhaOpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
lw1.at 30/04/19
Você vê essa linha mesmo com o SOCKET="inet:12301@localhostconjunto de arquivos conf opendkim?
Miloš Đakonović 30/04
obrigado pelas idéias. Eu encontrei a solução (há algo estranho com o pacote debian)
lw1.at
1

Isso funcionou para mim:

editar /lib/systemd/system/opendkim.service

mudança:

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

para:

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

systemctl daemon-reload

e

systemctl opendkim restart
LocutusBE
fonte
Essa é exatamente a alteração feita pelo script /lib/opendkim/opendkim.service.generate.
Lw1.at
Muito obrigado - isso corrigiu o Ubuntu 16.04.3 LTS que falta opendkim.service.generate.
Ivan Mir
0

O OpenDKIM funcionou até eu atualizar meu servidor. O OpenDKIM não foi iniciado e não havia soquete em execução para o Milter iniciar. Em /var/log/syslogpude ver que opendkim falhou tentando criar uma tomada de lugar diferente do que antes do upgrade. Tentei editar as configurações de soquete em /etc/opendkim.conf, /etc/default/opendkime /lib/systemd/system/opendkim.servicemas não ajudou. Acontece que a informação estava na minha frente o tempo todo:

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

Percebi que as configurações foram sobrescritas pelo arquivo "override.conf" e editadas para ficar alinhadas com as minhas /etc/postfix/main.cf(roda 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

E, finalmente, reiniciando o daemon e opendkim:

systemctl daemon-reload && systemctl restart opendkim
lallepot
fonte
0

Acabei de renomear /etc/systemd/system/opendkim.service.d/override.conf para /etc/systemd/system/opendkim.service.d/override.conf.old para que não substitua os parâmetros ExecStart.

Tudo está funcionando bem escolhendo a configuração do /etc/opendkim.conf

Aslam Sayyed
fonte
0

Meu serviço opendkim não foi ativado na porta 8100 após a instalação e as soluções anteriores não ajudaram. Então eu tentei

/lib/opendkim/opendkim.service.generate

com dito

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

então eu olhei para o arquivo de serviço

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

e encontrou caminhos estranhos

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

e comando

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

disse

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

(veja a segunda linha da cota anterior), então fui para

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

e excluído "-" 3 vezes

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

Isso me ajudou :-)

Andy Velychkovskyi
fonte