Servidor de e-mails no Debian com Dovecot + Postfix + MySQL

01/12/2013 por Paulo H. Cazarotto

Este artigo irá explicar como configurar um servidor de e-mails desde o princípio em um ambiente Linux baseado na distribuição Debian. O texto é longo e há muitos passos, mas tentei resumir e explicar o que é mais importante para o funcionamento do serviço. Este passo a passo é baseado em vários artigos que li e por sinal é a solução de e-mails que uso hoje em alguns servidores, as principais referências estão no final do artigo.

O serviço de e-mail é composto por várias aplicações, cada uma com uma função específica, e a configuração do grupo de aplicativos é o maior desafio. Aqui irei abordar desde a configuração do hostname e DNS até a configuração do webmail e espero que ajude a qualquer um que queira montar seu próprio servidor de e-mails e largar de mão serviços gratuitos (que sempre lhe cobram/leem algo, mesmo sem você saber).

Que serviços estão envolvidos?

O funcionamento de um servidor de e-mail depende de vários serviços, e muitos são necessários para garantir uma boa qualidade do serviço, filtrando e identificando por exemplo SPAMs. Abaixo uma lista de aplicações e qual a responsabilidade de cada uma delas.

Postfix: O postfix é responsável por despachar os e-mails através do protocolo SMTP. Sua aplicação de e-mail e os servidores externos irão conectar neste serviço para enviar novos e-mails para sua caixa de e-mail ou encaminhar a outro servidor de e-mails;

Dovecot: O Dovecot é responsável por gerenciar as caixas de e-mail no seu servidor. Quando você conecta sua caixa de e-mail por IMAP ou POP3 é este serviço que estará utilizando. O Postfix também usa o Dovecot para armazenar novos e-mails recebidos;

MySQL: O MySQL é a base de dados utilizada pelo Postfix e Dovecot para armazenar as informações de caixas de domínios, caixas de e-mail e senhas destas caixas de e-mail;

Amavisd-new: Normalmente servidores de e-mail possuem um aplicativo de checagem de vírus e SPAM. O Amavisd-new é a interface entre o MTA (Mail Transfer Agent) e estes filtros. O Postfix encaminha um e-mail recebido ao Amavisd-new e este interage com um ou mais serviços para identificar e marcar possíveis problemas no e-mail.

ClamAV: Este serviço é um famoso anti-virus open source utilizado por muitos servidores para filtrar rapidamente uma grande quantidade de arquivos;

Postgrey: O Postgrey tem como função controlar e-mails suspeitos, os deixando em quarentena até que outros e-mails de mesma origem cheguem ou o tempo de identificação de novos vírus seja atingido. Isto evita que SPAMs ou vírus novos se propaguem rapidamente pela Internet enquanto outros serviços não tem suas assinaturas de vírus atualizadas;

SpamAssassin: O Postfix também usa o serviço do SpamAssassin para detectar com base em pontuação possíveis SPAMs. Este serviço é um dos mais utilizados e possui diversas formas de detecção, desde SPF até análise estatística de palavras suspeitas;

PostfixAdm: Esta aplicação web é usada apenas para gerenciar as caixas de e-mail na base MySQL. É através dela que você fará o cadastro dos domínios e das caixas de e-mail, podendo também criar aliases e limitar as contas;

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;

Apache: O Apache é um servidor web utilizado para servir outros dois serviços, o RoundCube e o PostfixAdm. Junto ao Apache também instalaremos os módulos do PHP, linguagem na qual ambos serviços web foram desenvolvidos;

OpenSSL: Esta aplicação é responsável por gerar os certificados e CSRs utilizados para garantir a criptografia tanto na conexão HTTP como nas conexões SSL/TLS do IMAP, POP e SMTP;

Iptables: Esta aplicação será utilizada para configurar o firewall do servidor.

Note que além destas aplicações todas 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.

Configurando o ambiente

Como já citei no início do artigo, este tutorial é voltado a distribuição Debian (6 ou 7). Algumas variações devem acontecer em outras distribuições porém não há grandes diferenças, e o Google é seu amigo caso fique preso em algum dos passos. Esta configuração já utilizei para um VPS (Virtual Private Server)) de 512Mb de RAM e um vCore na DigitalOcean e acredito que suporta muito bem cerca de 50 contas de médio uso com IMAP, seu limite é apenas o espaço em disco. Em um servidor um pouco melhor como de 2Gb e 8 vCores do Linode você pode muito bem instalar este mail server e configurar várias páginas web de uso moderado sem medo de ter atrasos consideráveis no recebimento de e-mails.

Para começar, você precisa decidir qual será o nome do seu servidor de e-mails. Isto é importante pois você baseará toda sua instalação neste mesmo nome e configurará no DNS dos seus domínios este mesmo nome.

Normalmente domínios como exemplo.com possuem um servidor separado para gerenciar os e-mails, como mail.exemplo.com. Isto é natural visto que o serviço de e-mail é considerado crítico na maioria das empresas, sendo assim é ideal um servidor dedicado a esta função, tanto por segurança quanto por questões de desempenho. No nosso exemplo iremos considerar o nome mail.exemplo.com. Lembre-se que ter um servidor dedicado ou adicionar “mail” ao nome do domínio não é regra, só uma boa prática.

Comece acessando o servidor em modo root, e defina o hostname do servidor com o nome que escolheu para o seu mail server.

  1. echo “mail.exemplo.com” > /etc/hostname
  2. hostname F /etc/hostname

Note que em alguns serviços de hospedagem seu servidor irá trocar o hostname automaticamente devido ao DHCP instalado por padrão. Para evitar que o hostname mude edite o arquivo /etc/default/dhcpcd e comente a linha onde há algo parecido com SET_HOSTNAME='yes'.

Não esqueça de editar seu arquivo de hosts (/etc/hosts) e de configurar os nomes da própria máquina para o endereço loopback.

  1. 127.0.0.1 localhost mail mail.paulo.cc

Este artigo irá armazenar tanto as caixas de e-mail como as aplicações de webmail e configuração de contas em um diretório comum no /var do servidor chamado mailserver. Aproveite e atualize os pacotes instalados no servidor com o apt-getpois precisará instalar várias aplicações nos próximos passos.

  1. mkdir /var/mailserver
  2. aptget update
  3. aptget upgrade

