Montando um servidor de E-mail Completo com Postfix+Dovecot+PostfixAdmin+SpamAssassin+SPF+RoundCubeMail+IPv4/IPv6 (Desatualizado)

post-emails

Um novo tutorial mais atualizado em: https://blog.remontti.com.br/3744

Neste tutorial vou ensinar como configurar um servidor de e-mail com domínios virtuais com integração dos usuários/domínios no banco de dados MySQL.
– Postfix para nosso MTA.
– Dovecot como servidor Imap e Pop.
– Postfixadmin para o gerenciamento de contas de Emails e domínios
– Spamassassin, Clamav e o Amavis para controle de Anti-Spam e Anti-Vírus
– RoundCubeMail para Webmail

OBS: Não vou entrar em muitos detalhes, pois o tuto já ficou bem longo. E desculpe pelos erros de portuga, mas vou fazendo na corrida.

CENÁRIOS

IP: 250.250.0.6 / 2000:fff:250:250:0::6
Reverso sobre os IPS 250.250.0.6 / 2000:fff:250:250:0::6: mail.dominiorev.com.br
Domínios virtuais: remontti.com.br / dominiorev.com.br / você pode ter diversos

REQUISITOS

1 – Ter configurado DNS Autoritativo e Reverso sobre seus IPS. (Não necessariamente no mesmo servidor)
2 – Debian 8 Jessie recomendo uma instalação limpa do Debian
3 – Serviço Web Rodando
4 – Servidor Atualizado: # apt update && apt upgrade

AJUSTES

Ajuste o nome do servidor alterando alguns parâmetros do sistema.

Configure sua interface de rede. Vou deixar um modelo, onde o bloco de IPv4 é um /28 (255.255.255.240) e um /64 para IPv6. Estou usando IPs com base no cenário apresentado no tutorial [Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6)]

Reinicie seu servidor

OBS: Lembrando que a rota default é entregue via route advertise, então se você não estiver entregando desta forma será necessários criar uma rota estática, no Debian você pode adicionar o seguinte parâmetro em /etc/rc.local ( ip -6 route add ::/0 via 2000:fff:250:250:0::1 ) assim toda vez que o sistema inicializar sua rota default (gateway) IPv6 é configurada é configurado.

POSTFIX / DOVECOTE

O Postfix é um agente de transferência de emails (MTA = Message Transfer Agent), um software livre para envio e entrega de emails. Rápido e fácil de administrar, muito utilizado em servidores UNIX.
Algumas vantagens:
– Suporte a Ipv6
– Suporte a MIME
– Autenticação SASL
– Canal seguro utilizando TLS
– Suporte a banco de dados(MySQL,PostgreSQL,LDAP,entre outros)
– Verificação a listas RBL
– Extenso suporte a filtros
– Suporte a expressão-regular
– Verificação de cabeçalho
– Verificação no corpo da mensagem
– Suporte a Greylisting e SPF através de plugins.

Dovecot é um servidor de IMAP e POP3 open source para sistemas Linux e UNIX, escrito primariamente com segurança em mente, tem o objetivo primário de ser um servidor de email leve, rápido e de fácil configuração. Dovecot suporta mbox, Maildir e seu próprio formato nativo de alta performance, Dbox. É 100% compatível com clientes de emails acessando as caixas de correio diretamente. Também inclui um agente de entrega de emails com suporte opcional a filtros Sieve, o que acho muito legal!

Vamos a instalação, não esqueça de antes ter instalado Serviço Web

Responda:
Site da Internet
screenshot_20161017_125641

Se seu DNS reverso estiver ok ele virá já com o domínio reverso de seu IP, mas isso não é necessariamente ser o nome do ip rever, mas eu recomendo que tenha confurado o reverso para o seu servidor de e-mail.
mail.dominiorev.com.br
screenshot_20161017_125730

Verifique o arquivo /etc/mailname e sertifique-se que seja seu domínio.

Restarte o apache pois instalamos o pacote php5-imap

Adicione um e-mail para seu usuário root do Linux

POSTFIXADMIN

Instalaremos nosso PostfixAdmin para gerenciar nossos dominios e e-mail.
Inicialmente vamos criar nosso banco de dados MySQL.
Não esqueça de alterar a SENHA.

Será solicitado a senha do usuários root do mysql.

Vamos baixar o PostfixAdmin, hoje (Jan 2017) o projeto está em sua versão 3.0 https://sourceforge.net/projects/postfixadmin/. Vou baixa-lo no diretório padrão do Apache2, faça de acordo com o seu cenário. Após vou extrai-lo, renomeá-lo e setar as permissões necessárias.

Editamos o config.inc.php para fazer algumas alterações e conectar com nosso banco de dados.

Procure pelas seguintes linhas e altere conforme a baixo.

Como existe varias alterações “change-this-to-your.domain.tld” vou usar o comando sed para alterar todas de uma única vez. Não esqueça de substituir pelo seu dominio.

Acesse:
http://SEU-DOMINO/postfixadmin/setup.php

No primeiro acesso suas tabelas já serão criadas no seu bd, você deve ter todas as dependências OK.
screenshot_20161017_132809

Se deparar com o erro: “ERROR: the templates_c directory doesn’t exist or isn’t writeable for the webserver” crie o diretório templates_c com # mkdir templates_c && chown www-data. templates_c

Bem no final temos: Change setup password
Preencha os campos Setup password com uma senha e repita (Essa senha será necessária pra criar administradores do PostfixAdmin) e clique em Generate password hash

Voce vai receber uma mensagem parecida com essa:
If you want to use the password you entered as setup password, edit config.inc.php or config.local.php and set
$CONF[‘setup_password’] = ‘ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5’;

screenshot_20161017_134710

Esta senha criptografada, será necessários informar no arquivo config.inc.php antes de prosseguir. Então vamos a edição.

Localize:

Altere para:

Salve se arquivo e volte para seu navegador. Em Create superadmin account vamos criar nosso usuário administrador do PostfixAdmin.

Nos campos:
Setup password = Informe a senha q você gerou no passo anterior.
Administrador: = um endereço email que será o seu login (postmaster@dominiorev.com.br)
screenshot_20161017_134743
Clique em Criar administrador

Deve retornar a mensagem:

Agora por segurança vamos acessar nosso diretório do postfixadmin (/var/www/html/postfixadmin) e renomear o arquivo setup.php

Acesse: http://SEU-DOMINO/postfixadmin/

Já é possível acessa-lo com nosso usuários administrador, e adicionar seus domínios e contas de e-mails.
Domínios => Criar Domínio
Virtual => Criar conta de Email

Dado continuidade criaremos nosso usuários vmail que será o “cara” responsável pelo trabalho.

Edite o arquivo /etc/postfix/main.cf

Altere e adicione como descrito abaixo.

OBS RBLs: zen.spamhaus.org, bl.spamcop.net, dnsbl.sorbs.net
Caso não queira utilizar remova os campos reject_rbl_client ou se desejar adicionar outras…

Mais informações você encontra em:
http://www.postfix.org/VIRTUAL_README.html#virtual_mailbox

Precisamos criar 4 arquivos que farão a conexão com o BD, pra facilitar criamos nossa variável MINHASENHA

Vamos criar uma variável com o valor da senha que foi criada para o usuarios postfix do mysql, assim ira facilitar.

Não use $ ou # em sua senha

mysql_virtual_alias_maps.cf

mysql_virtual_mailbox_maps.cf

mysql_sender_login_maps.cf

mysql_virtual_domains_maps.cf

Acesse o diretório de instalação e verifique se os arquivos com as iniciais mysql_* foram criados. Depois altere as permissões e grupos.

Vamos as alterações no master.cf.

Faça um backup do arquivo original antes e adicione no final:

Adicione ao final:

Localize as seguintes linhas e descomente-as:

Em altere os valores de smtpd_client_restrictions, os originais são diferentes. (veja na imagem abaixo como fica)

screenshot_20161017_143502

Configurando o Dovecot

Vou usar o comando sed para fazer as alterações necessárias em vez de ficarmos abrindo arquivo e editando.

Se voce ainda não reiniciou a maquina sua variavel $MINHASENHA ainda está carregando sua senha, voce pode executar # echo $MINHASENHA ve se retorna ela. se não repita o comando

Vamos inserir algumas linhas ao final de dovecot-sql.conf.ext.

Alterações dos arquivos 10-auth.conf / 10-logging.conf / 10-ssl.conf

Criamos os certificados para o dovecot

Em 10-master.conf ficou complicado fazer alteração com sed então vamos no braço.

