Postfix: como usar arquivo simples para autenticação SASL?


8

Eu gostaria de executar o Postfix em um VPS Debian para enviar e-mails do meu aplicativo. O aplicativo (em execução em outros VPS) se conectaria ao Postfix via SMTP. O Postfix não precisa lidar com o email recebido; é apenas enviar as mensagens enviadas.

Para evitar ser um relé aberto, a autenticação SASL deve ser usada. No entanto, não quero executar o Dovecot ou o MySQL para autenticação SASL.

Como posso configurar a autenticação SASL usando um arquivo simples (contendo nomes de usuário e senhas)?

Eu já encontrei uma pergunta semelhante ; no entanto, nenhuma resposta satisfatória foi dada lá.


Use um firewall para permitir a conexão apenas dos endereços IP dos outros VPS. Além disso, você pode definir a variável mynetworks no main.cf para tornar o postfix ciente disso, mesmo se o firewall falhar. Se você realmente deseja o SASL, leia o SASL_README que acompanha o postfix e configure o SASL para usar / etc / sasldb como um "banco de dados". Deve funcionar fora da caixa. saslpasswd adiciona / remove / altera o arquivo.
AndreasM

Respostas:


14

O Postfix atualmente suporta apenas dois métodos de autenticação SASL. Uma delas é Dovecot, que você não quer. O outro é o Cyrus, que é o mais próximo possível do que você deseja obter sem reescrever o Postfix. Isso envolve a execução de um daemon de autenticação separado ( saslauthd), mas o arquivo de autenticação é fácil de editar e atualizar.

O básico para usar o Cyrus SASL pode ser encontrado no site de documentação do postfix , mas aqui está uma breve descrição. Por favor, olhe o link se algo estiver confuso de alguma forma!

Comece instalando o Cyrus SASL com o plug-in sasldb. (Como fazer isso é deixado como um exercício para o leitor; presumivelmente há um pacote em qualquer sistema de pacotes que sua marca de unix esteja usando.) Como a comunicação entre o Postfix e o SASL ocorrerá por meio de um soquete de domínio unix, convém adicione postfix ao grupo SASL e verifique se esse grupo possui permissões de leitura e execução no diretório /var/run/saslauthd.

Configurar SASL

Configure o SASL para usar o sasldb editando /etc/sasl2/smtpd.conf:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM

O plug-in sasldb significa que o sasl usará um arquivo Berkeley DB para nomes de usuário e senhas. Você adiciona usuários com o comando saslpasswd2:

$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):

Observe que você especifica um domínio junto com o nome de usuário e o usuário precisará usar "nomedeusuário@exemplo.com" em vez de apenas "nomedeusuário" ao se autenticar.

Você pode verificar quais usuários foram inseridos executando sasldblistusers2.

Inicie o saslauthd e verifique se a autenticação funciona executando

testsaslauthd -u username@example.com -p password

Configurar o Postfix

Feito isso, diga ao Postfix para usar o SASL e ao Cyrus que é SMTP que está autenticando, editando /etc/postfix/main.cf para conter

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Em seguida, recarregue o postfix e você deverá estar definido.


Obrigado pela sua extensa resposta! Eu segui todas as etapas e tudo parece funcionar bem. sasldblistusers2gera corretamente a lista de usuários que adicionei. No entanto, ao executar testsaslauthd, eu recebo este resultado: 0: NO "authentication failed". Você tem alguma idéia de como eu poderia consertar isso? Isto é do meu /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan

Isso significa que o saslauthd está tentando usar o PAM em vez do sasldb. Qual foi a linha de comando usada para iniciá-lo?
Jenny D

Eu usei o testingaslauthd (como descrito na sua resposta original) e também tentei anexá -s smtpd-lo. Se eu definir MECHANISMS="sasldb"no /etc/default/saslauthde reiniciar saslauthd, eu obter o mesmo resultado de testsaslauthd. O log de autenticação mostra uma mensagem diferente:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
Jonathan

2
Hm, testsaslauthd está funcionando se eu especificar o nome de usuário e a parte do domínio separadamente, assim: testsaslauthd -u username -r example.com -p XXXretorna 0: OK "Success.". Agora eu vou verificar se Postfix pode contornar esse ...
Jonathan

Se você usar -s smtpdvocê vai fazê-lo usar PAM em vez de sasldb, por isso, não faça isso ...
Jenny D

1

Para evitar ser um relé aberto, a autenticação SASL deve ser usada.

O SASL é apenas uma das inúmeras maneiras de evitar isso. Outra seria incluir os IPs na lista de permissões que você usa nos outros VPS ou exigir certificados de cliente TLS (pode ser considerado o caminho mais seguro).

Basta configurar uma CA de assinatura na máquina postfix e assinar um certificado por VPS que você deseja enviar um email.
Em seguida, exija a verificação completa do certificado do cliente para todas as mensagens enviadas; desative outros métodos de envio.

O que você pede não é possível, pois o postfix não suporta SASL diretamente.


1

Apenas esclarecendo algumas coisas,

Criando uma conta no sasldb:

% saslpasswd2 -c -u fqdn username

Testando autenticação:

% testsaslauthd -u username -p password

(nota: o nome de usuário não é seguido pelo fqdn)

Eu também gostaria de acrescentar que a criação de uma conta root

% saslpasswd2 -c -u example.com root

não permitirá que você se autentique,

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

Mas isso não é um bug. É apenas um recurso de segurança.


0

Se você não precisar lidar com o correio recebido, não se preocupe com a autenticação. Apenas bloqueie o tráfego recebido com um firewall e / ou restrinja-o apenas ao host local.

 inet_interfaces = 127.0.0.1

Não há mais problema de retransmissão aberta, e você também evita complicar as coisas para aplicativos que precisam enviar email pelo postfix.


Obrigado pela resposta. Como o aplicativo está sendo executado em outros VPS, o Postfix receberá o email de outros hosts que não o localhost.
23413 Jonathan

Você pode definir os IPs das conexões esperadas e listá-los na configuração do postfix ou na configuração do firewall? Por exemplo, eles podem estar em um único bloco de rede ou em um conjunto de IPs ou blocos suficientemente pequeno para que você possa listá-los facilmente. Como alternativa, você pode usar uma rede privada entre seus hosts virtuais.
Mc0e
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.