Instalando e Configurando Servidor de E-mail Postfix
Autor: Reginaldo | Publicado: 2016-12-27T07:00:00-02:00

O presente Howto será explicado a instalação e configuração do servidor de e-mail Postfix no GNU/Linux Debian 8.5. 

Note que você precisará configurar o DNS do domínio o qual irá criar as caixas de e-mail. Para tal você pode utilizar qualquer serviço que lhe permita configurar as entradas do tipo A, MX e TXT.

Neste howto será explicado como instalar e configurar o Postfix, Dovecot com SASL, filtros de e-mail ClamAV, Spamassassin e o Webmail Roundcube. 

Observação: O editor de texto usado para configurar os arquivos de configuração foi o Vim, então o atalho para salvar e sair é ESC +:x ou ESC + :wq 

1. Configuração do Servidor Mail 
Hostname: mailserver 
Domínio: saitam.int 

1.1 Editar o arquivo /etc/hosts  
# vim /etc/hosts 
IP     mailserver.saitam.int     mailserver 

1.2 Editar o arquivo /etc/hostname  
# vim /etc/hostname  
mailserver

# hostname -F /etc/hostname 

2. Instalação dos pacotes do MTA Postfix 

# apt-get update 
# apt-get install postfix postfix-doc dovecot-imapd dovecot-pop3d amavisd-new arj cabextract cpio lzop nomarch ripole tnef unrar zoo 

Durante a instalação do pacote do Postfix será questionado quanto ao tipo de mail server que estará configurando, selecione Internet Site. Também será questionado sobre o nome do mail server, digite no campo o seu hostname. 
Observa os screenshots abaixo: 
 

 

 

2.1 Criar o aliases 
# vim /etc/aliases  

postmaster: root
root: saitam


3. Criar certificados SSL auto-assinados 
# apt-get install openssl ca-certificates 
Para ter uma maior segurança é necessário criar um certificado digital SSL por você mesmo ou comprar um assinado, porém para fins didáticos será usado o openssl. 

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mailserver.saitam.int.key -out /etc/ssl/certs/mailserver.saitam.int.crt  

3.1 Ajuste de permissão  
chmod 600 /etc/ssl/private/mailserver.saitam.com.br.key 
chmod 600 /etc/ssl/certs/mailserver.saitam.int.crt 

4. Configuração do Postfix 

Antes é bom fazer o backup do arquivo original 
# mv /etc/postfix/main.cf /etc/postfix/main.cf.orig  
Agora criar o arquivo main.cf novo com as suas configurações 
# vim /etc/postfix/main.cf

# Informações de domínio, hostname, redes de acesso ao e-mail e o mailbox
mydomain = saitam.int
myhostname = mailserver.$mydomain
myorigin = $mydomain
mydestination = $myhostname, $mydomain, localhost.saitam.int, localhost
mynetworks = 127.0.0.0/8, 192.168.1.0/24, 192.168.10.0/24
home_mailbox = ~/Maildir/
#mailbox_command = procmail -a "$EXTENSION"
#espaço de 1GB = 1024*1024*1024
mailbox_size_limit = 1073741824
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

# indica quem irá armazenar os e-mails
virtual_transport = dovecot

# SASL parameters
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes

# 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_auth_only = yes
smtpd_tls_cert_file =  /etc/ssl/certs/mailserver.saitam.int.crt

smtpd_tls_key_file = /etc/ssl/private/mailserver.saitam.com.br.key

smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

#Segurança
# Aceitar ligacoes apenas a partir da rede local
smtpd_client_restrictions = permit_mynetworks,
  reject

# Clientes locais podem enviar emails para qualquer endereco
smtpd_recipient_restrictions = permit_mynetworks,
  reject_unauth_destination

# Rejeitar ligacoes de clientes que nao saibam o seu hostname
smtpd_helo_restrictions = reject_unknown_sender_domain

# Rejeitar email de dominios que nao existem
smtpd_sender_restrictions = reject_unknown_sender_domain



4.1Configuração do SMTP com autenticação SASL 
Antes o backup do arquivo original 
# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
# vim /etc/dovecot/dovecot.conf
Descomentar a linha 33 
base_dir = /var/run/dovecot

4.2 Alterações internas do Dovecot localizadas em /etc/dovecot/conf.d/ 

