Servidor de Email Seguro com Postfix - Amavis - Opendkim - Opendmarc

Vamos retomar o blog com postagens de estudos feitos por mim durante esses dois últimos anos. Que foram um pouco conturbados. com isso o blog acabou ficando um pouco de lado! Mas vamos voltar à Ativa.

Com a demanda de diminuir o número de emails Spams que chegam dentro de uma organização, e tornar segura a comunicação com servidores externos.

Vamos montar um ambiente de e-mail seguro, virtualizado. O meu ambiente será montado com uma vm do Ubuntu 14.04. Porém todos os pacotes utilizados, podem ser baixados em Red Hat que o funcionamento é igual.

Esse servidor faz o básico sobre tratar Spams e autenticar os e-mails enviados para fora. Existem mais soluções que fazem o mesmo como nessa lista disponibilizada pelo grupo Zimbrasil.

https://docs.google.com/spreadsheets/d/1Cj-8mtDjwZuQH2ArlL6IjR45I3efo6VGgQkKZ4SzXnM/edit#gid=0

Os requisitos mínimos para a instalação do servidor são:

   – Processador dual core (Intel/AMD);

   – 2 Gb de RAM;

   – 40 GB de disco;

   – 4 GB de SWAP;



Assim garantimos que não falte recurso mesmo quando ocorrer um flood ao servidor.

Após instalar o servidor, vamos atualizar o servidor:
# apt-get update && apt-get upgrade

Instalar os pacotes do postfix, amavis, spamassasin e clamav:
– postfix:
# apt-get install postfix
– amavis, spamassasin e clamav:
# apt-get install amavisd-new spamassassin clamav-daemon
– Pacotes que melhoram a detecção de SPAM:
# apt-get install libnet-dns-perl libmail-spf-perl pyzor razor
– Pacotes para melhorar o scan de virus:
# apt-get install arj bzip2 cabextract cpio file gzip lha nomarch pax rar unrar unzip unzoo zip zoo


Obs: Durante a instalação do Postfix o pacote irá pedir uma configuração. Marque com nenhuma configuração ou configuração de Site.

Após instalar todos os pacotes acima, é necessário adicionar os usuários Clamav e Amavis nos grupos:

# adduser clamav amavis

# adduser amavis clamav

– Adicionar o pyzor e razor no amavis (executar os comandos abaixo):

# su - amavis -s /bin/bash

# razor-admin -create

# razor-admin -register

# pyzor discover

- Configuração do Postfix:

Salve uma cópia do arquivo /etc/postfix/main.cf e crie um novo:

vim /etc/postfix/main.cf

Adicione esse arquivo de configuração:
myhostname = mta.falcomer.corp #Nome do servidor
mydestination = falcomer.corp # Dominio de destino dos e-mails
mynetworks = 127.0.0.0/8, 10.0.0.1/32
#servidores que vão enviar e-mail. ( relay aberto)
relay_domains = $mydestination # Dominio que é feito o Relay
# Habilitando TLS. Desse modo, mesmo a conexao na porta 25 funciona com criptografia TLS ativada.
# Incoming
smtpd_tls_cert_file=/etc/ssl/falcomer.corp.crt
smtpd_tls_key_file=/etc/ssl/falcomer.corp.key
smtpd_use_tls=yes
smtpd_tls_auth_only=yes
smtpd_tls_security_level=may
smtpd_tls_mandatory_ciphers=high
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database =
btree:${data_directory}/smtpd_scache
# Outgoing Saida de e-mails criptografada
smtp_tls_cert_file=/etc/ssl/falcomer.corp.crt
smtp_tls_key_file=/etc/ssl/falcomer.corp.key
smtp_use_tls=yes
smtp_tls_security_level=may
smtp_tls_mandatory_ciphers=high
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_session_cache_database =
btree:${data_directory}/smtp_scache
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_pipelining,
reject_invalid_hostname,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unauth_destination,
check_client_access hash:/etc/postfix/rbl_override_whitelist, #libera e-mails sem passar por nenhum filtro.
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
##reject_rbl_client b.barracudacentral.org,
reject_rbl_client dnsbl.sorbs.net,
check_policy_service inet:127.0.0.1:10023, # Envia o e-mail para o postgrey
check_policy_service unix:private/policy-spf, #Envia o e-mail para o SPF
reject_unknown_recipient_domain,
permit
# DKIM (8891), DMARC (8893)
# ————————————–
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891, inet:localhost:8893
non_smtpd_milters = $smtpd_milters
message_size_limit = 40240000
transport_maps = hash:/etc/postfix/transport # Encaminha os e-
mals depois de tratados
local_recipient_maps =
content_filter = smtp-amavis:[127.0.0.1]:10024 #Configura o
amavis
smtpd_banner = $myhostname ESMTP (ASMG)
policy-spf_time_limit = 3600s

Criar o arquivo /etc/postfix/rbl_override_whitelist, para liberar domínios e e-mails para não passar em nenhuma verificação.

# vim /etc/postfix/rbl_override_whitelist
amcharts.com OK
licinet@licinet.com.br OK
licinet.com.br OK
*licinet.com.br OK

Configurar arquivo /etc/postfix/transport , este arquivo contem o servidor que o postfix vai entregar o e-mail após ser tratado.

# vim /etc/postfix/transport

Adicione a linha abaixo com o servidor que recebera os e-mails ( Exchange / Zimbra):

falcomer.corp smtp:[10.0.0.220]

Executar o comando postmap para adicionar a configuração do postfix:

# postmap /etc/postfix/rbl_override_whitelist

# postmap /etc/postfix/transport

Caso necessário executar o postfix na porta 587:

Modifique o arquivo /etc/postfix/master.cf e descomente a linha:

submission inet n - n - - smtpd

Configurando o Amavis:

Descomente as linhas abaixo do arquivo /etc/amavis/conf.d/15-content_filter_mode:

@bypass_virus_checks_maps = (\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Agora já esta ativado a checagem de spam e anti-vírus.

Após ativar as checagens vamos customizar algumas configurações do amavis, vamos criar uma whitelist e blacklist para o amavis (funciona apenas para checagem de spam, não funciona para as outras checagens) e customizar a pontuação necessária para classificar como SPAM. No arquivo /etc/amavis/conf.d/50-user podemos customizar essas configurações:

Integração do Amavis com o postfix:


Adicionar o contudo abaixo no fim do arquivo /etc/postfix/master.cf:
 
Abaixo da linha “pickup unix n – – 60 1 pickup” : -o content_filter= -o receive_override_options=no_header_body_checks

No final do arquivo:


smtp-amavis unix – – – – 2 smtp

-o smtp_data_done_timeout=1200

-o smtp_send_xforward_command=yes

-o disable_dns_lookups=yes

-o max_use=20

127.0.0.1:10025 inet n – – – – smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown
_recipient_checks
Após essa configuração o Amavis foi integrado ao postfix.

Tunando o Amavis:

O arquivo /etc/amavis/conf.d/50-user é utilizado para customizar a configuração do servidor Amavis.

Whitelist e Blacklist:

Vamos utilizar uma Whitelist e Blacklist dentro do amavis para manter as outras verificações ativas e liberar apenas spam. Se for necessário liberar um domínio de todas as verificações. Adicionar na configuração do postfix como mostrado acima.
Adicionar no arquivo:
#blacklist e Whitelist
read_hash(\%whitelist_sender, ‘/etc/amavis/whitelist’);
read_hash(\%blacklist_sender, ‘/etc/amavis/blacklist’);

Criar os dois arquivos:
touch /etc/amavis/whitelist

touch /etc/amavis/blacklist

Um exemplo para adicionar e-mails e domínios nos dois arquivos:
.palotina.pr.gov.br
contato@fieg.org.br



Pontuação de SPAM:

Também no arquivo de configuração é adicionado no final (antes da linha 1} ) o controle de pontuação do spamassassin:
@local_domains_acl = ( “.” );
$log_level = 2;
$syslog_priority = ‘debug’;
$sa_spam_subject_tag = “”;
#$sa_tag_level_deflt = 0.5; # add spam info headers if at, or
above that level
$sa_tag_level_deflt = undef; # add spam info headers if at, or
above that level
$sa_tag2_level_deflt = 0.5; # add ‘spam detected’ headers at that
level
$sa_kill_level_deflt = 10; # triggers spam evasive actions
$sa_dsn_cutoff_level = 9; # spam level beyond which a DSN is not
sent
#$final_spam_destiny = D_PASS;
$final_spam_destiny = D_DISCARD; # default
# $final_spam_destiny = D_BOUNCE; # debian default
#$final_spam_destiny = D_PASS; # ubuntu default, recommended as sender is usually faked
## A tag X-Spam-Flag: YES/NO é adicionada com o comando $sa_tag_level_deflt = undef;

Onde podemos adicionar uma regra no servidor de e-mail para enviar diretamente para o lixo eletrônico do e-mail.