Observe que neste tutorial estarei referenciando sempre o domínio exemplo.com e mail.exemplo.com. Substitua estes domínios pelos domínios que você escolheu para seu servidor!

Certificados digitais para a conexão SSL/TLS

Entenda que serviços de e-mails foram desenvolvidos em um tempo onde a preocupação com segurança não era o maior foco. Portanto os protocolos de comunicação comuns como SMTP, IMAP e POP3 não possuem nenhuma criptografia no nível de protocolo em sua implementação inicial, tanto que as senhas são passadas de forma aberta e qualquer usuário mal intencionado pode ler estas senhas. Com o tempo o SSL e o TLS foram desenvolvidos nestes protocolos para garantir um mínimo de proteção.

Neste artigo precisaremos utilizar um conjunto de certificado e chave privada para garantir esta segurança. O ideal seria que você adquirisse um certificado digital em uma autoridade certificadora, da mesma forma que faz com um certificado digital HTTP para o Apache por exemplo, porém isto irá lhe gerar um custo que pode variar entre 10 a 1000 reais dependendo muitas vezes da fama da autoridade certificadora.

Se você já tem um certificado digital SSL para seu servidor web você pode utilizar o mesmo para as configurações de e-mail. O único inconveniente é que você precisa usar o mesmo nome de domínio do seu servidor web para o servidor de e-mail. É claro que você pode também utilizar um certificado wildcard para utilizar em todos os casos, mas aí o valor do certificado é maior ainda.

Para nosso tutorial vamos criar um certificado digital assinado por uma entidade certificadora criada por nós mesmos. Na prática só há dois problemas relacionados a isso. O primeiro é que todos os clientes que conectarem no seu servidor verão uma mensagem de certificado emitido por uma certificadora desconhecida (a famosa tela vermelha ou o aviso para confirmar a exceção de segurança, que há um risco). E o segundo é que certificados deste tipo não servem muito bem para conexões iniciadas em SSL/TLS.

Há três formas, falando em questões de segurança, de um cliente conectar ao serviço de SMTP/IMAP/POP3: [LIST] Insegura: Quando o cliente conecta e não pede por criptografia da conexão, deixando tudo se passar em conexão de texto puro, onde qualquer um pode ler a informação enviada;

Segura por STARTTLS: Que se parece muito com a insegura no início da conexão, porém logo que conecta pede por um “upgrade” na conexão. Nesta situação o cliente conecta como no primeiro caso e antes de enviar qualquer dado sensível o cliente solicita o início da comunicação criptografada (pelo comando STARTTLS);

Segura por SSL/TLS: Onde o cliente já conecta o servidor requisitando uma conexão 100% criptografada. Neste caso o servidor já inicia o processo de conexão enviando os dados de certificado com a chave pública para criptografia por parte do cliente; [/LIST]

O último método com certeza é o mais seguro, porém exige que o certificado digital tenha uma autoridade válida. Você pode tentar gerar certificados e instalar em todas as máquinas, porém ainda precisará distribuir os certificados para todos que usarem o servidor. Nesta situação o ideal é adquirir um certificado digital de uma autoridade certificadora. Neste artigo iremos garantir que ocorra pelo menos o nível de segurança do STARTTLS que em todo caso é suficiente para garantir que ninguém roube sua senha de e-mail. Para tal utilize os seguintes comandos para gerar um certificado que permite assinar outros certificados e também criar um certificado assinado por esta certificadora.

  1. # Você precisará informar o nome do seu servidor de e-mail (exatamente igual) quando a seguinte
  2. # pergunta for feita:
  3. # Common Name (e.g. server FQDN or YOUR name) []
  4. # No nosso caso preencheriamos com mail.exemplo.com
  5. openssl req x509 nodes days 365 newkey rsa:2048 \
  6. keyout /etc/ssl/private/mail.exemplo.com.key \
  7. out /etc/ssl/certs/mail.exemplo.com.crt
  8.  
  9. # Ajustamos as permissões
  10. chmod 600 /etc/ssl/private/mail.exemplo.com.key
  11. chmod 600 /etc/ssl/certs/mail.exemplo.com.crt

Configurando o Apache+MySQL+PHP

Para instalar os pacotes necessários execute o comando seguinte. Em algum momento será solicitado que preencha uma senha para o usuário root do banco de dados, não perca esta senha!

  1. aptget install apache2 php5 php5cli mysqlserver php5curl php5gd php5imap php5mcrypt php5mysql php5intl

Ajustes finos no PHP

Após instalar todos os pacotes recomendo ajustar alguns parâmetros no PHP. Edite o arquivo /etc/php5/apache2/php.iniajustando os seguintes valores.

  1. # Ajuste e mamória máxima que pode ser utilizada pelas aplicações web
  2. memory_limit = 128M
  3. # Ajuste o tamanho máximo do arquivo aceito pelo PHP. Importante para que o webmail aceite
  4. # anexos maiores que 2MB
  5. upload_max_filesize = 16M
  6. post_max_size = 16M
  7. # Ajuste básicos de segurança, para não identificar que você roda PHP no servidor
  8. expose_php = Off
  9. # Ajuste para não perder a sessão o tempo todo (tempo em segundos)
  10. session.gc_maxlifetime = 21600
  11. # Ajuste de fuso horário
  12. # Lista de timezones http://php.net/manual/en/timezones.php
  13. date.timezone = America/Sao_Paulo

Configuração do Virtualhost no Apache

Será preciso ativar alguns módulos do Apache para que o webmail funcione e o servidor aceite conexões HTTPS. Para tal ative tanto o módulo rewrite, que permite que URLs sejam sobrescritas como o módulo ssl.

  1. a2enmod rewrite ssl

No Apache também recomendo ajustar alguns parâmetros de segurança, evitando que identifiquem qual é a versão e tecnologia usada. Para tal edite o arquivo /etc/apache2/conf.d/security e ajuste os dois parâmetros abaixo.

  1. ServerTokens Prod
  2. ServerSignature Off

