Como montar um servidor de e-mail com Postfix, Dovecot, PostfixAdmin, SpamAssassin, Amavis, Clamav, RoundCube, SPF, DKIM, DMARC, Fail2Ban

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 MariaDB/MySQL. Nele vamos ter filtros entre varias otimizações.

Postfix Postfix é um agente de transferência de e-mails livre e de código aberto que encaminha e entrega e-mails, e tem como objetivo ser uma alternativa segura ao Sendmail.
Dovecot é um servidor de IMAP e POP3 open source para sistemas Linux e UNIX, escrito primariamente com segurança em mente.
Postfixadmin Interface web para o gerenciamento de contas de e-mails e domínios.
Spamassassin é um programa de computador licenciado através da licença Apache e utilizado como filtro de spam enviado através de mensagem eletrônica. O filtro SpamAssassin funciona dando uma pontuação a cada mensagem que entra, baseado em diferentes “testes” que faz analisando todo o conteúdo da mensagem.
Clamav é um antivírus open source gratuito feito especialmente para Linux, mas que conta também com uma versão gratuita para Windows e outra paga para Mac OS.
Amavis é um filtro de conteúdo de código aberto para correio eletrônico, implementando transferência de mensagens, decodificação, algum processamento e verificação e interface com filtros de conteúdo externos para fornecer proteção contra spam, vírus e outros malwares.
RoundCube é um cliente de email IMAP baseado na Web (Webmail).
SPF (Sender Policy Framework) é um sistema que identifica para os servidores de email quais hosts têm permissão para enviar email para um determinado domínio. A configuração do SPF ajuda a impedir que seu email seja classificado como spam.
DKIM (DomainKeys Identified Mail) é um sistema que permite que seus servidores de email oficiais adicionem uma assinatura aos cabeçalhos dos emails de saída e identifique a chave pública do seu domínio para que outros servidores de email possam verificar a assinatura. Assim como no SPF, o DKIM ajuda a impedir que seu email seja considerado spam. Também permite que os servidores de correio detectem quando o seu correio foi adulterado em trânsito.
DMARC (Autenticação, Relatório e Conformidade de Mensagens de Domínio) permite anunciar aos servidores de email quais são as políticas do seu domínio em relação a emails que falham nas validações SPF e / ou DKIM. Além disso, permite solicitar relatórios de mensagens com falha dos servidores de email.
Fail2Ban é uma estrutura de software de prevenção de intrusões que protege os servidores de computadores contra ataques de força bruta.

REQUISITOS

0 – Saber que esse procedimento exige conhecimento 🙂
1 – Ter configurado DNS Autoritativo e Reverso sobre seus IPS.
2 – Debian 10 Buster instalação limpa
3 – Não ter seu endereço IP listado em backlist.

Você pode verificar se seu IP está em uma blacklist nos sites:
https://mxtoolbox.com/blacklists.aspx
http://www.anti-abuse.org/multi-rbl-check-results/
https://viewdns.info/spamdblookup/

AJUSTES

IP ex. do servidor: 45.80.50.6 / 2804:f123:bebe:cafe::6
Sendo que o reverso deste ips apontam para mail.remontti.com.br
Entradas MX, TXT e SPF configuradas.
Ex autoritativo:

Ex reverso:

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.

Reinicie seu servidor

APACHE2, MARIADB E PHP7

Vamos habilitar o mod_rewrite.

A página que vimos ao abri o ip do nosso servidor no navegador fica no diretório /var/www/html, isso está sendo informado no arquivo default do apache que fica em /etc/apache2/sites-enabled/000-default.conf, e para que nosso mod_rewrite funcione corretamente será necessário adicionar alguma linhas.

Adicione abaixo de “DocumentRoot /var/www/html” o seguinte:

Por segurança recomendo remover a assinatura do servidor, para isso edite:

Agora precisamos restartar o apache2 para que tenha efeito as alterações.

http://[SERVER_IP]/

phpMyAdmin ** Opcional **

Cade ele do repositório?
O PHPMyAdmin não está mais disponível como pacote .deb no Debian 10. Fazendo um pesquisa o motivo é que o “pessoal” que faz empacotamento não tem uma versão estável. https://security-tracker.debian.org/tracker/CVE-2018-19968

Desta forma debian “obriga” com que o usuário instale-o a partir da fonte. https://www.phpmyadmin.net/downloads/

phpMyAdmin 4.9.2 (25/11/2019)

Criaremos o arquivo de configuração do Apache.

Ative a configuração e reinicie o Apache.

Na próxima etapa, vamos configurar o armazenamento de configuração do phpMyadmin (banco de dados).
Faça o login no MariaDB como usuário root:

Criamos um novo banco de dados para o chamado phpmyadmin e um usuario pma (altere para sua senha). Em seguida, concedemos as permissões do banco de dados.
Você pode gerar uma senha acessando https://senhasegura.remontti.com.br/

Carregue as tabelas do banco de dados: (Informe a senha do root do MariaDB)

Agora é necessário ajustar o arquivo de configuração do phpmyadmin.
Definir:
* senha segura (blowfish secret) que deve ter 32 caracteres. Não use o meu exemplo blowfish secreto, defina o seu próprio! Use o gerador https://senhasegura.remontti.com.br
* diretório que o PHPMyAdmin deve usar para armazenar arquivos temporários.
* Descomentar as linhas $cfg[‘Servers’]
– controlhost : localhost
– controlpass : SUA_SENHA

http://[SERVER_IP]/phpmyadmin/

POSTFIX / DOVECOTE / DKIM / SPF

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:

Responda:
Site da Internet

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.remontti.com.br

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

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

POSTFIXADMIN

PostfixAdmin gerenciará os domínios e e-mail.

Ajuste o tipo do banco para mysqli

Defina o tipo de criptografia para as senhas salvas no BD e o idioma.

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.

Mais alguns ajustes

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

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

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@remontti.com.br)
screenshot_20161017_134743
Clique em Criar administrador

Deve retornar a mensagem:

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

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

Dando 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.

RBL/RHSBL: Caso não queira utilizar alguma das rbl/sbl ou utilizar outras sinta-se a vontade.

Aproveitamos já iremos criar uma lista Negra / Branca, crie um arquivo chamado white-black-list

Nele adicione os dominos/emails com OK que você confia e REJECT para os que deseja descartar, ex.:

Agora você precisa executar o comando postmap no seu arquivo white-black-list ele irá gerar um novo arquivo white-black-list.db

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 informada na instalação do postfixadmin, 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:

Descomente e 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.

Adicionamos ao final do arquivo /etc/dovecot/dovecot.conf mais algumas conf:

Certifique-se que sua senha do postfixadmin ainda esta salva na variável $MINHASENHA.

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

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

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:

Descomente e altere user = dovecot para user = root

Demos permissão e restartamos o serviços.

Comando para ver cota

WEBMAIL ROUNDCUBE

Ajuste o time zone de acordo com sua localidade.

Acesse e baixe a versão mais recente
https://roundcube.net/download/

Hoje (27/Nov/2019) 1.4.1 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/

Clique em Next

Será necessário dar permissão para criação do config.inc.php na pasta config,

Itens a serem alterados:

