Entregar correio para usuários virtuais com sendmail e dovecot lda

3

Estou tentando migrar nosso sistema de postagem baseado no usuário do sistema linux para usuários virtuais.

Eu tenho

  • sendmail com entrega do procmail
  • dovecot
  • usuários do sistema com diferentes uids
  • interface da web roundcube

O Sendmail lida com todas as entregas de e-mail para as caixas de correio dos usuários, o dovecot manipula o pop3 e a interacção imap com os usuários, tudo está funcionando como um encanto

Agora começamos a implementar o diretório ativo globalmente e quero recusar os usuários de e-mail do sistema linux antes dos usuários do ldap virutal.

Ativei o ldap_routing do sendmail

define('confLDAP_DEFAULT_SPEC', '-h "10.1.0.1" -b "ou=portal,dc=univ,dc=priv" -d "cn=portal admin,ou=portal,dc=univ,dc=priv" -MLDAP_AUTH_SIMPLE -P/etc/mail/ldap_pass')dnl

LDAPROUTE_DOMAIN_FILE('/etc/mail/ldap_route_domains')dnl

FEATURE('ldap_routing', 'null', 'ldap -1 -T -v sAMAccountName -k (&(|(objectclass=user)(objectclass=group))(|(mail=%0)(proxyAddresses=smtp:%0)))','passthru')dnl

criou um arquivo de alias simples para usuários do ldap via script perl. Arquivo inicialmente parecia com isso

sAMAccountName1:    vmail
sAMAccountName2:    vmail
....
sAMAccountNameN:    vmail

ativado dovecot-lda usando este howto

Infelizmente o sendmail passa o nome do usuário real do sistema ("vmail" no meu caso) como argumento -d, e não sAMAccountName do usuário virtial com esta configuração.

Depois disso, modifico meu arquivo de alias em algo assim (inspirado por este tópico )

sAMAccountName1:    "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"
sAMAccountName2:    "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"
....
sAMAccountNameN:    "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"

Esta solução falha por causa do problema correto do sistema que não consigo resolver. Aqui está as mensagens de log

Fatal: setgid(5000(vmail) from userdb lookup) failed with euid=8(mail), gid=12(mail), egid=12(mail): Operation not permitted (This binary should probably be called with process group set to 5000(vmail) instead of 12(mail))

agente de entrega dovecot definido em sendmail.cf com U = vmail: vmail

Mdovecot,      P=/usr/libexec/dovecot/dovecot-lda,
           F=l59DFMPhnu,
           S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
           M=51200000,
           U=vmail:vmail,
           T=DNS/RFC822/X-Unix,
           A=/usr/libexec/dovecot/dovecot-lda -d $u

dovecot-lda tem o mesmo proprietário e grupo

-rwxr-x--- 1 vmail vmail 28512 апр.   5  2013 /usr/libexec/dovecot/dovecot-lda

Se eu usar o email do usuário do sistema, em vez disso, o vmail tudo começa a funcionar bem. Mas essa configuração parece-me menos segura e eu quero usar o usuário vmail com uid > 100 em vez de email do usuário.

Portanto, a entrega de mensagens falha. Agradeço qualquer ajuda para resolver este problema.

    
por Ilya 'elcamlost' Rassadin 19.02.2014 / 18:54

2 respostas

1

  1. Ignore a leitura se você não está determinado :-)

  2. Tornar o vmail especial para o sendmail (sem pesquisas de DNS para o destino)

    LOCAL_CONFIG
    CPvmail
    
  3. Use FEATURE (ldap_routing) para selecionar mailHost não mailRoutingAddress

  4. Use FEATURE (mailertable) para selecionar o método de entrega (mailer)

    mailertable

    vmail  dovecot:dummy
    
  5. Não faça dovecot o mailer local - RECURSO (local_procmail, ...)

  6. Na definição de mailer do dovecot, use regras xSMTP não regras xL (locais)

    link

por 24.02.2014 / 18:44
1

Eu estava tentando configurar isso e estava encontrando snippets aqui e lá, mas não uma receita completa. Veja como eu fiz isso.

Estou executando o FreeBSD 10.3-RELEASE, o sendmail 8.15.2 e o dovecot 2.2.29.

Você precisa de um usuário para os arquivos do usuário virtual:

# passwd
vmail:*:2025:2025:Dovecot Virtual Mail:/var/empty:/usr/sbin/nologin

# group
vmail:*:2025:

O pombal é simples, então vamos fazer isso primeiro. Assumindo um pombal de trabalho config você já terá pelo menos uma configuração userdb. Adicione um novo para usuários virtuais:

# Virtual users
userdb {
        driver = static
        args = uid=vmail gid=vmail home=/var/vmail/%u
}

Se você não tiver um, adicione uma configuração de passdb para credenciais estáticas:

passdb {
        args = scheme=plain-md5 username_format=%u /usr/local/etc/dovecot/imap-passwd
        driver = passwd-file
}

Crie / var / vmail:

mkdir /var/vmail
chown vmail:vmail /var/vmail

e a menos que você queira criar diretórios manualmente para cada novo usuários, adicione:

# Virtual users config
lda_mailbox_autocreate = yes

para dovecot.conf (o sintoma de não ativar o lda_mailbox_autocreate e os diretórios não existentes são erros EX_TEMPFAIL e mensagens presas na fila local do sendmail).

Use "doveadm pw -s PLAIN-MD5" e adicione uma linha para o novo usuário virtual:

vfred:{PLAIN-MD5}912ec803b2ce49e4a541068d495ab570

Reinicie o pombo para pegar a nova configuração:

service dovecot restart

Agora vamos para o sendmail. Se você não tem um mailertable você precisa adicionar um:

FEATURE('mailertable')dnl

para sendmail.mc e:

vmail dovecot:dummy

para mailertable. Isso está dizendo ao sendmail para usar o local do pombal agente de entrega para * @ vmail.

No final do seu sendmail.mc, você provavelmente tem algo como:

MAILER(local)dnl
MAILER(smtp)dnl

Anexe algo nos seguintes termos:

dnl
dnl Dovecot virtual user delivery agent
dnl
LOCAL_CONFIG
Mdovecot,
    P=/usr/local/libexec/dovecot/dovecot-lda,
    F=l59DFMPhnu,
    S=EnvFromL/HdrFromL,
    R=EnvToL/HdrToL,
    M=51200000,
    U=vmail:vmail,
    T=DNS/RFC822/X-Unix,
    A=/usr/local/libexec/dovecot/dovecot-lda -d $u

gere um novo sendmail.cf e reinicie o sendmail:

service sendmail stop ; sleep 1 ; service sendmail start

("service sendmail restart" é um pouco engraçado no FreeBSD)

Por fim, adicione seu usuário virtual ao arquivo de aliases:

vfred: vfred@vmail

Executar novas pesquisas e testar.

    
por 02.05.2017 / 02:27