Mudanças entre as edições de "Servidor de Email"

De IFRS Campus Canoas
Ir para: navegação, pesquisa
 
(11 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
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 72: Linha 72:
  
 
  # 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 ==
  
Certamente ao enviar um e-mail a partir deste servidor para um destinatário válido, este e-mail irá cair na caixa de SPAM, isto porque o servidor recém criado não possui nenhum dos métodos de para melhorar a reputação na internet e ficar longe de blacklists de servidores spammers.
+
É 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 85: Linha 87:
 
=== rDNS <ref>https://wiki.canoas.ifrs.edu.br/index.php/DNS</ref> ===
 
=== rDNS <ref>https://wiki.canoas.ifrs.edu.br/index.php/DNS</ref> ===
  
Configure o servidor de DNS responsável pela autoridade da zona exemplo.com.br inserindo o seguinte registro:
+
Acesse o seu servidor de DNS e configure a zona exemplo.com.br inserindo o seguinte registro:
  email  IN    MX    1    exemplo.com.br.
+
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:
 
na zona reversa IPv4 2.0.192.in-addr.arpa insira:
  4      IN    PTR        exemplo.com.br.
+
  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:
 
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        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.
 +
 
 +
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<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 183: Linha 193:
 
=== DMARC ===
 
=== DMARC ===
  
== PHPMailer ==
+
=== Testes ===
 +
https://www.mail-tester.com/
 +
== Cliente de e-mail ==
 +
=== PHPMailer ===
 
  $mail = new PHPMailer();
 
  $mail = new PHPMailer();
 
  $mail->Host = "IP.DO.SERVIDOR";
 
  $mail->Host = "IP.DO.SERVIDOR";

Edição atual tal como às 08h51min de 19 de abril de 2018

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

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

  1. https://wiki.canoas.ifrs.edu.br/index.php/DNS
  2. https://help.ubuntu.com/community/Postfix/SPF
  3. http://antispam.br/admin/spf/
  4. https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy