Configurações a serem alteradas para permitir que o PostFix aceite mensagens de saída de usuários autenticados

2

Eu tenho um servidor de e-mail que pode receber e-mails para usuários que estão em um banco de dados MySQL, e permite que eles baixem essas mensagens via POP3s. Tudo isso está funcionando bem. Minha versão do PostFix é 2.7.0, no Ubuntu Server 10.04.

O problema é enviar email. Existem vários problemas:

1. O servidor escuta na porta 25, mas os ISPs bloqueiam 25, por isso preciso adicionar uma porta de escuta. Deve ser 465 ou 587? ou ambos? Como eu adiciono uma porta adicional para SMTP seguro?

Eu preciso aceitar todas as conexões em 25 sem autenticação, mas aceito somente email para destinatários / domínios válidos no sistema e bloqueio de retransmissão. Isso está funcionando atualmente.

A porta 587 ou 465 deve permitir a retransmissão para qualquer endereço / domínio, mas somente para usuários válidos que se autenticam.

O topo do meu arquivo master.cf é:

smtp      inet  n       -       -       -       -       smtpd
#submission inet n       -       -       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       -       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

Suponho que posso remover o comentário de uma dessas linhas, mas não sei qual delas ou quais opções para descomentar.

Além disso, por que o SMTP não tem uma restrição de rejeição? É porque sempre aceita tudo na porta 25 e decide se vai mantê-los mais tarde? Para onde vão as mensagens que entram na porta 25, mas não tem um domínio válido aqui? Eu tenho um catchall para o domínio que servimos. Eles devolveriam eles? Eu li que pular era ruim porque poderia fazer você parecer um spammer.

2. Meus usuários já estão em um banco de dados MySQL para mensagens recebidas, e gostaria de usar esse mesmo banco de dados para permitir mensagens de saída.

main.cf se parece com:

smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no    
readme_directory = no

# TLS parameters
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mail.crt
smtpd_tls_key_file = /etc/ssl/private/mail.key.insecure 

myhostname = mysite.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_can$

O que eu altero para autenticar os remetentes do banco de dados de usuários existente?

3. Atualmente, o correio deste servidor criado pelo comando mail () do PHP está sendo entregue apenas para usuários que estão no banco de dados mysql de usuários válidos. Eu preciso do PHP para poder enviar mensagens para qualquer usuário em qualquer lugar. Devo configurar o PHP para autenticar com SMTPs, uma vez que está funcionando?

ATUALIZAÇÃO:

Eu mudei meu master.cf para ficar assim e abri 587 no Firewall.

smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Agora não posso entrar em contato com o 587:

telnet xxx.xxx.xxx.xx 587
Trying xxx.xxx.xxx.xx...
Connected to xxx.xxx.xxx.xx.
Escape character is '^]'.
220 mydomain.com ESMTP Postfix
EHLO you
250-mydomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: <[email protected]>
530 5.7.0 Must issue a STARTTLS command first
STARTTLS
220 2.0.0 Ready to start TLS

OK, então eu tenho que usar o TLS, o que é bom, mas eu não sei como testar mais quando o TLS estiver rodando?

Quando eu EHLO na porta 25, recebo:

250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN

Eu não quero que os usuários possam enviar senhas de texto simples, posso desabilitar logins simples?

UPDATE 2:

Meu /etc/postfix/sasl/smtpd.conf original:

pwcheck_method: saslauthd
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mailusr
sql_passwd: secret
sql_database: mail
sql_select: select password from users where email = '%u'

O texto acima faz isso quando se tenta autenticar:

Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: < c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: dGVzdEBhcsEZ2Vdci1jb20=
Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: xsasl_cyrus_server_next: decoded response: [email protected]
Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: xsasl_cyrus_server_auth_response: uncoded server challenge: Password:
Feb 27 09:40:00 MyHOSTNAME postfix/smtpd[27274]: > c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: 334 UGFzc3dvcmQ6
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: < c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: dGVzdGluZw==
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: xsasl_cyrus_server_next: decoded response: testing
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: warning: c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: SASL LOGIN authentication failed: authentication failure
Feb 27 09:40:20 MyHOSTNAME postfix/smtpd[27274]: > c-65-34-234-133.hsd1.fl.comcast.net[65.34.xxx.xxx]: 535 5.7.8 Error: authentication failed: authentication failure

Eu também tentei alterar o arquivo para o seguinte com base em this tutorial sugerido:

pwcheck_method: authdaemond
mech_list: PLAIN LOGIN
authdaemond_path: courier-authdaemon-socket

Mas não consegui criar um link físico na última etapa do guia:

ln /var/run/courier/authdaemon/socket courier-authdaemon-socket

Porque o / var / run está em uma partição separada. Em vez disso, criei um link temporário, mas a autenticação ainda falhava. Acho que o primeiro exemplo com o MySQL parece mais correto.

    
por Nick 26.02.2012 / 17:14

1 resposta

1

1)
Para fazer o smtpd escutar em uma porta alternativa, modifique master.cf para copiar a entrada smtpd existente e apenas altere o primeiro campo de smtp para 587 ou qualquer porta que você queira escutar. Se você quiser usar a porta 465, remova o comentário da entrada smtps . Eu não aconselho o uso de SMTP não criptografado nessa porta, pois isso provavelmente causará confusão e problemas com clientes de email (já que a 465 é designada como uma porta ssl). A opção que você está procurando para ativar a autenticação é smtpd_sasl_auth_enable=yes e smtpd_recipient_restrictions=permit_sasl_authenticated (o que você já tem, então você só precisa configurá-lo). Como você tem essas configurações no main.cf, elas estão habilitadas para todas as portas. Não há razão para permiti-las somente em portas diferentes de 25. Se o email passar por não autenticado, ele só será aceito para entrega local. Se vier autenticado, pode ir a qualquer lugar.

Não sei ao certo o que você quer dizer com 'por que o SMTP não tem uma restrição de rejeição?'.

2)
Você tem que usar o SASL para autenticação. Portanto, a autenticação é fornecida por um serviço externo ao qual o postfix fala. Você ainda pode usar seu banco de dados MySQL existente, basta configurar um serviço SASL para usá-lo. Cyrus SASL é o provedor padrão no postfix. Mais pode ser lido aqui .

3)
Você já tem smtpd_recipient_restrictions = permit_mynetworks e mynetworks = 127.0.0.0/8 , então qualquer coisa de localhost será aceita, incluindo PHP.

NOTA Eu aconselho a olhar para todas as opções disponíveis para smtpd_recipient_restrictions . Basta definir isso para os valores fornecidos aqui e nada mais pode causar um comportamento indesejado. Eu li a página man postconf em todas as configurações que mencionei para que você entenda o que eles estão fazendo antes de implementar eles.

    
por 26.02.2012 / 19:10