== 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 ==
default_host: localhost (se vc usar certificado deixe tls://mail.remontti.com.br)
username_domain: remontti.com.br

== SMTP Settings ==
smtp_server: tls://mail.remontti.com.br (se vc nao for criar certificado deixe localhost)

== Display settings & user prefs ==
language *: pt_BR
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

Por seguração deixe as permissões para o root novamente, e para www-data apenas para pasta temp

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.

Acesse o diretório dos plugins do roundcube.

== newmail_notifier ==

== zipdownload ==

== markasjunk ==

= 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

== contextmenu ==
Baixe a versão mais recente

== 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:

Descomente incluindo:

Restarte os serviços

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

Procure por:

Inclua os plugins contextmenu e contextmenu ficando:

Adicione também check_all_folders, para verificar novos e-mails em todas as pastas, bom caso você criar algum filtro personalizado, ex todas as mensagems contendo x assunto ou de um domínio/email… assim se cair uma mensagem ela fica uma notificação numérica além da pasta principal.

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 e-mail e apos 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 contrib 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

Ajuste o SPF para que execute seus testes.

Inclua em main.cf policyd-spf_time_limit = 3600 para aumentar o tempo limite impedirá o Postfix de interromper o agente se as transações forem um pouco lentas.

Alguns pacotes que o amavis utiliza já não estão mais no debian buster então vamos baixa-los e instala-los.

Restarte todos os serviços e verifique se tudo esta ok.

Simular o envio de um spam:

Não podemos esquecer de definir a senha do usuário root do mariadb/mysql

HTTPS / SSL / CERTIFICADO VÁLIDO

Sugestão é você configurar seu domínios virtuais (ou mais de um) e configurar o Let’s Encrypt
Leitura recomendada:
Criando certificado grátis com Let’s Encrypt para o Apache no Debian 10
Como ter diversos sub/domínios no mesmo servidor? (Domínios virtuais com Apache2)

Vou fazer um exemplo bem simples editando o 000-default.conf

Descomente a linha ServerName e adicione o domínio do seu servidor

Restarte o apache

Instale o letsencrypt e cerbot

Antes de gerar o certificado para “mail.remontti.com.br” pare o apache

Agora já temos uma acesso seguro em “mail.remontti.com.br”, interessante que agora temos certificados válidos que podemos usar no nosso serviço de e-mail, então vamos ajustar!

Adicione smtp_tls_security_level, smtp_tls_CAfile e smtp_tls_loglevel em main.cf

Restart os serviços

DKIM

Adicione usuário postfix ao opendkimgrupo para que o Postfix possa acessar o soquete do OpenDKIM quando for necessário.

Altere

Adicione ao final do arquivo

Crie o diretório do soquete OpenDKIM na área de trabalho do Postfix e verifique se ele possui a propriedade correta, em seguida edite o caminho para o soquete é diferente do padrão, porque no Debian 10 o processo Postfix lida com uma prisão chroot e não pode acessar o local normal.

Altere

Crie a tabela de assinatura /etc/dkimkeys/signing.table. Ele precisa ter uma linha por domínio para a qual você lida com o email. Cada linha deve ficar assim:

Substitua *@remontti.com.br por seu domínio e remontti por um nome abreviado para o domínio. O primeiro campo é um padrão que corresponde aos endereços de email. O segundo campo é um nome para a entrada da tabela de chaves que deve ser usada para assinar emails desse endereço.

Substitua remontti pelo valor que você usou para o domínio na tabela de assinatura. Substitua remontti.com.br por seu nome de domínio e substitua 201911 ano atual de 4 dígitos e mês de 2 dígitos (isso é chamado de seletor). O primeiro campo conecta as tabelas de assinatura e chave.

O segundo campo é dividido em 3 seções separadas por dois pontos.
1- A primeira seção é o nome de domínio para o qual a chave é usada.
2- A segunda seção é um seletor usado ao procurar registros importantes no DNS.
3- A terceira seção nomeia o arquivo que contém a chave de assinatura do domínio.

Crie o arquivo de hosts confiáveis.

Ao criar o arquivo, mude “mail” para o nome do seu servidor e substitua remontti.com.br pelo seu próprio nome de domínio. Estamos identificando os hosts pelos quais os usuários enviarão mensagens e devem ter as mensagens enviadas assinadas, que para configurações básicas será o seu próprio servidor de email.

Gere chaves para cada domínio:

opendkim-genkey: generating private key
opendkim-genkey: private key written to 201911.private
opendkim-genkey: extracting public key
opendkim-genkey: DNS TXT record written to 201911.txt

Criamos uma atalho e alteramos as permissões

Restart e verifique se o OpenDKIM iniciou corretamente.

Configurar DKIM no seu DNS

Como no SPF, o DKIM usa registros TXT para armazenar informações sobre a chave de assinatura de cada domínio.
Usando o AAAAMM como acima, é necessário criar um registro TXT para o host YYYYMM._domainkeyde de cada domínio para o qual você lida com o correio. Seu valor pode ser encontrado no arquivo 201911.txt. Esses arquivos são assim:

Remova os parênteses, e as quebras de linhas. E h=rsa-sha256 altere para h=sha256. O resultado ficaria:

Você pode adicionar uma política ADSP ao seu domínio, dizendo que todos os emails do seu domínio devem ser assinados por DKIM. Como de costume, isso é feito com um registro TXT para host _adsp._domainkeyem seu domínio com um valor de dkim=all. Você não precisa configurar isso, mas isso dificulta a falsificação de emails de seus domínios, porque os servidores de e-mail do destinatário verão a falta de uma assinatura DKIM e rejeitarão a mensagem.

Relatório e conformidade de mensagens de domínio (DMARC). O registro DNS do DMARC pode ser adicionado para informar aos servidores de correio o que você acha que eles devem fazer com os e-mails que afirmam pertencer ao seu domínio e que falham na validação com SPF e/ou DKIM. O DMARC também permite solicitar relatórios sobre mensagens que não passam em uma ou mais verificações de validação. O DMARC deve ser configurado apenas se você tiver o SPF e o DKIM configurados e operando com êxito. Se você adicionar o registro DNS DMARC sem o SPF e o DKIM, as mensagens do seu domínio falharão na validação, o que pode fazer com que sejam descartadas ou relegadas a uma pasta de spam.

O registro DMARC é um registro TXT para host _dmarcem seu domínio que contém os seguintes valores recomendados:

Isso solicita que os servidores de correio em quarentena (não descartem, mas separem das mensagens regulares) qualquer email que falhe nas verificações de SPF ou DKIM. Nenhum relatório é solicitado. Pouquíssimos servidores de correio implementam o software para gerar relatórios sobre mensagens com falha; portanto, é desnecessário solicitá-las. Se você deseja solicitar relatórios, o valor seria semelhante a este exemplo, adicionado como uma única sequência:

Os registros DMARC têm um número de tags e opções disponíveis. Essas tags são usadas para controlar suas configurações de autenticação:

v especifica a versão do protocolo, neste caso DMARC1.
p determina a política para o domínio raiz, como “example.com”. As opções disponíveis:
quarantine instrui que, se um email falhar na validação, o destinatário deve separá-lo para processamento.
reject solicita que o servidor de email receptor rejeite os emails que falham na validação.
none solicita que o destinatário não tome nenhuma ação se um email não passar na validação.

sp determina a política para subdomínios, como “subdomínio.exemplo.com”. Ele usa os mesmos argumentos que a p tag.

adkim especifica o modo de alinhamento para DKIM, que determina com que rigor os registros DKIM são validados. As opções disponíveis são:
r modo de alinhamento relaxado, a autenticação DKIM é aplicada com menos rigor.
s modo de alinhamento estrito. Somente uma correspondência exata com a entrada DKIM para o domínio raiz será vista como validada.

aspf determina o modo de alinhamento para verificação do SPF. Leva os mesmos argumentos que adkim.

Adicione nas configurações do seu arquivo DNS autoritativo e restart seu DNS. Ex (bind):

Teste as chaves para a assinatura e verificação corretas usando o opendkim-testkeycomando:

Se tudo estiver correto, você não deverá obter nenhuma saída. Se você quiser ver mais informações, adicione -vvvno final do comando. Isso produz saída de depuração detalhada. A última mensagem deve ser “tecla OK”. Pouco antes disso, você poderá ver a mensagem “chave não segura”. Isso é normal e não indica um erro, apenas significa que seu domínio ainda não está configurado para DNSSEC.

Adicione

Rotação da chave DKIM

(Não faça isso agora! Leia com atenção)

O motivo pelo qual o formato AAAAMM é usado é que a prática recomendada exige a alteração das chaves de assinatura DKIM de vez em quando (recomenda-se mensalmente, e não mais que a cada 6 meses). Para fazer isso sem interromper as mensagens em trânsito, você gera as novas chaves usando um novo seletor. O processo é:

Gere novas chaves como anteriormente no /etc/dkimkeys/. Use o ano e o mês atuais para o valor do seletor AAAAMM, para que seja diferente do seletor atualmente em uso.

Use o .txt gerado para adicionar as novas chaves ao seu DNS, usando o novo seletor AAAAMM nos nomes de host. Não remova ou altere os registros DKIM TXT existentes. Feito isso, verifique os novos dados da chave usando o seguinte comando:

Pare o Postfix e o OpenDKIM para que eles não processem e-mails enquanto você estiver trocando as chaves.

Remova o link anterior do “remontti.private” e link ao novo “202006.private” arquivo gerado e defina as permissões corretas:

Altere o antigo valores de AAAAMM em key.table para o novo seletor e salve o arquivo.

Inicie o OpenDKIM e o Postfix

Certifique-se de que ambos iniciem sem erros.

Espere algumas semanas para remover o antigo registro pois algum servidor pode estar ainda usando a antiga chave. (Eu normalmente removo apenas quando crio uma nova)

FAIL2BAN + NFTABLES

Fail2Ban é uma estrutura de software de prevenção de intrusões que protege os servidores de computadores contra ataques de força bruta, que opera monitorando arquivos de logs. Sendo o mais comum usado para bloquear endereços IPs selecionados que podem pertencer a hosts que estão tentando violar a segurança.

Como o iptables está sendo substituído por nftables começando com o Debian Buster, vamos configurar o Fail2Ban para usar o nftables como padrão.
Mas vou ir além em vez de usar o filtro multiport vou setar allports e modifica-lo para que quando uma tentativa de violação acontecer o Fail2Ban crie uma regra de firewall que dropa definitivamente o IP e não apenas fechando a porta do serviço para “invasor”.

Procure por “banaction = iptables-multiport” e “banaction_allports = iptables-allports” e altere seu valor para “nftables-allports”:

Altere o modo de bloqueio em nftables-allports.conf para fazer que ele de um “drop all”.

Procure por nftables_mode = meta l4proto e altere deixando seu valor vazio:

Em nftables-common.conf alteraremos o padrão de reject para drop

Procure por “blocktype = reject” e altere seu valor para “drop”.

Ativamos alguns filtros. Se desejar ajustar o tempo te banimento altere o valor de bantime, e os numeros de erros/tentativas em maxretry.

Adicione no arquivo:

Ativamos o nftables e restartamos os serviços:

Para visualizar seu firewall use o comando:

Alguns comandos do fail2ban
Status:

Status do filtro:

Remover um IP bloqueado de um filtro:

Ufaaaa acabamos, espero que tenha gostado! 🙂

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Rudimar Remontti

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

Você pode gostar...

46 Resultados

  1. Frands Franco disse:

    Meu bindo apresenta syntax error na linha da chave TXT do DKIM, ja tentei de tudo e não aceita.

  2. Raildson Felipe da Silva disse:

    Parabéns pelo lab, funcionou perfeitamente.

  3. Vicente Filho disse:

    Boa noite, vim aqui colaborar com os demais com problema de PHP
    Pra quem teve problema com o PHP 7.2 e precisa da Versão 8.2 em diante, só alterar antes de:
    “APACHE2, MARIADB E PHP7”
    —————————

    #1. Add the Sury PPA Repository
    apt update
    apt install lsb-release apt-transport-https ca-certificates software-properties-common -y

    #Following this, import the repository GPG key:
    wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

    #Append the repository to the sources list:
    sh -c ‘echo “deb https://packages.sury.org/php/ $(lsb_release -sc) main” > /etc/apt/sources.list.d/php.list’

    #To make sure it is working correctly:
    apt update; apt upgrade

    # depois de instalar o PHP 8.2, então sim vá pro proximo passo:
    # detalhes: eu troquei: “libapache2-mod-php” para “libapache2-mod-php8.2”
    #APACHE2, MARIADB E PHP7
    apt install apache2-utils mariadb-server mariadb-client curl\
    libapache2-mod-php8.2 php php-mysql php-cli php-pear php-gmp php-gd php-bcmath\
    php-mbstring php-curl php-xml php-zip php-imap php-intl php-ldap php-imagick wget

    • Vicente Filho disse:

      CORRIGINDO:
      # 1 – Adicionando o Repositório “Sury PPA Repository”
      apt update
      apt install lsb-release apt-transport-https ca-certificates software-properties-common -y

      #2 – importando o repositorio “GPG key”:
      wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

      #3 – Adicionando o repositorio para o “sources list”: (removido as duas aspas e ajustado para aspa simples inicio e fim)
      sh -c ‘echo deb https://packages.sury.org/php/ $(lsb_release -sc) main > /etc/apt/sources.list.d/php.list’

      #4 – execute o comando abaixo para funcionar corretamente:
      apt update; apt upgrade

      #5 – Instalando o PHP 8.2 e os modulos já corrigido:
      apt install apache2 apache2-utils mariadb-server mariadb-client curl\
      libapache2-mod-php8.2 php8.2 php8.2-mysql php8.2-cli php8.2-fpm php-pear php8.2-gmp php8.2-gd php8.2-bcmath\
      php8.2-mbstring php8.2-common php8.2-opcache php8.2-curl php8.2-xml php8.2-zip php8.2-readline php8.2-imap php8.2-intl php8.2-ldap php8.2-imagick

      #6 – PRONTO, só continuar o Tutorial daqui em diante

  4. Daniel Lemes disse:

    Nos meus testes, o dovecot_ident registra no banco de dados o ip do proprio servidor, e não o ip da maquina que eu estou usando pra acessar o email. Tô fazendo algo errado? E algum bug? Tem alguma correção?

  5. Jean disse:

    Boa tarde, qual porta o servidor usa para enviar emails?

  6. Parabéns pelo tutorial!
    Queria muito ter esse tutorial em PDF, para servir de base/consulta posterior.
    Grato.

  7. Anderson Carlos disse:

    Olá pessoal,
    Estou com duvida se isso mesmo o esperado no DKIM:
    Comando: opendkim-testkey -d mydomian.com.br -s 202206 -k mydomian.private -vvv
    opendkim-testkey: using default configfile /etc/opendkim.conf
    opendkim-testkey: key loaded from mydomian.private
    opendkim-testkey: checking key ‘202206._domainkey.mydomian.com.br’
    opendkim-testkey: ‘202206._domainkey.mydomian.com.br’ record not found

    • Fabio Bellini disse:

      Olá Anderson!
      Resolvi este problema aqui criando um registro na configuracao de zona dns do registro.br (onde registrei meu dominio .com.br)
      p=MI.. (pega do arquivo /etc/dkimkeys/202206.txt e remova as aspas duplas e os espacos , ou seja uma string única (uma chave única)
      Na configuracao de zona dns do registro.br
      Crie uma nova entrada
      TXT
      202206._domainkey
      “v=DKIM1; h=sha256; k=rsa; s=email; p=MIIBIjAN…”
      clique no botão Salvar Alterações e no seu server Debian, execute novamente o opendkim-testkey -d mydomian.com.br -s 202206…

      Espero ter ajudado.

  8. Anderson Carlos disse:

    Olá,
    Ótimo tutorial fiz a configuração toda por esse tutorial.

    Mas está me apresentando um erro na hora de enviar email e não recebo nenhum email.

    Erro apresentado e “Error 451 4.3.5 Server configuration error” revisei toda a configuração e está tudo igual a do tutorial.

    Obs.: o meu dominio já responde ao meu servidor dns autoritativo e o servidor de email está no mesmo servidor do dns. Outra coisa e o DNS Reverso ainda não passou para o meu dominio pois o bloco de IP e emprestado da operadora do link.

    desde já agradeço a atenção…

  9. Henri Azevedo disse:

    É possível configurar quantas tentativas o servidor fará para o envio de email?

    Estou fazendo um teste com o IP fixo que não tem DNSr configurado então um provedor de email em especifico não recebe meus emails, ele rejeita justamente pelo fato do meu IP não ter DNSr configurado, porem eu só recebo o email “Undelivered Mail Returned to Sender” após 5 dias do envio.. por exemplo enviei um dia 28/03 e só recebi o retorno de não recebimento 02/04, e nesse tempo o servidor foi tentando fazer o envio..

  10. Joel Chaves disse:

    Boa noite,
    para quando pode fazer este tutorial para o debian 11?

    • Sem previsão, quem sabe quando receber doações que de para deixar de lado o que realmente paga o leite das crianças para escrever para o blog 🙂
      Não parece mas escrever um tutorial demanda tempo e estudos, testes…
      Infelizmente meu tempo ta cada vez mais curto, pois preciso focar no que me da retorno.
      Mas quando achar um tempinho vou tentar escrever, tem uma fila gigante de pedidos já.

  11. Henri disse:

    Tem alguma configuração ou motivo que possa fazer demorar pra receber os emails?

    Segui o tutorial no Debian 11, fazendo alguns ajustes na parte do postfixadmin, mas deu tudo certo, consigo enviar e receber emaisl, mas os externos demoram um pouco pra ser recebido pelo servidor, bem que eu configurei a poucas horas o DNS então não sei se é por isso..

  12. Bruno disse:

    Parabens pelo tutorial.
    Meu servidor apresentou um problema na hora de enviar email.

    Erro smtp (-1) conexão ao servidor falhou. roundcube.

    Alguem sabe o que pode ser?

  13. Henri Azevedo disse:

    Boa tarde Rudimar, como podemos diagnosticar o que está causando o “delivery temporarily suspended”?

  14. iManjate disse:

    Boa tarde, parabens pelo tutorial muito didatico.
    Eu estou tendo problema ao tentar instalar o postfixadmin, usando o comando: apt install postfixadmin no debian 11.
    recebo o seguinte erro, E: Unable to locate package postfixadmin
    alguma saida para esta mensagem?

  15. Marcio dos Santos disse:

    Bom dia,

    Estou caindo na blacklist por conta do meu servidor estar enviando HELO/EHLO mal formado, saberia dizer onde ajusto isso? não achei no tutorial.

  16. Marcio dos Santos disse:

    Boa tarde, ótimo tutorial

    Estou com um problemas que estou caindo nas black-list por conta de EHLO/HELO mal formados, ja tentei resolver com o parâmetro 9 smtpd_command_filter ) porem sem sucesso, teria ideia de como resolver para que qualquer tentativa de EHLO/HELO seja substituída pelo nome do meu servidor.

    Segue exemplo do EHLO/HELO que peguei no trafego de saída:
    SMTP: EHLO n0Ojgf2.inflation.1Jmwt9t4kQl
    SMTP: EHLO su4jP9301.undisowning.f

    Desde já agradeço sua atenção, Obrigado

  17. Erico disse:

    Eu crio as contas pelo postfix admin, porem na hora de logar no rouncube da falha de comunicação com servidor, e ao verificar no servidor a maildir do dominio/contas não foram criadas, alguém passou por isso?

  18. Alvaro Rezende de Oliveira disse:

    Muito obrigado pelo tutorial. Excelente. Estou conseguindo receber emails de fora. Mas não consigo enviar nenhum email. Mensagemd e erro:
    Oct 26 11:09:41 srv postfix/smtp[15157]: connect to vip-us-br-mx.terra.com[208.84.244.133]:25: Connection timed out
    Oct 26 11:09:41 srv postfix/smtp[15157]: CE4C6BD7F9: to=, relay=none, delay=30, delays=0.11/0.01/30/0, dsn=4.4.1, status=deferred (connect to vip-us-br-mx.terra.com[208.84.244.133]:25: Connection timed out)

    O que pode ser?

  19. Joel disse:

    Estão a conseguir com o novo update do debian?

  20. Olivam Chaves disse:

    parabéns pelo seu artigo, tenho uma duvida no webmail quando recebo spam ele esta indo para a pasta spam, porem no outlook (pop3) nao recebe nada da pasta spam, tem alguma forma de o outlook conseguir receber os spam na pasta spam sem usar imap?

  21. Olivam Chaves disse:

    boa tarde,
    ótimo tutorial
    vc tem algum outro tutorial que complementa esse na parte do postfiadmin e dovecot para aparecer a quota de cada usuario.

    • Olivam Chaves disse:

      consegui resolver isso

      criei 1 arquivos dentro de /etc/dovecot/dovecot-dict-sql-user.conf com o conteudo

      connect = host=localhost dbname=postfixadmin user=postfixadmin password=XXXXXX

      map {
      pattern = priv/quota/storage
      table = quota2
      username_field = username
      value_field = bytes
      }
      map {
      pattern = priv/quota/messages
      table = quota2
      username_field = username
      value_field = messages
      }

      criei 1 arquivos dentro de /etc/dovecot/dovecot-dict-sql-domain.conf com o conteudo

      connect = host=localhost dbname=postfixadmin user=postfixadmin password=XXXXX

      map {
      pattern = priv/quota/storage
      table = domain
      username_field = domain
      value_field = quota
      }
      map {
      pattern = priv/quota/messages
      table = quota2
      username_field = username
      value_field = messages
      }

      alterei o dovecot.conf
      dict {
      #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
      #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
      sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf
      sqldomainquota = mysql:/etc/dovecot/dovecot-sql-domain.conf
      }

      service stats {
      unix_listener stats-reader {
      user = vmail
      group = vmail
      mode = 0660
      }

      unix_listener stats-writer {
      user = vmail
      group = vmail
      mode = 0660
      }
      }

      alterei o 10-master.conf
      service dict {
      # If dict proxy is used, mail processes should have access to its socket.
      # For example: mode=0660, group=vmail and global mail_access_groups=vmail
      unix_listener dict {
      mode = 0600
      user = vmail
      #group =
      }

      adicionei no final do 90-quota.conf
      plugin {
      # Using SQL Tables to store current quota size
      quota = dict:Quota:%d:proxy::sqldomainquota
      quota = dict:User Quota::proxy::sqluserquota
      # Allow 10% more for Trash Folder
      quota_rule2 = Trash:storage=+10%%
      }

      e ativei no postfixadmin config.inc.php
      $CONF[‘quota’] = ‘YES’;
      $CONF[‘domain_quota’] = ‘YES’;
      $CONF[‘used_quotas’] = ‘YES’;
      $CONF[‘new_quota_table’] = ‘YES’;

      agora mostra a % de cada usuario no postfixadmin

  22. diego brito sousa disse:

    Olá, parabéns pelo teu artigo, ele me ajudou a economizar muito tempo,
    pois eu demorava demais para configurar um sistema de emails. Com teu
    artigo configurei mais rápido e de forma melhor.

    Só me surgiu uma dúvida, quando executei os 3 comandos:
    # su – debian-spamd -c ‘razor-admin -d –create’
    # su – debian-spamd -c ‘razor-admin -register’
    # su – debian-spamd -c ‘razor-admin -discover’

    todos eles me retornaram: ‘This account is currently not available.’

    Estou no Ubuntu 20.04 LTS

  23. Angelo Silva disse:

    Quais os requisitos de hardware?

  24. Rogerio luksevicius disse:

    excelente manual fiz tudo como manda é show parabens
    to recebendo email limpo porem quando tento enviar recebo

    “Jul 23 18:46:23 c906f60d postfix/submission/smtpd[17404]: connect from localhost[127.0.0.1]
    Jul 23 18:46:23 c906f60d postfix/submission/smtpd[17404]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 554 5.7.1 : Client host rejected: Access denied; from= to= proto=ESMTP helo=”

    que, puder ajudar seria grato rogerio.luksevicius@gmail.com

  25. Luiz Fernando disse:

    Excelente conteudo, conheço o postfixa um bom tempo e fico feliz que ainda seja uma ferramenta adotada pelos profissionais atuais.

    Você incluiu umas coisas que eu não conhecia ainda, bem detalhada sua explicação.

    Obrigado por compartilhar.

  26. Joel disse:

    Olá,

    Bem que poderia fazer um Tutorial com o ISPConfig, ajudava bastante 😀

  27. Gustavo Peres disse:

    Boa Noite, excelente tutorial, porém não consigo acessar email pelo Roundcube nem por outro gerenciador, no Roundcube apresenta: Falha na conexão com servidor, no postfix já foi criado a conta de email normal. será que é alguma config no postfix???

  28. FELIPE MEIRELES disse:

    Olá. Obrigado pelo tutorial. Eu instalei meu servidor local está funcionando o envio e recebimento interno e externo. Só que o email remoto identifica a mensagens como spam e os emails enviados para gmail são bloqueados ao chegar no servidor deles. Como podemos resolver isso ??

Deixe um comentário

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