anúncios

terça-feira, 27 de dezembro de 2016

Instalando e Configurando Servidor de E-mail Postfix

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!

2 comentários:

  1. duas coisas q nao deram certo aqui, é que o apt-get install php5-sasl nao existe nos repositorios..

    outra é que não sei deonde surgiu esse arquivo "/var/www/html/webmail/config/config.inc.php.sample".. fiz todo o procedimento até aí, e esse arquivo nao foi criado

    ResponderExcluir
    Respostas
    1. Instalou a versão do PHP 5 ou 7 no servidor?
      Se não encontrou o pacote php5-sasl, então provavelmente a versão do PHP é 7.

      Excluir