Após precisamos criar um Virtualhost para o webmail e também para o aplicativo usado para gerar as contas de e-mail. Crie um novo arquivo de texto chamado de mailserver dentro pasta de virtualhosts (/etc/apache2/sites-available/mailserver) e insira o seguinte conteúdo.

  1. <VirtualHost *:80>
  2. ServerAdmin seuemail@exemplo.com
  3. ServerName mail.exemplo.com
  4. DocumentRoot /var/mailserver/webmail
  5. <Directory /var/mailserver/webmail>
  6. Options Indexes FollowSymLinks MultiViews
  7. AllowOverride All
  8. Order allow,deny
  9. Allow from all
  10. </Directory>
  11. ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log
  12. LogLevel warn
  13. CustomLog ${APACHE_LOG_DIR}/access-mailserver.log combined
  14. </VirtualHost>
  15.  
  16. <IfModule mod_ssl.c>
  17. <VirtualHost *:443>
  18. # Se possuir um IP específico comente a linha acima e descomente abaixo
  19. # Ajustando o IP
  20. #<VirtualHost 1.2.3.4:443>
  21. ServerAdmin seuemail@exemplo.com
  22. ServerName mail.exemplo.com
  23. DocumentRoot /var/mailserver/webmail
  24. <Directory /var/mailserver/webmail>
  25. Options Indexes FollowSymLinks MultiViews
  26. AllowOverride All
  27. Order allow,deny
  28. allow from all
  29. </Directory>
  30. ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log
  31. CustomLog ${APACHE_LOG_DIR}/ssl-mailserver.log combined
  32. SSLEngine on
  33. # Caminhos para os dados de certificado
  34. SSLCertificateFile /etc/ssl/certs/mail.exemplo.com.crt
  35. SSLCertificateKeyFile /etc/ssl/private/mail.exemplo.com.key
  36. # Em alguns casos é preciso ajustar os certificados de cadeia ou de autoridade,
  37. # verifique com sua certificadora os detalhes
  38. #SSLCACertificateFile /etc/ssl/certs/cacert.pem
  39. #SSLCertificateChainFile /path/to/my/ca-bundle.crt
  40. # Ajustes para o Internet Explorer
  41. BrowserMatch “MSIE [2-6]” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
  42. BrowserMatch “MSIE [17-9]” ssl-unclean-shutdown
  43. </VirtualHost>
  44. </IfModule>

Em alguns casos é necessário configurar também o ServerName e instruir o apache de forma que ele use virtualhosts para os domínios. Para isso edite o arquivo /etc/apache2/ports.conf e ajuste conforme o conteúdo a seguir:

  1. ServerName mail
  2. NameVirtualHost *:80
  3. Listen 80
  4. <IfModule mod_ssl.c>
  5. # Se possuir mais de um IP na máquina e quiser usar um específico para o SSL
  6. # Não esqueça de ajustar o IP no arquivo do virtualhost e descomentar a linha abaixo
  7. # e comentar a liga abaixo dela
  8. # NameVirtualHost 1.2.3.4:443
  9. NameVirtualHost *:443
  10. # Nota: Clientes com Windows XP não suportam SNI e portanto você não pode usar um
  11. # mesmo IP para mais de um virtualhost!
  12. Listen 443
  13. </IfModule>

Não esqueça de criar a pasta do webmail e ativar o virtualhost criado.

  1. mkdir /var/mailserver/webmail
  2. a2ensite mailserver
  3. /etc/init.d/apache2 restart

Ajustes no MySQL e bases de dados

Após configurar os domínios e o PHP você precisa ajustar algumas configurações do MySQL, recomendo editar o arquivo /etc/mysql/my.cnf e comentar a linha do bind-address e também evitar que o MySQL consulte o nome de todos os clientes que consultam o banco de dados, adicionando o skip-name-resolv.

  1. #bind-address = 127.0.0.1
  2. skipnameresolv

Não esqueça de reiniciar o banco de dados para que ele carregue as configurações. Aproveite para conectar o banco de dados e criar a base de dados que armazenará as preferências do webmail e as próprias contas de e-mail.

  1. /etc/init.d/mysql restart
  2. mysql uroot p # Utilize a senha que inseriu na instalação do banco de dados

Após digitar a senha um terminal do MySQL irá abrir. Execute o SQL abaixo para criar tanto as bases como os usuários. Lembre-se do usuário, senha, e nome dos bancos. Você precisará destas informações nas configurações dos demais aplicativos.

  1. CREATE DATABASE mail;
  2. GRANT ALL ON mail.* TO ‘mail’@‘127.0.0.1’ IDENTIFIED BY ‘mailpass’;
  3. CREATE DATABASE roundcube;
  4. GRANT ALL ON roundcube.* TO ‘roundcube’@‘127.0.0.1’ IDENTIFIED BY ‘roundpass’;
  5. FLUSH PRIVILEGES;

Configurando o Dovecot

O Dovecot cria uma determinada estrutura de pastas e arquivos para armazenar os e-mails no disco rígido. Porém é preciso criar as pastas básicas e criar um usuário específico do Linux. Note o UID 150 informado no comando useradd, é importante usar um UID não existente, caso não queira informar anote o UID criado pois você precisará dele para as configurações de segurança dos próximos passos.

  1. mkdir /var/mailserver/vmail
  2. useradd r u 150 g mail d /var/mailserver/vmail s /sbin/nologin c “Mailserver dir” vmail
  3. chmod 770 /var/mailserver/vmail
  4. chown vmail:mail /var/mailserver/vmail

Agora que criamos as pastas, você precisa usar o apt-get mais uma vez para baixar todos os pacotes relacionados ao Dovecot, aproveite para instalar os pacotes do Postfix, ClamAV, Amavis e SpamAssassin.

  1. aptget install postfix postfixmysql dovecotmysql dovecotimapd postgrey amavis clamav clamavdaemon spamassassin libnetdnsperl \
  2. pyzor razor arj bzip2 cabextract cpio file gzip nomarch pax unzip zip

Durante a instalação do pacote do Postfix você 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.

Após instalar os pacotes recomendo ajustar as permissões da pasta do Dovecot para que o usuário vmail (que criamos anteriormente) possa ler estas informações também.

  1. chown R vmail:dovecot /etc/dovecot
  2. chmod R orwx /etc/dovecot