A tag $sa_tag2_level_deflt = 0.5; é onde fica definido o limite para ser considerado SPAM um e-mail o padrão é 5.0. Minha sugestão é de um numero de 2.0.

A tag $sa_kill_level_deflt = 10; ativa ações evasivas de e-mail. Com isso, caso o e-mail de spam chegue a essa pontuação o mesmo aciona a tag $final_spam_destiny = D_PASS; que pode descartar ou passar o e-mail. Ou colocar ele em quarentena.


Greylist:

Postgrey faz o controle de greylist no servidor de e-mail.

apt-get install postgrey

Após instalar modificar a configuração do arquivo /etc/default/postgrey:
 
POSTGREY_OPTS=”–inet=10023 –whitelist-clients=/etc/postgrey/whitelist_clients.local”

Dentro da configuração, vai o comando whitelist-clients para adicionar  uma lista de whitelist para e-mails não passarem pela whitelist.

OpenDKIM:

Configurar o OpenDKIM para assinar os e-mails enviados.

aptitude install opendkim opendkim-tools

Os arquivos de configuração consistem em:

/etc/opendkim.conf

/etc/default/opendkim

No arquivo /etc/default/opendkim descomentar a linha:

SOCKET=”inet:8891@localhost”

No arquivo /etc/opendkim.conf adicionar a seguinte configuração. Adicione as linhas:
 
Domain example.com
KeyFile /etc/postfix/dkim.key
Selector dkim


Mude o campo Domain para o domínio (falcomer.corp).

O campo Keyfile é onde ficará a chave gerada no comando abaixo e o campo Selector é utilizado na configuração de DNS.

Também adicionar essas linhas para os campos
 #libera o envio de email com o dominio falcomer.corp para o exchange.
ExternalIgnoreList /etc/mail/dkim/host
InternalHosts /etc/mail/dkim/host

Gerar a chave:

opendkim-genkey -t -s dkim -d example.com

mv dkim.private /etc/postfix/dkim.key

A chave gerada em conjunto com o arquivo texto. No arquivo texto contem um exemplo de configuração do DKIM para ser adicionada ao servidor DNS, abaixo a configuração feita no servidor DNS.
 
mail._domainkey.falcomer.corp IN TXT “v=DKIM1; k=rsa;
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0jPSwHU6
SMLTDc6h0v1pncfvGar6mQ8N8/gSCFk3i7JMwSlXDikBlZHFL9YE6
lPh/ko0qXkJJEJBlzPOJYYqkgKZtDcfzYxC/cJSD96UmuWmz18OpI19J
M9ZNl7Jo1J1O8J4FgsnwYGp/xMAxFxpoAk1qP9janIwdE5Zac1DiCw
IDAQAB” ; —– DKIM key dkim for falcomer.corp

Reinicie o Opendkim.

/etc/init.d/opendkim restart


OpenDMARC:

Instalar o OpenDMARC:

apt-get install opendmarc

Após a instalação editar o arquivo

vim /etc/opendmarc.conf
 
AuthservID mta.falcomer.corp
PublicSuffixList /etc/opendmarc/effective_tld_names.dat
RejectFailures false #Essa opção bloqueia mensagens que não passa no Opendmarc. Ativar para diminuir os Spams.
Syslog true
SyslogFacility mail

É necessário adicionar uma linha como no exemplo abaixo no servidor DNS externo da empresa:

_dmarc.falcomer.corp. IN TXT “v=DMARC1; p=none\; pct=100\; rua=mailto:diogo@falcomer.corp”


Reiniciar o Serviço:

/etc/init.d/opendmarc restart


Base do Spamassasin:

Backup da base:

sa-learn –backup > backup.spam

Restore da Base:

sa-learn –restore backup.spam

Reinciar os serviços

/etc/init.d/amavisd restart

/etc/init.d/postfix restart


Finalizado a configuração do servidor. Agora você já pode enviar e-mails de seu domínio seguro. 

Para realizar os testes e verificar a segurança. Utilize o site https://www.mail-tester.com/



Fontes:

https://blog.hamzahkhan.com/2014/02/08/securing-postfix-mail-server-greylisting-spf-dkim-dmarc-tls/

https://help.ubuntu.com/community/PostfixAmavisNew

https://help.ubuntu.com/lts/serverguide/mail-filtering.html

https://www.ijs.si/software/amavisd/amavisd-new-docs.html


Comentários

Postagens mais visitadas deste blog

Script de Checagem de Serviço.

Convertendo servidores Linux do Xen para VmWare ESX.