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_domain4.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>10.4 Habilitar a porta 443 do VirtualHost# 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>
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!
duas coisas q nao deram certo aqui, é que o apt-get install php5-sasl nao existe nos repositorios..
ResponderExcluiroutra é 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
Instalou a versão do PHP 5 ou 7 no servidor?
ExcluirSe não encontrou o pacote php5-sasl, então provavelmente a versão do PHP é 7.