Agora o processo mais trabalhoso começa, você precisará criar/editar os arquivos de configuração do módulo SQL do Dovecot, para que ele leia os domínios e caixas de e-mail do banco de dados que criamos anteriormente. O primeiro passo é criar o arquivo /etc/dovecot/conf.d/auth-sql.conf.ext e preenche-lo com o seguinte conteúdo. Este arquivo irá definir os arquivos que contêm as Querys de banco para usuários e senhas.

  1. passdb {
  2. driver = sql
  3. args = /etc/dovecot/dovecotsql.conf.ext
  4. }
  5. userdb {
  6. driver = sql
  7. args = /etc/dovecot/dovecotsql.conf.ext
  8. }

O arquivo que referênciamos agora precisa ser criado. Crie /etc/dovecot/dovecot-sql.conf.ext e preencha com as informações abaixo. Note que neste arquivo precisamos passar o usuário e senha do banco de dados mail, que criamos anteriormente. Caso você tenha trocado a pasta das caixas de e-mail você também precisará ajustar as Querys de acordo.

  1. driver = mysql
  2. connect = host=localhost dbname=mail user=mail password=mailpass
  3. default_pass_scheme = MD5CRYPT
  4. password_query = \
  5. SELECT username as user, password, ‘/var/mailserver/vmail/%d/%n’ as userdb_home, \
  6. ‘maildir:/var/mailserver/vmail/%d/%n’ as userdb_mail, 150 as userdb_uid, 8 as userdb_gid \
  7. FROM mailbox WHERE username = ‘%u’ AND active = ‘1’
  8. user_query = \
  9. SELECT ‘/var/mailserver/vmail/%d/%n’ as home, ‘maildir:/var/mailserver/vmail/%d/%n’ as mail, \
  10. 150 AS uid, 8 AS gid, concat(‘dirsize:storage=’, quota) AS quota \
  11. FROM mailbox WHERE username = ‘%u’ AND active = ‘1’

Com as Querys configuradas precisamos alterar algumas configurações no arquivo /etc/dovecot/conf.d/10-auth.conf. Neste arquivo você pode configurar várias definições de autenticação do Dovecot. Por enquanto só altere as informações citadas abaixo. Não substitua o arquivo inteiro.

  1. disable_plaintext_auth = yes
  2. auth_mechanisms = plain login
  3.  
  4. # Comente a autenticação do auth-system e habilite a autenticação por sql
  5. # !include auth-system.conf.ext
  6. !include authsql.conf.ext

Agora você precisa ajustar as configurações de segurança do Dovecot, para que ele use apenas os arquivos que estão nas caixas de e-mail dele. Edite o arquivo /etc/dovecot/conf.d/10-mail.conf e ajuste os parâmetros abaixo.

  1. mail_location = maildir:/var/mailserver/vmail/%d/%n
  2. mail_uid = vmail
  3. mail_gid = mail
  4. # lembre-se do uid usado na criação do usuário vmail
  5. first_valid_uid = 150
  6. last_valid_uid = 150

O Dovecot irá servir também conexões criptografadas, para que isso aconteça corretamente você precisa configurar o arquivo /etc/dovecot/conf.d/10-ssl.conf, ajustando os caminhos para os certificados que criamos no início do artigo. Caso você tenha um certificado intermediário provido pela sua autoridade certificadora não se esqueça de configurar o ssl_ca. Este arquivo pode ser tanto um arquivo .pem como um .crt.

  1. ssl = yes
  2. ssl_cert = </etc/ssl/certs/mail.exemplo.com.crt
  3. ssl_key = </etc/ssl/private/mail.exemplo.com.key
  4. # Certificado com senha, descomente e preencha a linha abaixo
  5. #ssl_key_password =
  6. # Certificado intermediário, descomente e preencha a linha abaixo
  7. #ssl_ca = </etc/ssl/certs/cacert.pem
  8. ssl_verify_client_cert = no

Ajuste o arquivo /etc/dovecot/conf.d/10-master.conf para que o Postfix possa consultar as caixas de e-mail. Verifique o trecho onde há o service auth e substitua apenas o conteúdo deste bloco.

  1. service auth {
  2. unix_listener authuserdb {
  3. mode = 0600
  4. user = vmail
  5. group = mail
  6. }
  7. unix_listener /var/spool/postfix/private/auth {
  8. mode = 0660
  9. user = postfix
  10. group = postfix
  11. }
  12. }

A última configuração necessária do Dovecot é o e-mail do postmaster. Caso você não ajuste este parâmetro é bem provável que tenha vários erros a cada recebimento de e-mail /etc/dovecot/conf.d/15-lda.conf.

  1. postmaster_address = postmaster@exemplo.com

Quanto ao Dovecot, era isso pelo momento. O próximo passo é configurar o Postfix.

Configurando o Postfix

O Postfix também precisa que todas as SQLs responsáveis pelo mapeamento de caixas e e-mails sejam configuradas. Para isso edite os seguintes arquivos. Note que todos eles precisam do usuário, senha e nome da base mail que criamos anteriormente. Você pode substituir o conteúdo destes arquivos completamente caso eles já existam.

Arquivo /etc/postfix/mysql_virtual_alias_domainaliases_maps.cf

  1. user = mail
  2. password = mailpass
  3. hosts = 127.0.0.1
  4. dbname = mail
  5. query = SELECT goto FROM alias,alias_domain
  6. WHERE alias_domain.alias_domain = ‘%d’
  7. AND alias.address=concat(‘%u’, ‘@’, alias_domain.target_domain)
  8. AND alias.active = 1

Arquivo /etc/postfix/mysql_virtual_alias_maps.cf

  1. user = mail
  2. password = mailpass
  3. hosts = 127.0.0.1
  4. dbname = mail
  5. table = alias
  6. select_field = goto
  7. where_field = address
  8. additional_conditions = and active = ‘1’

Arquivo /etc/postfix/mysql_virtual_domains_maps.cf

  1. user = mail
  2. password = mailpass
  3. hosts = 127.0.0.1
  4. dbname = mail
  5. table = domain
  6. select_field = domain
  7. where_field = domain
  8. additional_conditions = and backupmx = ‘0’ and active = ‘1’

Arquivo /etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf

  1. user = mail
  2. password = mailpass
  3. hosts = 127.0.0.1
  4. dbname = mail
  5. query = SELECT maildir FROM mailbox, alias_domain
  6. WHERE alias_domain.alias_domain = ‘%d’
  7. AND mailbox.username=concat(‘%u’, ‘@’, alias_domain.target_domain )
  8. AND mailbox.active = 1

