Postfix - Opendkim - Não é possível conectar ao soquete local

Postfix - Opendkim - Não é possível conectar ao soquete local

Estou recebendo erros negados quando o postfix tenta se conectar ao soquete unix para opendkim, erro 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 acordo comdocumentos postfix, o postfix é executado no "modo chroot" por padrão, então o postfix é bloqueado para /var/spool/postfix/, e de acordo com odocumentos postfix, se estiver executando no "modo chroot", todas as referências milter (socket) são relativas (a /var/spool/postfix).

Então minhas configurações são assim:

# /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

Agora, quando tento enviar um e-mail de teste, recebo o erro de permissão negada, então tentei alguns testes de permissão:

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

Mas quando tento conectar como postfix, nada acontece:

# 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

O SELinux está temporariamente desabilitado (permissivo) durante a depuração deste problema. E estou reiniciando os dois processos (opendkim e postfix) após cada alteração de configuração.

O que mais estou perdendo?

Versões:

CentOS 6.5
Postfix v2.6.6
Opendkim v2.9

Responder1

Testado no meu CentOS6 esse postfix não parece realmente "chroot".
Minha configuração:

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

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

Isso produzirá: connect to Milter service unix:/var/run/opendkim/opendkim.sock: Permission denied.
No entanto, o soquete umask é 002, resultando em srwxrwxr-x. opendkim:opendkim opendkim.sock.

Alterar o umask para 000 resolve o problema. Ainda assim, é melhor que o opendkim mude de usuário: grupo do que apenas aberto para o 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

Responder2

Para aqueles que acham isso e o problema não foi resolvido com as respostas acima, meu problema era que faltavam permissões de execução de grupo na pasta de soquete opendkim/var/run/opendkim/

Eu adicionei um cron @reboot para garantir que as permissões do grupo foram definidas @reboot root chmod g+x /var/run/opendkim/

Corrige/corrige o seguinte aviso de retorno após uma reinicialização.

aviso: conecte-se ao serviço Milter unix:/var/run/opendkim/opendkim.sock: Permissão negada

Uma conexão TCP não foi uma boa solução para mim, pois assino mais de 100 mil e-mails por hora.

Responder3

IIRC, postfix em centos 6 não roda chroot em sua configuração padrão. Quando configurei o opendkim do epel ele veio com esta configuração:

Socket                  inet:8891@localhost

então habilitá-lo no postfix foi apenas uma questão de adicionar isto ao main.cf:

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

reiniciando o opendkim e o postfixdepoisconfigurando corretamente as chaves, TrustedHosts, SigningTable, Keytable e publicando os registros txt no dns.

Ah, e esqueci: o postfix também deveria ser membro do grupo opendkim.

Responder4

Para que o postfix e o opendkim se comuniquem via soquetes unix, o opendkim deve ser capaz de criar o soquete e o postfix deve ser capaz de ler o soquete.

No Debian, o postfix é executado como chroot /var/spool/postfix, então uma configuração possível é:

/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 deve existir e pertencer ao opendkim:

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

Isso deve permitir que o opendkim crie o soquete e o postfix para acessar o diretório, mas o postfix ainda não consegue ler o soquete:

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

Você pode colocar o soquete no grupo postfix:

/etc/opendkim.conf:
UserID                  opendkim:postfix

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

ou coloque o postfix no grupo opendkim:

$ usermod -a -G opendkim postfix

Qualquer um deve dar ao postfix as permissões corretas. Agora o postfix deve ser capaz de assinar mensagens. Diferentes distros podem funcionar de maneira um pouco diferente, mas isso deve ser um começo.

Teoricamente, você também poderia alterar o opendkim umask para 002, mas isso tornaria o soquete legível, o que provavelmente é um problema de segurança, então eu não recomendaria isso.

informação relacionada