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
Hostname: mailserver
Domínio: saitam.int
1.1 Editar o arquivo /etc/hosts
# vim /etc/hosts IP mailserver.saitam.int mailserver1.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: saitam3. 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/dovecot4.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 = no4.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:~/Maildir4.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.pem5. 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.
- 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.
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 = noanonymousOs dados de autenticação no servidor SMTP do GMail encontra-se no arquivo /etc/postfix/sasl/sasl_passwd
[smtp.gmail.com] seuemail@gmail:PasswordGMailAjuste 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/genericO 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.comA 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.
# 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_mappingsEm 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=yes7.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=1Reiniciar 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 FetchmailInstalaçã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/null9. 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é-requisitosNecessá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 = 128M10.3 Criação do VirtualHost no Apache para o WebMail Roundcube
# 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
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!