Arquivo /etc/postfix/mysql_virtual_mailbox_maps.cf

  1. user = mail
  2. password = mailpass
  3. hosts = 127.0.0.1
  4. dbname = mail
  5. table = mailbox
  6. select_field = CONCAT(domain, ‘/’, local_part)
  7. where_field = username
  8. additional_conditions = and active = ‘1’

O Postfix também pode realizar uma limpeza de cabeçalhos no seu e-mail. Sempre que você envia um e-mail as aplicações costumam adicionar vários cabeçalhos identificando a aplicação que você usa de e-mails e o IP da sua máquina. Na configuração do Postfix iremos configurar para que alguns destes cabeçalhos sejam removidos, para tal crie o arquivo /etc/postfix/header_checks e adicione o seguinte conteúdo.

  1. /^Received:/ IGNORE
  2. /^UserAgent:/ IGNORE
  3. /^XMailer:/ IGNORE
  4. /^XOriginatingIP:/ IGNORE

Agora vamos para as configurações do Postfix de fato. Há muitos parâmetros ajustáveis, porém recomendo editar os seguintes no /etc/postfix/main.cf. Irei explicar brevemente os mais importantes através de comentários.

  1. # O banner é a mensagem apresentada quando algum usuário conecta na porta do Postfix
  2. smtpd_banner = $myhostname ESMTP $mail_name
  3. # Desative o biff, visto que nenhum usuário usará o e-mail diretamente pelo bash
  4. biff = no
  5.  
  6. # Desative a adição automática de e-mail, pois vamos servir mais de um domínio
  7. append_dot_mydomain = no
  8.  
  9. # Integração com o Dovecot
  10. smtpd_sasl_type = dovecot
  11. smtpd_sasl_path = private/auth
  12. smtpd_sasl_auth_enable = yes
  13. broken_sasl_auth_clients = yes
  14. smtpd_sasl_security_options = noanonymous
  15. smtpd_sasl_local_domain =
  16. smtpd_sasl_authenticated_header = yes
  17.  
  18. # Configurações de SSL/TLS
  19. # Configure aqui exatamente os certificados que você criou anteriormente e que foram configurados no dovecot
  20. smtpd_tls_cert_file=/etc/ssl/certs/mail.exemplo.com.crt
  21. smtpd_tls_key_file=/etc/ssl/private/mail.exemplo.com.key
  22. #smtpd_tls_CAfile=/etc/ssl/certs/cacert.pem
  23. smtpd_use_tls=yes
  24. smtpd_tls_security_level = may
  25. smtp_tls_security_level = may
  26.  
  27. # Algumas configurações adicionais do SSL/TLS, é importante pelo menos deixar o loglevel = 1 durante a instalação
  28. smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
  29. smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
  30. smtp_tls_note_starttls_offer = yes
  31. smtpd_tls_loglevel = 1
  32. smtpd_tls_received_header = yes
  33. smtpd_tls_session_cache_timeout = 3600s
  34. tls_random_source = dev:/dev/urandom
  35.  
  36. # Configuramos quais são os filtros usados para restringir o recebimento de e-mail
  37. # Note que há inclusive o endereço do Postgrey (na porta 10023)
  38. smtpd_relay_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
  39.  
  40. smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
  41.  
  42. # Configuramos quais são os filtros usados para restringir quem pode conectar ao servidor
  43. smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
  44.  
  45. # Configuramos quais são os filtros usados para restringir quem envia e-mail
  46. smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
  47.  
  48. # Restrições baseadas no contexto de quem já está conectado ao servidor
  49. smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org
  50.  
  51. # Restrições de filtragem de acordo com o conteúdo do e-mail
  52. smtpd_data_restrictions = reject_unauth_pipelining
  53.  
  54. # Algumas configurações de timeout
  55. unknown_local_recipient_reject_code = 450
  56. maximal_queue_lifetime = 7d
  57. minimal_backoff_time = 1000s
  58. maximal_backoff_time = 8000s
  59. smtp_helo_timeout = 60s
  60. smtpd_recipient_limit = 16
  61. smtpd_soft_error_limit = 3
  62. smtpd_hard_error_limit = 12
  63.  
  64. # Algumas configurações de segurança
  65. smtpd_helo_required = yes
  66. smtpd_delay_reject = yes
  67. disable_vrfy_command = yes
  68.  
  69. # Configuração de hostname e nome de origem
  70. myhostname = mail.exemplo.com
  71. myorigin = /etc/hostname
  72.  
  73. # Configuração de destino (se você tiver erros, preencha “.” ou deixe vazio)
  74. mydestination = localhost
  75. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  76. mailbox_size_limit = 0
  77. recipient_delimiter = +
  78. inet_interfaces = all
  79. mynetworks_style = host
  80.  
  81. # Configurações de pastas e dos arquivos que permitem a leitura de domínios e caixas de e-mail
  82. virtual_mailbox_base = /var/mailserver/vmail
  83. virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
  84. virtual_uid_maps = static:150
  85. virtual_gid_maps = static:8
  86. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
  87. virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
  88.  
  89. # Indicamos quem irá armazenar os e-mails
  90. virtual_transport = dovecot
  91.  
  92. # Indicamos qual é o filtro de e-mail usado para antivírus e detecção de SPAM
  93. content_filter = amavis:[127.0.0.1]:10024
  94.  
  95. # Indicamos o arquivo de cabeçalhos que iremos remover
  96. header_checks = regexp:/etc/postfix/header_checks
  97.  
  98. # Indicamos que o Postfix não deve adicionar o cabeçalho com o nome da caixa de e-mail que enviou o e-mail
  99. enable_original_recipient = no

Você precisará editar também o arquivo /etc/postfix/master.cf. Este arquivo configura todos os processos que devem ser usados pelo Postfix para gerenciar o recebimento e envio de e-mails. Recomendo que faça um backup do arquivo original para consultar posteriormente e substitua todo o arquivo com o seguinte conteúdo.

  1. # Postfix master process configuration file. For details on the format
  2. # of the file, see the master(5) manual page (command: “man 5 master”).
  3. #
  4. # Do not forget to execute “postfix reload” after editing this file.
  5. #
  6. # =================================================
  7. # service type private unpriv chroot wakeup maxproc command + args
  8. # (yes) (yes) (yes) (never) (100)
  9. # =================================================
  10.  
  11. # SMTP na porta 25
  12. smtp inet n smtpd
  13.  
  14. # SMTP com STARTTLS na porta 587
  15. submission inet n smtpd
  16. o syslog_name=postfix/submission
  17. o smtpd_tls_security_level=encrypt
  18. o smtpd_sasl_auth_enable=yes
  19. o smtpd_enforce_tls=yes
  20. o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
  21. o smtpd_sasl_tls_security_options=noanonymous
  22.  
  23. # SMTP com SSL/TLS na porta 465
  24. smtps inet n smtpd
  25. o syslog_name=postfix/smtps
  26. o smtpd_tls_wrappermode=yes
  27. o smtpd_sasl_auth_enable=yes
  28. o smtpd_tls_auth_only=yes
  29. o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
  30. o smtpd_sasl_security_options=noanonymous,noplaintext
  31. o smtpd_sasl_tls_security_options=noanonymous
  32.  
  33. # Outros processos relacionados a limpeza da fila de e-mails e filtragens
  34. pickup fifo n 60 1 pickup
  35. o content_filter=
  36. o receive_override_options=no_header_body_checks
  37. cleanup unix n 0 cleanup
  38. qmgr fifo n n 300 1 qmgr
  39. tlsmgr unix 1000? 1 tlsmgr
  40. rewrite unix trivialrewrite
  41. bounce unix 0 bounce
  42. defer unix 0 bounce
  43. trace unix 0 bounce
  44. verify unix 1 verify
  45. flush unix n 1000? 0 flush
  46. proxymap unix n proxymap
  47. proxywrite unix n 1 proxymap
  48. smtp unix smtp
  49. relay unix smtp
  50. showq unix n showq
  51. error unix error
  52. retry unix error
  53. discard unix discard
  54. local unix n n local
  55. virtual unix n n virtual
  56. lmtp unix lmtp
  57. anvil unix 1 anvil
  58. scache unix 1 scache
  59.  
  60. # Configuração da interface com o maildrop/sendmail
  61. maildrop unix n n pipe
  62. flags=DRhu user=vmail argv=/usr/bin/maildrop d ${recipient}
  63.  
  64. # Configuração da interface com o UUCP (se desejável)
  65. uucp unix n n pipe
  66. flags=Fqhu user=uucp argv=uux r n z a$sender $nexthop!rmail ($recipient)
  67.  
  68. # Outros métodos de envio de e-mail
  69. ifmail unix n n pipe
  70. flags=F user=ftn argv=/usr/lib/ifmail/ifmail r $nexthop ($recipient)
  71. bsmtp unix n n pipe
  72. flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp t$nexthop f$sender $recipient
  73. scalemailbackend unix n n 2 pipe
  74. flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemailstore ${nexthop} ${user} ${extension}
  75. mailman unix n n pipe
  76. flags=FR user=list argv=/usr/lib/mailman/bin/postfixtomailman.py
  77. ${nexthop} ${user}
  78.  
  79. # Integração com o Amavis e o SpamAssassin
  80. amavis unix 3 smtp
  81. o smtp_data_done_timeout=1200
  82. o smtp_send_xforward_command=yes
  83. o disable_dns_lookups=yes
  84. o max_use=20
  85. 127.0.0.1:10025 inet n smtpd
  86. o content_filter=
  87. o local_recipient_maps=
  88. o relay_recipient_maps=
  89. o smtpd_restriction_classes=
  90. o smtpd_delay_reject=no
  91. o smtpd_client_restrictions=permit_mynetworks,reject
  92. o smtpd_helo_restrictions=
  93. o smtpd_sender_restrictions=
  94. o smtpd_recipient_restrictions=permit_mynetworks,reject
  95. o smtpd_data_restrictions=reject_unauth_pipelining
  96. o smtpd_end_of_data_restrictions=
  97. o mynetworks=127.0.0.0/8
  98. o smtpd_error_sleep_time=0
  99. o smtpd_soft_error_limit=1001
  100. o smtpd_hard_error_limit=1000
  101. o smtpd_client_connection_count_limit=0
  102. o smtpd_client_connection_rate_limit=0
  103. o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
  104.  
  105. # Integração com o Dovecot
  106. dovecot unix n n pipe
  107. flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecotlda d $(recipient)

As opções usadas neste arquivo sobrescrevem as configurações do arquivo principal. Portanto caso mude algo no arquivo de configuração e o parâmetro não parece ter efeito, verifique aqui se o parâmetro não foi sobrescrito.

Configurando o Amavis, ClamAV e o SpamAssassin

A configuração destes três aplicativos é bem mais simples comparadas as configurações do Dovecot e Postfix. Para iniciar adicione os usuários do clamav e amavis aos grupos de cada um deles.

  1. adduser clamav amavis
  2. adduser amavis clamav