Editar o arquivo /etc/dovecot/conf.d/10-auth.conf 
# vim /etc/dovecot/conf.d/10-auth.conf
Descomentar a linha 10 
disable_plaintext_auth = no 

4.3 Habilitar o local das mensagens por usuário  
Editar o arquivo /etc/dovecot/conf.d/10-mail.conf   
# vim /etc/dovecot/conf.d/10-mail.conf
Adicionar a linha abaixo 
mail_location = maildir:~/Maildir 

4.4 Habilitar os protocolos pop3 e imap   
Editar o arquivo /etc/dovecot/conf.d/10-master.conf 
# vim /etc/dovecot/conf.d/10-master.conf  
Descomentar/Adicionar as linhas correspondentes abaixo 
 
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}


4.5 Habilitar o SSL  
O Dovecot apenas aceita as extensões .pem do SSL, no caso será feito uma cópia dos arquivos .crc e .key gerados via openssl no item 3.  
# cp /etc/ssl/certs/mailserver.saitam.int.crt  /etc/ssl/certs/mailserver.saitam.int.pem  
# cp /etc/ssl/private/mailserver.saitam.int.key /etc/ssl/private/mailserver.saitam.int.pem  
Editar o arquivo /etc/dovecot/conf.d/10-ssl.conf  
# vim /etc/dovecot/conf.d/10-ssl.conf  
Adicione o caminho correspondente ao certificado e chave do OpenSSL 

ssl_cert = < /etc/ssl/certs/mailserver.saitam.int.pem
ssl_key = < /etc/ssl/private/mailserver.saitam.int.pem


5. SMTP Relay  
Para enviar um e-mail para uso externo, precisa resolver os seguintes itens:

O servidor SMTP do fornecedor de acesso Internet (ISP) deve aceitar conexão ao servidor.
O endereço do remetente deve ser de um domínio registrado para poder receber respostas.


Para contornar esses itens, nada mais simples do que utilizar servidores e endereços válidos. Com isso ao enviar e-mails para uso externo, precisa fazer isso.

O servidor deverá enviar e-mail através de um servidor SMTP externo. Caso necessário deverá autenticar-se como utilizador válido.
O endereço e-mail deverá ser substituído por outro e-mail válido no uso externo.


Será usado o servidor SMTP do GMail (smtp.gmail.com) 

Adicione no arquivo /etc/postfix/main.cf  para o relay SMTP 
# vim /etc/postfix/main.cf

#relay
relayhost = [smtp.gmail.com]


5.1 Configurar a ligação TLS com SASL_AUTH  
Configurar a ligação encriptada (TLS) e autenticada (SASL_AUTH), também o arquivo que contém os dados de autenticação (password_maps) 

# vim /etc/postfix/main.cf 

# SASL SUPPORT FOR SERVERS
#
# The following options set parameters needed by Postfix to enable
# Cyrus-SASL support for authentication of mail servers.
#
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous


Os dados de autenticação no servidor SMTP do GMail encontra-se no arquivo /etc/postfix/sasl/sasl_passwd

[smtp.gmail.com] seuemail@gmail:PasswordGMail


Ajuste de permissão para segurança 
# chmod 600 /etc/postfix/sasl/sasl_passwd  

A cada alteração do arquivo /etc/postfix/sasl/sasl_passwd deve atualizar a base de dados correspondente. 
# postmap /etc/postfix/sasl/sasl_passwd 

6. Mapeamento de endereços de e-mails  
Ao enviar e-mails para o exterior, os endereços internos (saitam@saitam.int) devem ser substituídos por endereços externos (seuemail@gmail.com) 

O Postfix deve ser configurado para usar o arquivo de mapeamento de endereços, o que é feito no arquivo /etc/postfix/main.cf 

# vim /etc/postfix/main.cf
Adicionar a linha abaixo 

smtp_generic_maps = hash:/etc/postfix/generic


O arquivo com mapeamento de endereços consiste em uma lista de endereços locais e os correspondentes endereços externos. 
O tamanho da lista não está limitado, podendo ser aumentada para conter os endereços dos diversos utilizadores locais. 

Adapte para o seu usuário local e externo do SMTP 
# vim /etc/postfix/generic  

saitam@saitam.int seuemail@gmail.com


A cada alteração do arquivo /etc/postfix/generic deve atualizar a base de dados correspondente

# postmap /etc/postfix/generic 

7. Filtros de E-mail  
O uso de filtros no servidor de e-mail permite as implementações de anti-vírus e anti-spam. 
Esses filtros podem ser complementados com a ligação a um sistema anti-vírus, com o clamav e/ou sistema anti-spam, como o spamassassin. 

7.1 Amavisd-new  
# apt-get install amavisd-new 

Editar o arquivo /etc/postfix/main.cf 
Incluir no final do arquivo 
# vim /etc/postfix/main.cf 

# amavisd-new scanner
#
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings


Em seguida configurar o serviço do postfix para receber os e-mails filtrados do amavisd-new 

Incluir no final do arquivo 
# vim /etc/postfix/master.cf  

# amavisd-new scanner
#
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
  -o smtp_generic_maps=

127.0.0.1:10025 inet n - - - - smtpd
  -o content_filter=
  -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_end_of_data_restrictions=
  -o smtpd_restriction_classes=
  -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
  -o local_header_rewrite_clients=
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o strict_rfc821_envelopes=yes


7.2 Filtro Anti-vírus ClamAV 
Instalação do ClamAV  
# apt-get install clamav clamav-docs clamav-daemon clamav-freshclam 

Editar o arquivo /etc/amavis/conf.d/15-content_filter_mode 

# vim /etc/amavis/conf.d/15-content_filter_mode  

# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:

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


Criar usuário clamav ao grupo amavis 
# adduser clamav amavis  

Reiniciar os serviços 
# service amavis restart 
# service clamav-daemon restart   

7.3 Filtro Anti-spam Spamassassin  
# apt-get install spamassassin spamc 

Ativar o daemon spamassassin no boot 
#  systemctl enable spamassassin.service 

Editar o arquivo /etc/default/spamassassin para as regras de filtro 
# vim /etc/default/spamassassin 

# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=1


Reiniciar os serviços 
# service spamassassin restart 
# service postfix restart  
# service dovecot restart  

Na configuração por default, os e-mails considerados spam são colocados em quarentena e nenhuma informação chega ao destinatário. Nesta configuração queremos que os emails indiquem apenas as probabilidades de serem spam, deixando ao utilizador a escolha das acções a realizar. 
As configurações personalizadas encontra-se no arquivo /etc/amavis/conf.d/50-user 

# vim /etc/amavis/conf.d/50-user 

use strict;

#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt = undef; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 9999; # triggers spam evasive actions

#------------ Do not modify anything below this line -------------
1; # insure a defined return


A “sensibilidade” do filtro anti-spam pode ser afinada alterando o valor de $sa_tag2_level_deflt: Com um valor mais baixo, serão necessários menos indicadores para que a mensagem seja considerada spam. No entanto, este valor não deve ser inferior a 5, ou corremos o risco de todas as mensagens, mesmo as mais legítimas, começarem a ser classificadas como spam. 

Reiniciar o serviço amavisd-new 
# service amavis restart 

8. Descarga de E-mail  
Por fim, o servidor deverá descarregar as mensagens dos servidores remotos para o servidor local, de um modo automatizado. 

8.1 Fetchmail  
Instalação do pacote fetchmail 
# apt-get install fetchmail 

Criar um arquivo em algum lugar do servidor 
# vim /home/usuario/.fetchmailrc 
poll pop.gmail.com proto pop3 user "seuemail" pass "password" is "usuario@saitam.int" options ssl keep 

Neste exemplo, o fetchmail irá descarregar o email do utilizador seuemail do servidor pop.gmail.com, utilizando o protocolo pop3 e uma ligação ssl e reencaminha-o para o utilizador usuario@saitam.int 

A opção keep mantém as mensagens no servidor, o que é útil em fase de testes. Posteriormente, essa opção poderá ser retirada. Com alguns servidores pop3, é necessário acrescentar a opção uidl, que força o lado cliente a manter uma lista das mensagens já descarregadas e que garante que apenas as novas mensagens serão descarregadas. 

Ajuste de permissão
#chmod 600 /home/usuario/.fetchmailrc 

Execução automatizada 
Adicionar no cron para execução do fetchmail a cada 5 minutos 
# contrab -e 

# m h dom mon dow command
*/5 * * * * /usr/bin/fetchmail &> /dev/null


9. Criação de usuário e diretório da caixa de e-mail  
9.1 Criação de usuário  

# adduser saitam --shell=/bin/false 
# adduser taise --shell=/bin/false 
 

9.2 Criação dos diretórios para recebimento de e-mail do usuário 

# mkdir /home/saitam/Maildir 
# mkdir /home/saitam/Maildir/cur 
# mkdir /home/saitam/Maildir/new 
# mkdir /home/saitam/Maildir/tmp 

# mkdir /home/taise/Maildir 
# mkdir /home/taise/Maildir/cur 
# mkdir /home/taise/Maildir/new 
# mkdir /home/taise/Maildir/tmp 
 

9.3 Criar o grupo email  
# groupadd email 

9.4 Setar permissão aos diretórios de usuários  

# chown saitam:email /home/saitam/Maildir 
# chown saitam:email /home/saitam/Maildir/cur 
# chown saitam:email /home/saitam/Maildir/new 
# chown saitam:email /home/saitam/Maildir/tmp 

# chown taise:email /home/taise/Maildir 
# chown taise:email /home/taise/Maildir/cur 
# chown taise:email /home/taise/Maildir/new 
# chown taise:email /home/taise/Maildir/tmp 

 

OBS: A caixa postal do usuário deve ser criada para cada novo usuário do sistema. 

10. WebMail  
O WebMail, permite consultar o e-mail de forma pela interface web .
Atualmente existem dois: Squirrelmail e Roundcube. No presente howto será utilizado o Roundcube 

O Roundcube é a aplicação web utilizada como webmail. Para que os usuários do servidor de e-mail não sejam obrigados a utilizar uma aplicação cliente como Thunderbird ou Outlook;

10.1 Instalação dos pacotes pré-requisitos  
Necessário instalar o Apache, PHP e MySQL 
# apt-get install apache2 php5 php5-cli mysql-server php5-curl php5-gd php5-imap php5-mcrypt php5-mysql  

Também outros pacotes 
# apt-get install php5-sasl php-auth-sasl php-net-smtp libnet-smtp-server-perl libnet-smtp-ssl-perl libidn2-0-dev libemail-mime-perl php-mail-mime php-mail-mimedecode 

E o Net_IDNA2 do Perl 
# pear install Auth_SASL Net_SMTP Net_IDNA2-0.1.1 Mail_mime Mail_mimeDecode 

10.2 Ajustes de parâmetros no PHP  
Edite o arquivo /etc/php5/apache2/php.ini para ajustar os parâmetros do PHP conforme abaixo: 

# vim /etc/php5/apache2/php.ini 

# Ajuste de memória máxima utilizada nas aplicações web 
memory_limit = 128M 
# Ajuste o tamanho máximo do arquivo aceito pelo PHP. 
# anexos maiores que 2MB 
upload_max_filesize = 16M 
post_max_size = 16M 
# Ajuste básicos de segurança, para não identificar que esteja 
#  executando PHP no servidor 
expose_php = Off 
# Ajuste para não perder a sessão o tempo todo (tempo em segundos) 
session.gc_maxlifetime = 21600 
# Ajuste de fuso horário 
# Lista de timezones http://php.net/manual/en/timezones.php 
date.timezone = America/Sao_Paulo 
 

10.3 Criação do VirtualHost no Apache para o WebMail Roundcube  
Criar o diretório webmail no root do Apache 
# mkdir /var/www/html/webmail 
# vim /var/www/html/webmail/mailserver.conf 

< VirtualHost *:80>
  ServerAdmin root@saitam.int
  ServerName mailserver.saitam.int
  DocumentRoot /var/www/html/webmail
  < Directory /var/www/html/webmail>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  Allow from all
  < /Directory>
  ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access-mailserver.log combined
< /VirtualHost>

< IfModule mod_ssl.c>
  
  # Se possuir um IP específico comente a linha acima e descomente abaixo
  # Ajustando o IP
  ServerAdmin root@saitam.int
  ServerName mailserver.saitam.int
  DocumentRoot /var/www/html/webmail
  < Directory /var/www/html/webmail>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  < /Directory>
  ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log
  CustomLog ${APACHE_LOG_DIR}/ssl-mailserver.log combined
  SSLEngine on
  # Caminhos para os dados de certificado
  SSLCertificateFile /etc/ssl/certs/mailserver.saitam.int.crt
  SSLCertificateKeyFile /etc/ssl/private/mailserver.saitam.int.key
  # Em alguns casos é preciso ajustar os certificados de cadeia ou de autoridade,
  # verifique com sua certificadora os detalhes
  #SSLCACertificateFile /etc/ssl/certs/cacert.pem
  #SSLCertificateChainFile /path/to/my/ca-bundle.crt
  # Ajustes para o Internet Explorer
  BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
  < /VirtualHost>
< /IfModule>


10.4 Habilitar a porta 443 do VirtualHost  
Edite o arquivo /etc/apache2/ports.conf para configurar o ServerName do VirtualHost 

# vim /etc/apache2/ports.conf 

ServerName mailserver
NameVirtualHost *:80
Listen 80
< IfModule mod_ssl.c>
  NameVirtualHost *:443
  # Nota: Clientes com Windows XP não suportam SNI 
  #e portanto você não pode usar um
  # mesmo IP para mais de um virtualhost!
  Listen 443
< /IfModule>


10.5 Habilitar o VirtualHost e SSL  
Habilita o VirtualHost
# a2ensite mailserver.conf 
Habilita SSL 
# a2enmod rewrite ssl 
Reinicia o Apache 
# service apache2 restart 

10.6 Configuração de informação de Banco de Dados  
Criando o banco de dados roundcube no MySQL 
# mysql -u root -p 
Enter password: < digite a senha de root que foi definida na instalação do MySQL > 
# mysql> create database roundcube character set utf8;  

Criado o usuário roundcube com sua respectiva senha para o banco criado anteriormente 
# mysql> GRANT ALL on roundcube.* to roundcube@localhost identified by ‘roundcube_senha’; 
Query OK, 0 rows affected (0.00 sec) 
# mysql> quit 
Bye 

 # cp /var/www/html/webmail/config/config.inc.php.sample /var/www/html/webmail/config/config.inc.php  
Editar /var/www/html/webmail/config/db.inc.php. 
# vim /var/www/html/webmail/config/config.inc.php  
$config['db_dsnw'] = 'mysql://roundcube:roundcube@roundcube_senha@localhost/roundcube'; 
Ajuste de permissão do diretório de instalação por segurança 
# chmod 000 /var/www/html/webmail/installer/ 

10.7 Instalação do Roundcube  
Acessar até o diretório /var/www/html/webmal 
#cd /var/www/html/webmail  
Download: 
#wget -c 'https://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.1.4/roundcubemail-1.1.4.tar.gz/download' -O roundcubemail-1.1.4.tar.gz  
Extração: 
#tar xvzf roundcubemail-1.1.4.tar.gz  
Mover para o diretório raiz do Roundcube 
#mv roundcubemail-1.1.4/* .  
Mover o arquivo .htaccess para o diretório raiz do Roundcube 
#mv roundcubemail-1.1.4/.htaccess .  
Remover o arquivo o diretório diretório roundcubemail-1.1.4/ e compactado 
#rm -rf roundcubemail-1.1.4/ roundcube.tar.gz  
Ajuste de  permissão 
#chown www-data:www-data temp/ logs/  
Importação da base do roundcube
# mysql -u roundcube -p  
Enter password: < digite a senha definida para roundcube, a mesma colocada no arquivo config.inc.php > 
# mysql> use roundcube; 
# mysql> source /var/www/html/webmail/SQL/mysql.initial.sql ; 
# mysql> quit 
Bye 

Acesse no browser http://mailserver.saitam.int/webmail/installer/ e verifique se há algum detalhe faltando na configuração do servidor. 
Se tiver OK, o botão NEXT será liberado e assim processguir nas etapas solicitadas com base do servidor 

Acesse no browser em outro computador https://mailserver.saitam.int/webmail 
 

Referências 
[1]  http://www.postfix.org/  
[2]  http://www.postfix.org/postconf.5.html  
[3]  http://www.postfix.org/postconf.5.html  
[4]  http://www.postfix.org/SASL_README.html#client_sasl  
[5]  http://www.postfix.org/SASL_README.html#client_sasl  
[6]  http://postfix.state-of-mind.de/patrick.koetter/smtpauth/smtp_auth_mailservers.html  
[7]  http://postfix.state-of-mind.de/patrick.koetter/smtpauth/smtp_auth_mailservers.html  
[8]  http://www.dovecot.org/   
[9]  https://www.openssl.org/  
[10]  https://www.linode.com/docs/email/clients/install-roundcube-on-ubuntu-14-04  

Feito!