Mudanças entre as edições de "Servidor de Email"
(→DKIM) |
|||
(28 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
== Postfix == | == Postfix == | ||
− | Neste tutorial será mostrado como | + | Neste tutorial será mostrado como configurar um servidor de e-mails usando Postfix, a proposta de uso deste servidor é apenas para envio de notificações de sistemas internos (Zabbix, Moodle, Booked Scheduler, Scan-to-mail das impressoras) sem a intenção de disponibilizar o serviço SMTP para usuários, então não será necessário a criação de domínios virtuais, autenticação em bancos de dados externos nem a instalação de serviços de recebimento de e-mail como POP e IMAP. |
== Informações iniciais== | == Informações iniciais== | ||
Linha 23: | Linha 23: | ||
Na próxima janela "nome de email" digite: | Na próxima janela "nome de email" digite: | ||
− | exemplo.com.br | + | email.exemplo.com.br |
== Configuração == | == Configuração == | ||
Linha 58: | Linha 58: | ||
smtp_sender_restrictions = reject_unknown_sender_domain, | smtp_sender_restrictions = reject_unknown_sender_domain, | ||
reject_non_fqdn_sender | reject_non_fqdn_sender | ||
− | ## Utilizadores locais podem enviar | + | ## Utilizadores locais podem enviar e-mails para qualquer endereco |
smtpd_recipient_restrictions = permit_sasl_authenticated, | smtpd_recipient_restrictions = permit_sasl_authenticated, | ||
permit_mynetworks, | permit_mynetworks, | ||
reject_unauth_destination | reject_unauth_destination | ||
− | # Delay para | + | # Delay para e-mails com o mesmo dominio de destino, para evitar congestionamento, valor em segundos. |
default_destination_rate_delay = 1 | default_destination_rate_delay = 1 | ||
Com esta configuração básica, já é possível realizar o primeiro teste de envio com o comando: | Com esta configuração básica, já é possível realizar o primeiro teste de envio com o comando: | ||
− | # echo "body of your email" | mail -s "This is a Subject" -a "From: envio@ | + | # echo "body of your email" | mail -s "This is a Subject" -a "From: envio@exemplo.com.br" destino@destino.com |
e observe o arquivo de log para monitorar o envio: | e observe o arquivo de log para monitorar o envio: | ||
# tail -f /var/log/mail.log | # tail -f /var/log/mail.log | ||
+ | |||
+ | Se houver um firewall na rede, libere a porta '''25 de SAÍDA''' para qualquer IP de destino, '''não libere a porta 25 de entrada''' caso contrário você estará assumindo uma falha de segurança chamado Open Relay. | ||
== Evitar que seu e-mail caia no SPAM == | == Evitar que seu e-mail caia no SPAM == | ||
− | + | É possível que seu e-mail de teste caia na caixa de spam do destinatário, ou pior, o IP do seu servidor cair em uma blacklist de servidores Spammers, isto ocorre pois alguns servidores de e-mail (Gmail, Terra, Outlook entre outros) utilizam algumas políticas rigorosas para o controle de spam, para resolver o problema é necessário implementar alguns métodos de segurança. | |
− | Para tornar o servidor confiável aos olhos do destinatário é preciso de 4 componentes: | + | Para tornar o servidor confiável aos olhos do servidor destinatário é preciso de 4 componentes: |
* rDNS (DNS Reverso) | * rDNS (DNS Reverso) | ||
* SPF | * SPF | ||
Linha 83: | Linha 85: | ||
* DMARC | * DMARC | ||
− | === rDNS === | + | === rDNS <ref>https://wiki.canoas.ifrs.edu.br/index.php/DNS</ref> === |
− | + | Acesse o seu servidor de DNS e configure a zona exemplo.com.br inserindo o seguinte registro: | |
+ | email IN A 192.0.2.4 | ||
+ | email IN AAAA 2001:0DB8::4 | ||
email IN MX 1 email.exemplo.com.br. | email IN MX 1 email.exemplo.com.br. | ||
Linha 94: | Linha 98: | ||
4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR email.exemplo.com.br. | 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR email.exemplo.com.br. | ||
− | === SPF === | + | De fora de sua rede, utilize o seguinte comando para verificar se o DNS reverso esta configurado corretamente: |
+ | dig -x 192.0.2.4 @IP.SERVIDOR.DNS | ||
+ | |||
+ | Se retornar email.exemplo.com.br esta funcionando corretamente, se não funcionar vide [[ DNS#Observa.C3.A7.C3.B5es | Servidor de DNS reverso]]. | ||
+ | |||
+ | === SPF<ref>https://help.ubuntu.com/community/Postfix/SPF</ref> === | ||
+ | SPF é uma tecnologia para combater a falsificação de endereços de retorno dos emails (return-path). O mecanismo permite ao administrador de um domínio defina uma política SPF, onde são designados os endereços das máquinas autorizadas a enviar mensagens em nome do seu domínio e estabelecer critérios de aceitação de mensagens em função da checagem das políticas SPF publicadas.<ref>http://antispam.br/admin/spf/</ref> | ||
Instale o pacote com o comando: | Instale o pacote com o comando: | ||
Linha 123: | Linha 133: | ||
# apt-get install opendkim opendkim-tools | # apt-get install opendkim opendkim-tools | ||
− | Edite o | + | Edite o arquivo /etc/opendkim.conf |
AutoRestart Yes | AutoRestart Yes | ||
Linha 142: | Linha 152: | ||
OversignHeaders From | OversignHeaders From | ||
− | = | + | Edite o arquivo /etc/default/opendkim e altere para: |
+ | SOCKET="inet:12345@localhost" | ||
− | https://www. | + | No arquivo de configuração /etc/postfix/main.cf acrescente os parâmetros abaixo: |
+ | milter_protocol = 2 | ||
+ | milter_default_action = accept | ||
+ | |||
+ | Para melhor organização crie um diretório opendkim e criar os arquivos abaixo: | ||
+ | # mkdir /etc/opendkim | ||
+ | # touch /etc/opendkim/TrustedHosts | ||
+ | # touch /etc/opendkim/KeyTable | ||
+ | # touch /etc/opendkim/SigningTable | ||
+ | # touch /etc/opendkim/keys | ||
+ | |||
+ | No arquivo /etc/opendkim/TrustedHosts adicione os hosts que podem enviar e-mails assinados: | ||
+ | localhost | ||
+ | email.exemplo.com.br | ||
+ | |||
+ | Gerar chave privada e pública com o comando: | ||
+ | opendkim-genkey -s seletor -d exemplo.com.br | ||
+ | |||
+ | Salve a chave privata seletor.private na pasta /etc/opendkim/keys e proteja o acesso: | ||
+ | chown opendkim:opendkim seletor.private | ||
+ | |||
+ | Edite o arquivo de tabela de chaves /etc/opendkim/KeyTable | ||
+ | seletor._domainkey.exemplo.com.br exemplo.com.br:seletor:/etc/opendkim/keys/exemplo.com.br/seletor.private | ||
+ | |||
+ | Edite a tabela de assinaturas /etc/opendkim/SigningTable | ||
+ | *@exemplo.com.br seletor._domainkey.exemplo.com.br | ||
+ | |||
+ | Pra finalizar adicione no servidor de DNS um registro do tipo TXT constando a chave pública gerada pelo comando opendkim-genkey, arquivo seletor.txt: | ||
+ | seletor._domainkey IN TXT "v=DKIM1\; k=rsa\; p=ADDLLSKKCKAKSSSKALS..." | ||
+ | |||
+ | Reinicie os serviços: | ||
+ | # systemctl restart postfix | ||
+ | # systemctl restart opendkim | ||
+ | |||
+ | Realize um teste de envio de e-mail, para confirmar visualize o arquivo de log mail.log e verifique se a seguinte informação consta no log "DKIM-Signature field added" | ||
+ | |||
+ | === DMARC === | ||
+ | |||
+ | === Testes === | ||
+ | https://www.mail-tester.com/ | ||
+ | == Cliente de e-mail == | ||
+ | === PHPMailer === | ||
+ | $mail = new PHPMailer(); | ||
+ | $mail->Host = "IP.DO.SERVIDOR"; | ||
+ | $mail->SMTPKeepAlive = true; | ||
+ | $mail->Debugoutput = 'html'; | ||
+ | $mail->IsSMTP(); | ||
+ | $mail->Port = 587; | ||
+ | $mail->SMTPAutoTLS = true; | ||
+ | $mail->SMTPSecure = 'tls'; | ||
+ | //$mail->SMTPDebug = 3; // Opcional | ||
+ | $mail->SMTPAuth = true; | ||
+ | $mail->Username = "usuario"; | ||
+ | $mail->Password = "senha"; | ||
+ | $mail->CharSet = 'UTF-8'; | ||
+ | $mail->SetFrom('usuario@exemplo.com.br', 'Fulano'); | ||
+ | // $mail->AddReplyTo('email@exemplo.com.br', 'Ciclano'); // Opcional | ||
+ | $mail->IsHTML(true); | ||
+ | $mail->Subject = "Assunto"; | ||
+ | $mail->setLanguage('pt-br'); | ||
+ | $mail->AltBody = ""; | ||
+ | $body = "Corpo do e-mail aqui"; | ||
+ | $mail->MsgHTML($body); | ||
+ | $mail->AddAddress("e-mail do destinatário aqui"); | ||
+ | if (!$mail->Send()) | ||
+ | //erro | ||
+ | else | ||
+ | //sucesso | ||
+ | |||
+ | == Referências == | ||
+ | <references/> |
Edição atual tal como às 08h51min de 19 de abril de 2018
Índice
Postfix
Neste tutorial será mostrado como configurar um servidor de e-mails usando Postfix, a proposta de uso deste servidor é apenas para envio de notificações de sistemas internos (Zabbix, Moodle, Booked Scheduler, Scan-to-mail das impressoras) sem a intenção de disponibilizar o serviço SMTP para usuários, então não será necessário a criação de domínios virtuais, autenticação em bancos de dados externos nem a instalação de serviços de recebimento de e-mail como POP e IMAP.
Informações iniciais
Domínio: exemplo.com.br
IPv4: 192.0.2.4
IPv6: 2001:0DB8::4
Hostname: email.exemplo.com.br
S.O.: Debian 8 (Jessie)
Versão do Postfix: 2.11.3
Instalação do Postfix
# apt-get install postfix
Ao apresentar a janela solicitando o tipo de configuração do servidor de e-mail, selecione:
Site da Internet
Na próxima janela "nome de email" digite:
email.exemplo.com.br
Configuração
Edite o arquivo de configuração /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name biff = no append_dot_mydomain = no readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_CApath = /etc/ssl/certs myhostname = email.exemplo.com.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = email.exemplo.com.br, localhost.exemplo.com.br, localhost # clientes cadastrados em mynetworks podem enviar emails sem autenticacao: mynetworks = 192.0.2.0/24, localhost relayhost = mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all # Politicas de segunranca. smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination # Rejeitar e-mails de dominios que nao existem smtp_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender ## Utilizadores locais podem enviar e-mails para qualquer endereco smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination # Delay para e-mails com o mesmo dominio de destino, para evitar congestionamento, valor em segundos. default_destination_rate_delay = 1
Com esta configuração básica, já é possível realizar o primeiro teste de envio com o comando:
# echo "body of your email" | mail -s "This is a Subject" -a "From: envio@exemplo.com.br" destino@destino.com
e observe o arquivo de log para monitorar o envio:
# tail -f /var/log/mail.log
Se houver um firewall na rede, libere a porta 25 de SAÍDA para qualquer IP de destino, não libere a porta 25 de entrada caso contrário você estará assumindo uma falha de segurança chamado Open Relay.
Evitar que seu e-mail caia no SPAM
É possível que seu e-mail de teste caia na caixa de spam do destinatário, ou pior, o IP do seu servidor cair em uma blacklist de servidores Spammers, isto ocorre pois alguns servidores de e-mail (Gmail, Terra, Outlook entre outros) utilizam algumas políticas rigorosas para o controle de spam, para resolver o problema é necessário implementar alguns métodos de segurança.
Para tornar o servidor confiável aos olhos do servidor destinatário é preciso de 4 componentes:
- rDNS (DNS Reverso)
- SPF
- DKIM
- DMARC
rDNS [1]
Acesse o seu servidor de DNS e configure a zona exemplo.com.br inserindo o seguinte registro:
email IN A 192.0.2.4 email IN AAAA 2001:0DB8::4 email IN MX 1 email.exemplo.com.br.
na zona reversa IPv4 2.0.192.in-addr.arpa insira:
4 IN PTR email.exemplo.com.br.
e zona reversa IPv6 0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa insira:
4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR email.exemplo.com.br.
De fora de sua rede, utilize o seguinte comando para verificar se o DNS reverso esta configurado corretamente:
dig -x 192.0.2.4 @IP.SERVIDOR.DNS
Se retornar email.exemplo.com.br esta funcionando corretamente, se não funcionar vide Servidor de DNS reverso.
SPF[2]
SPF é uma tecnologia para combater a falsificação de endereços de retorno dos emails (return-path). O mecanismo permite ao administrador de um domínio defina uma política SPF, onde são designados os endereços das máquinas autorizadas a enviar mensagens em nome do seu domínio e estabelecer critérios de aceitação de mensagens em função da checagem das políticas SPF publicadas.[3]
Instale o pacote com o comando:
# apt-get install postfix-policyd-spf-perl
Adicione o parâmetro abaixo no arquivo /etc/postfix/main.cf
policy-spf_time_limit = 3600s
e adicione o valor
check_policy_service unix:private/policy-spf
no final do parâmetro smtpd_recipient_restrictions, exemplo abaixo:
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service unix:private/policy-spf
Adicione as seguintes linhas no arquivo /etc/postfix/master.cf
policy-spf unix - n n - - spawn user=nobody argv=/usr/sbin/postfix-policyd-spf-perl
Pra finalizar, no servidor de DNS o seguinte registro do tipo TXT na zona exemplo.com.br, informando o IP do servidor de e-mail autorizado a usar o domínio exemplo.com.br como remetente:
email IN TXT "v=spf1 ip6:2001:0DB8::4 ip4:192.0.2.4 -all"
DKIM [4]
# apt-get install opendkim opendkim-tools
Edite o arquivo /etc/opendkim.conf
AutoRestart Yes AutoRestartRate 10/1h UMask 002 Syslog yes SyslogSuccess Yes LogWhy Yes Canonicalization relaxed/simple ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable Mode sv PidFile /var/run/opendkim/opendkim.pid Socket inet:12345@localhost SignatureAlgorithm rsa-sha256 OversignHeaders From
Edite o arquivo /etc/default/opendkim e altere para:
SOCKET="inet:12345@localhost"
No arquivo de configuração /etc/postfix/main.cf acrescente os parâmetros abaixo:
milter_protocol = 2 milter_default_action = accept
Para melhor organização crie um diretório opendkim e criar os arquivos abaixo:
# mkdir /etc/opendkim # touch /etc/opendkim/TrustedHosts # touch /etc/opendkim/KeyTable # touch /etc/opendkim/SigningTable # touch /etc/opendkim/keys
No arquivo /etc/opendkim/TrustedHosts adicione os hosts que podem enviar e-mails assinados:
localhost email.exemplo.com.br
Gerar chave privada e pública com o comando:
opendkim-genkey -s seletor -d exemplo.com.br
Salve a chave privata seletor.private na pasta /etc/opendkim/keys e proteja o acesso:
chown opendkim:opendkim seletor.private
Edite o arquivo de tabela de chaves /etc/opendkim/KeyTable
seletor._domainkey.exemplo.com.br exemplo.com.br:seletor:/etc/opendkim/keys/exemplo.com.br/seletor.private
Edite a tabela de assinaturas /etc/opendkim/SigningTable
*@exemplo.com.br seletor._domainkey.exemplo.com.br
Pra finalizar adicione no servidor de DNS um registro do tipo TXT constando a chave pública gerada pelo comando opendkim-genkey, arquivo seletor.txt:
seletor._domainkey IN TXT "v=DKIM1\; k=rsa\; p=ADDLLSKKCKAKSSSKALS..."
Reinicie os serviços:
# systemctl restart postfix # systemctl restart opendkim
Realize um teste de envio de e-mail, para confirmar visualize o arquivo de log mail.log e verifique se a seguinte informação consta no log "DKIM-Signature field added"
DMARC
Testes
Cliente de e-mail
PHPMailer
$mail = new PHPMailer(); $mail->Host = "IP.DO.SERVIDOR"; $mail->SMTPKeepAlive = true; $mail->Debugoutput = 'html'; $mail->IsSMTP(); $mail->Port = 587; $mail->SMTPAutoTLS = true; $mail->SMTPSecure = 'tls'; //$mail->SMTPDebug = 3; // Opcional $mail->SMTPAuth = true; $mail->Username = "usuario"; $mail->Password = "senha"; $mail->CharSet = 'UTF-8'; $mail->SetFrom('usuario@exemplo.com.br', 'Fulano'); // $mail->AddReplyTo('email@exemplo.com.br', 'Ciclano'); // Opcional $mail->IsHTML(true); $mail->Subject = "Assunto"; $mail->setLanguage('pt-br'); $mail->AltBody = ""; $body = "Corpo do e-mail aqui"; $mail->MsgHTML($body); $mail->AddAddress("e-mail do destinatário aqui"); if (!$mail->Send()) //erro else //sucesso