Edite o arquivo /etc/amavis/conf.d/15-content_filter_mode para indicar ao Amavis quais são as filtragens que ele deve realizar.

  1. @bypass_virus_checks_maps = (
  2. \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
  3.  
  4. @bypass_spam_checks_maps = (
  5. \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

O Amavis também vai precisar consultar os domínios existentes no servidor. Edite o arquivo /etc/amavis/conf.d/50-userpara ajustar o acesso ao banco de dados, indicar qual é o número máximo de processos paralelos e a pontuação de SPAM necessária (feita pelo SpamAssassin) para que o filtro adicione os cabeçalhos de pontuação. Neste caso colocamos um valor negativo para que o cabeçalho esteja sempre disponível.

  1. # Número de processos
  2. $max_servers = 3;
  3.  
  4. # Nível que irá apresentar
  5. $sa_tag_level_deflt = 9999;
  6. # Nível no qual irá considerar SPAM
  7. $sa_tag2_level_deflt = 5;
  8. # Sem isso nem todos os e-mails serão analisados
  9. @local_domains_maps = [‘.’];
  10.  
  11. @lookup_sql_dsn = (
  12. [‘DBI:mysql:database=mail;host=127.0.0.1;port=3306’,
  13. ‘mail’,
  14. ‘mailpass’]);
  15. $sql_select_policy = ‘SELECT domain from domain WHERE CONCAT(“@”,domain) IN (%k)’;
  16.  
  17. # $log_level = 2; # Nível de log, em produção deixe comentado

O SpamAssassin já está configurado para integrar com os outros aplicativos, basta editar o arquivo /etc/default/spamassassin para que o processo seja ativado e a rotina que atualiza as tabelas de probabilidade de SPAM sejam atualizadas automaticamente.

  1. ENABLED=1
  2. CRON=1

Reiniciando os serviços

Após toda a instalação reinicie todos os serviços que configuramos.

  1. service postfix restart
  2. service spamassassin restart
  3. service clamavdaemon restart
  4. service amavis restart
  5. service dovecot restart

Caso observe algum erro, verifique os arquivos /var/log/mail.log e /var/log/mail.err.

Instalando o PostfixAdm

Agora que todas as aplicações já foram configuradas podemos instalar o gerenciador de caixas de e-mail. Esta ferramenta open source é muito prática e basicamente gerencia as tabelas que foram criadas na base mail.

  1. cd /var/mailserver/webmail
  2. wget ‘http://bit.ly/1b7p2Cu’ O postfix.tar.gz
  3. tar xvzf postfix.tar.gz
  4. mv postfixadmin2.3.6/ postfixadm
  5. rm postfix.tar.gz

Você precisará configurar alguns parâmetros no arquivo /var/mailserver/webmail/postfixadm/config.inc.php para que a aplicação conecte a base de dados corretamente.

  1. $CONF[‘configured’] = true;
  2. $CONF[‘setup_password’] = ; // Deixe vazio por enquanto
  3. $CONF[‘postfix_admin_url’] = ‘http://mail.exemplo.com/postfixadm’;
  4. $CONF[‘admin_email’] = ‘root@mail.exemplo.com’;
  5. $CONF[‘database_type’] = ‘mysqli’;
  6. $CONF[‘database_host’] = ‘localhost’;
  7. $CONF[‘database_user’] = ‘mail’;
  8. $CONF[‘database_password’] = ‘mailpass’;
  9. $CONF[‘database_name’] = ‘mail’;

Entre em http://mail.exemplo.com/postfixadm/setup.php e digite algo no campo setup password (esta senha será útil apenas na instalação do PostfixAdm) e clique em criar administrador. Copie o Hash que será informado na tela e cole no parâmetro $CONF['setup_password'] conforme instruções.

Volte a página de setup (dê um F5 se já estiver nela) e crie o usuário administrador. Através deste usuário é que você poderá configurar os domínios e caixas de e-mail em http://mail.exemplo.com/postfixadm/login.php.

Acesse a URL de login e configure o domínio em Dominios > Adicionar. Depois clique em Virtual > Criar conta de e-mail para configurar sua primeira conta de e-mail.

Por segurança apague o arquivo setup.php, evitando assim que qualquer outro usuário tente configurar a conta de administrador.

  1. rm /var/mailserver/webmail/postfixadm/setup.php

Instalando o Roundcube

Para instalar o Roundcube o processo é simples. Baixe a versão atual e descompacte na pasta do webmail. Os comandos abaixo podem variar caso a versão do Roundcube seja outra (que não a 0.9.5).

  1. cd /var/mailserver/webmail
  2. wget ‘http://bit.ly/1c4eAtb’ O roundcube.tar.gz
  3. tar xvzf roundcube.tar.gz
  4. mv roundcubemail0.9.5/* .
  5. mv roundcubemail-0.9.5/.htaccess .
  6. rm -rf roundcubemail-0.9.5/ roundcube.tar.gz
  7. chown www-data:www-data temp/ logs/
  8. mysql -u roundcube -p -D roundcube < SQL/mysql.initial.sql

Acesse http://mail.exemplo.com/installer/ e verifique se há algum detalhe faltando na configuração do servidor. Não se preocupe com bases, você precisará apenas do MySQL.

No próximo passo configure o SMTP/IMAP e banco de dados.

Após as configurações clique em Create config. Será apresentada uma tela com dois arquivos de configuração. Crie e preencha ambos arquivos com os respectivos conteúdos apresentados na tela.

No caso edite o arquivo /var/mailserver/webmail/config/main.inc.php e /var/mailserver/webmail/config/db.inc.php. E depois de salvar ambos arquivos você já pode apagar a pasta do instalador do Roundcube, ela não é mais necessária.

  1. rm rf /var/mailserver/webmail/installer/

Garantindo o uso do HTTPS

Para garantir que nenhum usuário acesse o webmail sem estar em ambiente seguro (já que configuramos o SSL para HTTPS no passo de configuração do Apache) edite o arquivo /var/mailserver/webmail/.htaccess e adicione o seguinte conteúdo ao início do arquivo.

  1. RewriteEngine On
  2. RewriteCond %{SERVER_PORT} 80
  3. RewriteRule ^(.*) https://mail.exemplo.com/$1 [L]

Este redirecionamento forçará sempre o usuário a usar a porta 443 do Apache quando entrar no webmail. O que é o ideal, assim evitamos que um usuário desavisado tenha sua senha roubada por algum usuário mal intencionado.

Configurações de Firewall

Recomendo também a configuração de um Firewall, você pode ver o esquema de um Firewall básico aqui. E adicionar regras para liberar as portas importantes do serviço de e-mail. Nesta configuração que realizamos teremos as seguintes portas:

[LIST] 25 (SMTP): Porta de envio de e-mail sem criptografia;

80 (HTTP): Porta do servidor web, usada para acessar o Roundcube e o PostfixAdm sem criptografia;

110 (POP3): Porta do serviço POP3, usada normalmente para baixar e remover os e-mails baixados de uma caixa de e-mail, sem criptografia;

143 (IMAP): Porta do serviço IMAP, usada normalmente para consultar as caixas de e-mail, sem realizar o download e remoção dos e-mails baixados, com criptografia opcional por STARTTLS;

443 (HTTPS): Porta do servidor web, criptografada;

465 (SMTPS): Porta de envio de e-mails com camada de criptografia obrigatória por SSL/TLS;

587 (SMTP/SMTPS): Porta de envio de e-mail com camada de criptografia opcional por STARTTLS;

993 (IMAPS): Porta do serviço IMAP, com camada de criptografia obrigatória por SSL/TLS;

995 (POP3S): Porta do serviço POP3, com camada de criptografia obrigatória por SSL/TLS; [/LIST]

As regras do Iptables para liberar estas portas estão a seguir.

  1. iptables A INPUT p tcp m multiport destinationports 80,443 j ACCEPT
  2. iptables A INPUT p tcp m multiport destinationports 25,110,143 j ACCEPT
  3. iptables A INPUT p tcp m multiport destinationports 443,465,587,993,995 j ACCEPT

Observação importante sobre a porta 25: O Antispam.br indica que os provedores de Internet residenciais bloqueiem o acesso a porta 25 dos servidores, em uma medida para diminuir o uso de bots e ferramentas mal intencionadas que geram SPAM (veja mais aqui). Porém você não deve de forma alguma bloquear esta porta no seu Firewall. Caso você o faça poderá ter problemas no recebimento por parte de muitos domínios.

Configurações de DNS

Após toda a configuração do servidor ainda é importante configurar um serviço fora do seu servidor de e-mails. Neste caso o DNS. Este é responsável por indicar que seu servidor de e-mails para o domínio configurado no PostfixAdm (exemplo.com) é o mail.exemplo.com.

A primeira coisa que você deve fazer é configurar a entrada A e AAAA (se disponível IPv6) para o mail.exemplo.com. Recomenda-se usar uma entrada A ao invés de uma entrada CNAME por questões de verificação de antispam. Além desta configuração, você precisará configurar o DNS reverso.

DNS reverso é configurado através de uma entrada PTR, porém estas entradas só a empresa que lhe disponibilizou o IP pode configurar. É neste passo que algumas pessoas enfrentam problemas. Em provedores de serviço como Linode e DigitalOcean você possui uma opção no painel de controle para configurar você mesmo o nome do servidor. Em provedores como a Amazon AWS você precisará enviar um formulário requisitando a alteração do nome. Se você está tentando configurar um servidor em uma conexão ADSL com IP dinâmico você pode esquecer, seu provedor não irá atribuir um nome para seu IP.

Quando um serviço de e-mail recebe um e-mail informando que é de determinado IP com determinado domínio o servidor que recebeu o e-mail pode realizar uma consulta de DNS reverso, para tentar identificar o nome do seu servidor e associa-lo a uma lista de servidores “limpos” ou “sujos”, caracterizando como e-mail legítimo ou SPAM. Por isso é importante configurar o DNS reverso.

Após configurar o domínio exemplo.com no PostfixAdm você deve criar uma entrada MX neste domínio para o endereço mail.exemplo.com. Normalmente junto a esta configuração você terá a opção de definir um número relacionado a prioridade. Esta prioridade faz mais sentido quando você tem mais de um servidor de e-mails para um mesmo domínio (quando usar um servidor de backup) e quanto menor o valor, mais prioridade ele terá. Normalmente se usar apenas um servidor de e-mail configure com a prioridade 10.

Outra configuração muito importante para evitar que seus e-mails sejam caracterizados como SPAM é a configuração de uma entrada TXT chamada SPF. Esta entrada nada mais é que uma entrada TXT com um conteúdo similar ao informado abaixo.

"v=spf1 mx ip4:111.222.333.444 ip6:2600:aaaa::bbbb:cccc:dddd:eeee/64 a:exemplo.com -all"

Não vou explicar aqui a sintaxe do SPF pois é um pouco longa, você pode consultar EL{http://antispam.br/admin/spf/{a documentação completa do SPF no site do Antipam.br}LE. Basicamente o que indicamos acima é que se qualquer servidor de e-mail receber um e-mail do domínio onde este SPF está configurado, ele poderá confiar nos servidores MX configurados, ou no IPv4 indicado, ou no IPv6 indicado, ou ainda no IP do servidor exemplo.com. Caso contrário ele deverá considerar SPAM (-all).

Lembre-se que qualquer alteração de DNS que fizer você pode estar sujeito a esperar de 2 a 48 horas até que as regras de DNS propaguem pelos servidores de DNS. Então tente configurar certo de primeira =].

Testando o envio e recebimento de e-mails

Com tudo configurado, hora de testar o envio e recebimento de e-mails. Acesse https://mail.exemplo.com e faça login com o e-mail completo e a senha que você configurou quando criou a conta no PostfixAdm.

Tente enviar um e-mail para uma conta do Gmail ou de um e-mail que você já possui e verifique se o e-mail chega adequadamente. Depois tente fazer o processo reverso, respondendo o e-mail em questão. Caso veja alguma mensagem de erro ou o e-mail não chegue, tente observar os logs de erro. Com certeza eles lhe darão a pista do que está errado, se não lhe der exatamente o ponto que está falhando.

Você também pode tentar configurar o seu e-mail no Gmail ou no Thunderbird/Outlook. Mas preste atenção nos endereços usados e o tipo de criptografia. Caso não tenha configurado um certificado válido ou tenha algum bloqueio de Firewall você pode perder muito tempo tentando configurar o e-mail com SSL/TLS, use o STARTTLS.

Resolvendo problemas

Dê uma olhada nos logs, eles podem lhe ajudar a identificar qualquer problema. O mail.log lhe expõe exatamente o que acontece com os e-mails recebidos ou enviados, indicando inclusive a mensagem que o servidor destino enviou quando aceitou o e-mail enviado.

  1. tail f /var/log/mail.log /var/log/mail.err

Todos os e-mails enviados que estão pendentes de envio para outro servidor ficam na fila de envio chamada “mailqueue”. Para ver esta fila use o comando mailq no servidor.

Caso faça algum ajuste no postfix você pode forçar o reenvio dos e-mails na fila usando o comando sendmail -v -q.

Referências

Este artigo foi baseado principalmente nos artigos de ExRatione e Flurdy, que possui um dos artigos mais completos que já ví relacionados a servidores de e-mail baseados em Postfix.

Com certeza você encontrará outros tutoriais interessantes por aí caso não queira usar o Postfix ou o Dovecot. Na biblioteca do Linode há vários tutoriais.

[Voltar]