em :service auth {
COMENTE tudo de unix_listener auth-userdb

Vamos criar um filtro para que todas as mensagens marcada com spam sejam movida para o diretórios SPAM.

!Exatamente nessa ordem!

Descomente:

Altere nos comandos (dominiorev.com.br) para seu domínio

Descomente

Comando para ver cota

WEBMAIL ROUNDCUBE

Acesse e baixe a versao mais recente
https://roundcube.net/download/

Hoje 1.2.4 – Complete

Criaremos nosso banco de dados para o roundcubemail.

Será solicitado a senha root do mysql, entre com a senha.

Acesse:
http://SEU-DOMINIO/webmail/installer/

screenshot_20161017_152350

Clique em Next

Principais itens a ser alterado ou de seu gosto o que não citei deixei padrão

== General configuration ==
product_name: Nome do Webmail
Check client IP in session authorization: MARQUE

== Logging & Debugging ==
log_driver: syslog

== Database setup ==
Database type: MYSQL
Database server: localhost
Database name: roundcubemail
Database user name: roundcube
Database password: SUA-SENHA-BD-ROUND
db_prefix:

== IMAP Settings ==
username_domain: mail.dominiorev.com.br

== SMTP Settings ==
smtp_server: tls://mail.dominiorev.com.br
smtp_port: 25

== Display settings & user prefs ==
language *: pt_BR
If preview pane is enabled: Marque
Compose HTML formatted messages: always

== Plugins ==
“De acordo com suas necessidades! Porém vou configurar os seguintes.
– emoticons
– managesieve
– markasjunk
– newmail_notifier
– password
– zipdownload

Agora clique em [CREAT CONFIG]
Vai retornar uma mensagem:
The config file was saved successfully into RCMAIL_CONFIG_DIR directory of your Roundcube installation.

Isso significa que nosso arquivo de configuração do roundcube foi criado (config/config.inc.php)

Agora clique em: [CONTINUE]
Agora em: [Inicialize database]

Irá retornar:
Check DB config
DSN (write): OK
DB Schema: OK
DB Write: OK
DB Time: OK

Se você já criou uma conta de email você pode testa-la [Check login]

Como recomendações, mova o diretório installer para outro nome ou remova.

After completing the installation and the final tests please remove the whole installer folder from the document root of the webserver or make sure that enable_installer option in config.inc.php is disabled.

Depois de completar a instalação e os testes finais remova toda a pasta de instalação da raiz de documentos do servidor web ou certifique-se de que enable_installer opção no config.inc.php está desativado.

Acesse o diretório dos plugins do roundcube.

== newmail_notifier ==

== zipdownload ==

== markasjunk ==
(Sem configuração)

= managesieve =
Faz emails identificado com spam cair na pasta spam.

Altere: (atençao para o caminho)

Crie o arquivo default.sieve

== password ==
Permite usuário alterar sua senha.

Altere:

Plugins extra (http://plugins.roundcube.net/)

# cd /var/www/html/webmail/plugins/

== contextmenu ==
Cria menus ao clicar com o direito. (# apt install git)

== persistent_login ==
Permite deixar salvo a sessão.

Precisa fazer umas alterações em nossas tabelas do bd roundcubemail, para isso use:

A tradução ao meu ver ficou estranha, e vamos adicionar um aviso.

Altere para:

== dovecot_ident ==
Como webmail é um acesso localhost, nos logs de acesso IMAP não queremos isso e sim o IP do usuário que esta acessando, para isso:

Decomente incluindo o valor (127.0.0.1 ::1)

ex:

Agora precisamos adicionar nossos plugins extrar nas configurações do Round.

Procure por:

Seu servidor de e-mail já está funcionado, logue em seu webmail, envie algum e-mails.
Acesse: http://SEU-DOMINIO/webmail/

PEGANDO A ULTIMA VEZ QUE USUÁRIO LOGOU E O IP

Se você é administrador de um servidor de e-mail certamente vai querer isso!
Primeiramente vamos adicionar alguns campos extrar nassa tabela mailbox (last_login_date last_login_ip last_login_proto)

Vamos ensinar o dovecot a alimentar esses campos.
10-master.conf

Crie o arquivo postlogin-imap.sh

Atenção para SENHA.

Crie o arquivo postlogin-pop.sh

Atenção para SENHA.

Acesse sua conta de email e apois consulte a tabela mailbox (SELECT * FROM mailbox)

Até este ponto nosso servidor está 100%, agora falta apenas um Anti-Spam e um Anti-Vírus para ficar perfeito, Então vamos nessa 🙂

SPAMASSASSIN

Vamos começar pelo SpamAssassin

Alguns ajustes

Adicione ==> -o content_filter=spamassassin

E no final do arquivo:

Vamos instalar o Razor Pyzor para ajudar no bloquei dos Spam.

Inclua antes da ultima linha (endif # Mail::SpamAssassin::Plugin::Shortcircuit)

ANTIVIRUS AMAVIS / CLAMAV

Você precisa ter nos repositórios os pacotes non-free

(exemplo)

#(Descomente)

Adicionar !! Atenção para SENHA

Altere:

Comente:

Descomente:

Personalização Amavis

Eu comento sa_spam_subject_tag, assim as mensagens que forem spam não terão o assunto trocado, pois elas já irão cair na caixa de spam.

Comente se não desejar receber as menssagens de erro.

Não comente final_bad_header_destiny (se não os spam não serão entregues)

Se não quiser que seu email postmaster receba um email com todos os emails q ele discartou, comente:

Habilitar o amavis no postfix

Adicionar ao final

Restarte todos os serviços

Gostou? Ficou com alguma dúvida?
Deixe seu comentário!

Abraço!

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

40 Resultados

  1. Jonatan disse:

    Ótimo manual Rudimar, fiz tudo como no exemplo ai está tudo ok aparentemente, mando e-mail do webmail e chega no destino normal demora um pouco mais vai, só que não estou recebendo e-mail, se tem alguma ideá do que pode ser ? envio mais não recebo.

  2. Domingos Manuel disse:

    Irmão se pode faça um video e todo maerial actualizados

  3. Parabéns pelo tutorial bem completo e detalhado.
    Queria pedir, atualiza ele pelo amor de Deus, e por favor coloca ele vinculado ao AD.
    Desde já muito obrigado, e parabéns.

  4. Parabéns pelo tutorial. Muito bom. Tentei implementar no Ubuntu 18.04 e fiz até o final. Mas quando tento usar o postfix aparece este erro:

    Sep 8 12:23:50 srv1 postfix/smtpd[13857]: warning: SASL: Connect to private/auth failed: Connection refused
    Sep 8 12:23:50 srv1 postfix/smtpd[13857]: fatal: no SASL authentication mechanisms
    Sep 8 12:23:51 srv1 postfix/master[13811]: warning: process /usr/lib/postfix/sbin/smtpd pid 13856 exit status 1
    Sep 8 12:23:51 srv1 postfix/master[13811]: warning: /usr/lib/postfix/sbin/smtpd: bad command startup — throttling
    Sep 8 12:23:51 srv1 postfix/master[13811]: warning: process /usr/lib/postfix/sbin/smtpd pid 13857 exit status 1

    Alguma idéia do que pode ser?

    • Saída do comando dovecont -n
      root@srv1:/run/dovecot# dovecot -n
      # 2.2.33.2 (d6601f4ec): /etc/dovecot/dovecot.conf
      # Pigeonhole version 0.4.21 (92477967)
      doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-mail.conf line 64: Unknown setting: mailbox { mailbox
      doveconf: Error: managesieve-login: dump-capability process returned 89
      doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-mail.conf line 64: Unknown setting: mailbox { mailbox

  5. Olá Rudimar!
    Parabéns pelo tutorial! Também segui o passo-a-passo sem enfrentar erros aqui em meu ambiente! Porem, quando acesso o WEBMAIL pelo ROUNDCUBE ele abre a interface direitinho, porem, quando insiro o usuário e senha (uma conta que criei no postfix.admin) na tela do roundcube retorna “falha de login”. Estou a dias tentando desvendar isso, sem sucesso! Poderia me dar alguma dica ou onde me focar, por favor!

  6. Marcos Lima disse:

    Aqui ta dando erro nessa parte
    mailbox Trash
    {
    auto = subscribe
    special_use = Trash
    }
    mailbox Drafts {
    auto = subscribe
    special_use = Drafts
    }
    mailbox Sent {
    auto = subscribe
    special_use = Sent
    }
    mailbox Junk {
    auto = subscribe
    special_use = Junk
    }

  7. Gabriel Cantalejo disse:

    Algum outro tutorial teria outro com algo do tipo ao invés de usar o Mysql utilizar o LDAP para integrar com os usuários do AD, eu até fiz e consegui para usuários do AD porém não consigo enviar para os grupos do AD.

    Boa tarde e parabéns está Ótimo o conteúdo publicado.

  8. Angelo Coelho disse:

    Rudimar, tudo bem? segui todos os passos, sem erros, porém ao acessar o admin para criar um domínio e adicionar uma conta de email, simplesmente diz que foi criado com sucesso mas na listagem na tela não exibe os dados. A tabela no mysql está sendo populada.

  9. Maycon disse:

    Boa noite Amigo,

    Estou com a necessidade em um cliente onde o mesmo deseja bloquear o acesso das contas por horário.

    Sabe alguma forma de fazer isto?

  10. Olivam disse:

    estou procurando alguma regra que funcione para restringir determinados usuário para enviar somente para certos emails ou domínios, porem tinha que ser no MySQL, uma tabla com os usuários e outra com o domínios ou e-mail que esses usuários poderiam enviar, testei essa ai embaixo mas não tive exito. sera que é possível implementar isso no postfix. aguardo

    Obrigado e mais uma vês Ótimo post.

    smtpd_recipient_restrictions=
    mysql:/etc/postfix/protected_users.cf

    smtpd_restriction_classes = whitelist
    whitelist = check_sender_access mysql:/etc/postfix/whitelist.cf, reject

    CREATE TABLE protected_users (
    recipient VARCHAR( 50 ) NOT NULL ,
    class VARCHAR( 10 ) NOT NULL,
    UNIQUE ( recipient )
    );

    CREATE TABLE whitelist (
    sender VARCHAR( 50 ) NOT NULL ,
    action VARCHAR( 2 ) NOT NULL ,
    UNIQUE ( sender )
    );

  11. Paruba disse:

    Estava há algumas semanas pesquisando sobre este assunto e nunca pensei encontrar um material tão bom em português! Muito melhor do que todos tutorais em inglês que havia encontrado até agora! Por favor, poderia dar dicas de como usar um certificado do Let’s Encrypt nesse procedimento? Minha dúvida é se o certificado precisa ser do domínio principal (dominio.com.br) ou do mail.dominio.com.br. Muito obrigado!

  12. Fabio disse:

    Estava há algumas semanas pesquisando sobre este assunto e nunca pensei encontrar um material tão bom em português! Muito melhor do que todos tutorais em inglês que havia encontrado até agora! Por favor, poderia dar dicas de como usar um certificado do Let’s Encrypt nesse procedimento? Minha dúvida é se o certificado precisa ser do domínio principal (dominio.com.br) ou preciso criar outro certificado para o domínio mail.dominio.com.br. Muito obrigado!

  13. Fabio disse:

    Estava há algumas semanas pesquisando sobre este assunto e nunca pensei encontrar um material tão bom em português! Muito melhor do que todos tutorais em inglês que havia encontrado até agora! Por favor, poderia dar dicas de como usar um certificado do Let’s Encrypt nesse procedimento? Minha dúvida é se o certificado precisa ser do domínio principal (dominio.com.br) ou do mail.dominio.com.br. Muito obrigado!

  14. Gilvan Muniz disse:

    Parabéns mesmo, excelente! Já configurei um servidor com outro tutorial mas o seu está bem mais claro e completo. Agora a pergunta que parece com a primeira dos comentários. A amazon não permite o autoritativo nos seus ips, por isso não consigo que funcione o reverso, aí usando o dns da registro br sem reverso não vai funcionar né?

  15. Luis Paulo de Almeida Batista disse:

    Rudimar primeiro gostaria de parabenizar pelo tutorial achei muito bom, porém, estou com uma dúvida, é possível fazer todo este procedimento sem configurar DNS Autoritativo e Reverso sobre seus IPS, conforme o tutorial que você também disponibilizou, configurando somente o autoritativo do Registro.br?

  16. Fabio Silva disse:

    Poxa vida Amigo, muito obrigado pelo excelente tutorial.

  17. Adilson disse:

    Excelente tutorial! Para uma melhor segurança nas entregas dos email não seria necessário a instalação de uma solução como opendkim? (Obs.: sou leigo no assunto, e andei lendo algumas coisas sobre mail service).

  18. Excelente tutorial , me ajudou muito estou pensando em usar como base pra minha solução de e-mail, com a diferença que quero usar RainLoop como webmail.
    Voce ja conseguiu implementar fail2ban com dovecot?

  19. olivam disse:

    Ótimo tutorial, vc tem alguma documentação de como implementar Vacation ou Autoresponder? Obrigado

  1. 13 de fevereiro de 2017

    […] / 2000:fff:250:250:0::4 (www,ftp) SERV ZABBIX -> 250.250.0.5 / 2000:fff:250:250:0::5 (zabbix) SERV E-MAILS -> 250.250.0.6 / 2000:fff:250:250:0::6 (mail,imap,pop,smtp) SERV HOSPEDAGEM * -> 250.250.0.7 / […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *