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:
$TTL 86400 ; 1 day remontti.net.br IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2019071900 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. A 45.80.50.4 AAAA 2804:f123:bebe:cafe::4 MX 10 mail.remontti.net.br. TXT "v=spf1 a mx -all" SPF "v=spf1 a mx -all" $ORIGIN remontti.net.br. $TTL 10800 ; 3 hours 45-80-50-0 A 45.80.50.0 router-gw A 45.80.50.1 AAAA 2804:f123:bebe:cafe::1 ns1 A 45.80.50.2 AAAA 2804:f123:bebe:cafe::2 hostmaster A 45.80.50.2 AAAA 2804:f123:bebe:cafe::2 ns2 A 45.80.50.3 AAAA 2804:f123:bebe:cafe::3 www A 45.80.50.4 AAAA 2804:f123:bebe:cafe::4 ftp A 45.80.50.4 AAAA 2804:f123:bebe:cafe::4 zabbix A 45.80.50.5 AAAA 2804:f123:bebe:cafe::5 phpipam A 45.80.50.5 AAAA 2804:f123:bebe:cafe::5 mail A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6 imap A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6 pop A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6 smtp A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6
Ex reverso:
$ORIGIN . $TTL 86400 ; 1 day 50.80.45.in-addr.arpa IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2019071900 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. $ORIGIN 50.80.45.in-addr.arpa. 0 PTR 45.80.50.0.remontti.net.br. 1 PTR cpd.remontti.net.br. 2 PTR ns1.remontti.net.br. 3 PTR ns2.remontti.net.br. 4 PTR www.remontti.net.br. 5 PTR zabbix.remontti.net.br. 6 PTR mail.remontti.net.br. ; ....
Ajuste o nome do servidor alterando alguns parâmetros do sistema.
# vim /etc/hosts
[...] 127.0.0.1 localhost 250.250.250.6 mail.remontti.com.br mail [...]
# vim /etc/hostname
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.
# vim /etc/network/interfaces
allow-hotplug enp0s3 iface enp0s3 inet static address 45.80.50.6/28 gateway 45.80.50.1 dns-nameservers 45.80.50.2 dns-search remontti.com.br iface enp0s3 inet6 static pre-up modprobe ipv6 address 2804:f123:bebe:cafe::6 netmask 64 gateway 2804:f123:bebe:cafe::1
Reinicie seu servidor
# reboot
APACHE2, MARIADB E PHP7
# su - # apt update; apt upgrade # apt install apache2 apache2-utils mariadb-server mariadb-client curl\ libapache2-mod-php 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
Vamos habilitar o mod_rewrite.
# a2enmod 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.
# vim /etc/apache2/sites-enabled/000-default.conf
Adicione abaixo de “DocumentRoot /var/www/html” o seguinte:
<Directory /var/www/html/> Options FollowSymLinks AllowOverride All </Directory>
Por segurança recomendo remover a assinatura do servidor, para isso edite:
# sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf # sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf-available/security.conf
Agora precisamos restartar o apache2 para que tenha efeito as alterações.
# systemctl restart apache2
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)
# cd /tmp/ # wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.tar.gz # tar -vxzf phpMyAdmin-4.9.2-all-languages.tar.gz -C /usr/share/ # mv /usr/share/phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin # mkdir /etc/phpmyadmin # touch /etc/phpmyadmin/htpasswd.setup # mkdir -p /var/lib/phpmyadmin/tmp # chown -R www-data:www-data /var/lib/phpmyadmin
Criaremos o arquivo de configuração do Apache.
# vim /etc/apache2/conf-available/phpmyadmin.conf
# phpMyAdmin default Apache configuration Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php <IfModule mod_php7.c> AddType application/x-httpd-php .php php_flag magic_quotes_gpc Off php_flag track_vars On php_flag register_globals Off php_value include_path . </IfModule> </Directory> # Authorize for setup <Directory /usr/share/phpmyadmin/setup> <IfModule mod_authn_file.c> AuthType Basic AuthName "phpMyAdmin Setup" AuthUserFile /etc/phpmyadmin/htpasswd.setup </IfModule> Require valid-user </Directory> # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/libraries> Order Deny,Allow Deny from All </Directory> <Directory /usr/share/phpmyadmin/setup/lib> Order Deny,Allow Deny from All </Directory>
Ative a configuração e reinicie o Apache.
# a2enconf phpmyadmin # systemctl restart apache2 # systemctl status apache2
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:
# mariadb
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/
CREATE DATABASE phpmyadmin; CREATE USER 'pma'@'localhost' IDENTIFIED BY 'SUA_SENHA'; GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'SUA_SENHA' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT;
Carregue as tabelas do banco de dados: (Informe a senha do root do MariaDB)
# mariadb phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql
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
# cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php # vim /usr/share/phpmyadmin/config.inc.php
$cfg['blowfish_secret'] = 'dkJhGx83XR3JjuFrDn8kPp9NtXnkLptl'; /* Adicione esta linha */ $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp'; /* User used to manipulate with storage */ $cfg['Servers'][$i]['controlhost'] = 'localhost'; $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'SUA_SENHA'; /* Storage database and tables */ $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
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:
# apt install postfix postfix-mysql dovecot-core dovecot-mysql dovecot-imapd\ dovecot-pop3d dovecot-lmtpd dovecot-sieve dovecot-managesieved openssl\ opendkim opendkim-tools postfix-policyd-spf-python postfix-pcre
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.
# vim /etc/mailname
mail.remontti.com.br
Adicione um e-mail para seu usuário root do Linux
# vim /etc/aliases
root: postmaster@remontti.com.br
# newaliases
POSTFIXADMIN
PostfixAdmin gerenciará os domínios e e-mail.
# apt install postfixadmin
Ajuste o tipo do banco para mysqli
# vim /etc/postfixadmin/dbconfig.inc.php
$dbtype='mysqli'
Defina o tipo de criptografia para as senhas salvas no BD e o idioma.
# vim /etc/postfixadmin/config.inc.php
Procure pelas seguintes linhas e altere conforme a baixo.
$CONF['encrypt'] = 'md5'; $CONF['default_language'] = 'pt-br';
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.
# sed -i 's/change-this-to-your.domain.tld/remontti.com.br/' /etc/postfixadmin/config.inc.php
Mais alguns ajustes
# cp /etc/postfixadmin/config.inc.php /usr/share/postfixadmin/config.local.php # mkdir /usr/share/postfixadmin/templates_c/ # chown -R www-data. /usr/share/postfixadmin/templates_c/
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';
Esta senha criptografada, será necessários informar no arquivo config.inc.php antes de prosseguir. Então vamos a edição.
# vim /etc/postfixadmin/config.inc.php
Localize:
$CONF['setup_password'] = 'changeme';
Altere para:
$CONF['setup_password'] = 'ca06e6cd4df066ac8e7999616a773b00:51508f16ca5ef631a5ed23ccc44160d934375ec5';
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)
Clique em Criar administrador
Deve retornar a mensagem:
Administrador criado! (postmaster@remontti.com.br) You are done with your basic setup. You can now login to PostfixAdmin using the account you just created.
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.
# groupadd -g 5000 vmail # useradd -g vmail -u 5000 vmail -d /var/vmail # mkdir /var/vmail # chown vmail:vmail /var/vmail
Edite o arquivo /etc/postfix/main.cf
# cp /etc/postfix/main.cf /etc/postfix/main.cf.orig # vim /etc/postfix/main.cf
Altere e adicione como descrito abaixo.
#--------ALTERE--------# smtpd_banner = $myhostname myorigin = $myhostname mydestination = localhost #--------COMENTE--------# #relayhost = #mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 #mailbox_size_limit = 0 #--------ADD AO FINAL--------# # Authentification smtpd_sasl_type=dovecot smtpd_sasl_path=private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql_sender_login_maps.cf broken_sasl_auth_clients = yes # Virtual mailboxes local_transport = virtual virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_base = /var/vmail/ virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 104 virtual_transport = dovecot virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 dovecot_destination_recipient_limit = 1 spamassassin_destination_recipient_limit = 1 ###### EXTRAS COMENTADO ####### # Tamanho maximo do anexo (21 MB) # No webmail php deve permitir upar esse tamanho message_size_limit = 22020096 # Um pouco mais de protecao contra spam disable_vrfy_command = yes # A RFC 821 basicamente exige que os enderecos sejam envelopados ou contidos por <>. # Seguir esta regra faz com que se use essa notacao na sessao SMTP. Isso ajuda a barrar alguns Mailers. strict_rfc821_envelopes = yes # Caixa postal inexistente devolver aosender o erro 500, # desta forma daqui alguns minutos voce nao precisara processar novamente o mesmo spam. unknown_local_recipient_reject_code = 500 # E rejeitar com erro 554 enderecos desconhecidos unknown_address_reject_code = 554 # Tambem com o erro 554 podemos rejeitar as conexoes que venham de hostnames desconhecidos unknown_hostname_reject_code = 554 # Os cliente desconhecidos tambem rejeitaremos com o mesmo erro unknown_client_reject_code = 554 # Vamos definir que o servidores remotos podem fazer no maximo 10 # conexõsimultaneas (e um valor que trabalho, editem conforme a necessidade). # Um spammer faz mais de 20 smtp_destination_recipient_limit = 10 # Vamos definir que a conexao so pode cometer 3 erros de codigos 500 # (erros definitivos), apos isto sera desconectado smtpd_hard_error_limit = 3 # Para erros de codigo 400 (erros temporarios), podemos desconecta-los na primeira smtpd_soft_error_limit = 1 # Bom, claro que o spammer tambem pode ser desconectado e depois se reconectar, # entao vamos nos prevenir destes espertinhos definindo quantas conexoes ele pode fazer por minuto. smtpd_client_connection_count_limit = 10 # Nestas conexoes vamos limitar quantas mensagens ele pode mandar por minuto, # no meu caso uso 25. Se algum usuario seu reclamar deste limite, # classifique-o como ninja ou na pior hipotese, um mail maniaco. smtpd_client_message_rate_limit = 25 # Deixar um spammer maluco e faze-lo perder tempo. Dificilmente um servidor conectado # ao seu servidor vai cometer erros, os spammer cometem muitos erros, pois eles ficam tentando. # Para irrita-los e quem sabe um dia desistirem de mim, eu travo eles dentro do meu servidor a cada erro. # No meu caso, a cada erro eu os travo por 20 segundos. Ate que diminuiu o numero de spammers no meu servidor, # devo estar na blacklist deles.rs smtpd_error_sleep_time = 20 # Para este tipo de problema, os spammers podem resetar os erros deles. # Para evitar que eles facam isto e sejam desconetados, podemos dizer se eles podem ou nao fazer isto. # Como colher de cha, vamos deixar fazer isto apenas uma vez (ate porque servidores as vezes usam este comando). # Permitir a maquina remota dar o comando RSET apenas 1 vez. smtpd_junk_command_limit = 1 # Defina tambem o numero maximo de destinatarios em uma unica mensagem. # Utilize o numero que melhor lhe convir, entreviste pessoas chaves se necessarios. smtpd_recipient_limit = 50 # Os spammers nao se preocupam muito com isto, # entao uma otima pratica para bloquear spams eh # tornar a identificacao por HELO/EHLO obrigatoria. smtpd_helo_required = yes # Um pouco mais sobre o HELO/EHLO eh definir um tempo # limite para o servidor fazer a identificacao, um # servidor serio nao tem porque ficar enrolando. # Vai diminuindo o tempo e observando os resultados. # Vamos comecar com 60 segundos smtp_helo_timeout = 60s smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access hash:/etc/postfix/white-black-list, check_client_access hash:/etc/postfix/white-black-list, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname, sleep 1, reject_unauth_pipelining smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access hash:/etc/postfix/white-black-list, check_client_access hash:/etc/postfix/white-black-list, check_helo_access hash:/etc/postfix/white-black-list, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname, reject_unauth_pipelining smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unlisted_sender, reject_authenticated_sender_login_mismatch, permit_sasl_authenticated, reject_sender_login_mismatch, warn_if_reject, permit_mynetworks smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/white-black-list, check_helo_access hash:/etc/postfix/white-black-list, check_recipient_access hash:/etc/postfix/white-black-list, check_client_access hash:/etc/postfix/white-black-list, permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service unix:private/policyd-spf, reject_unknown_reverse_client_hostname, reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_rbl_client access.redhawk.org, reject_rbl_client all.spamrats.com, reject_rbl_client b.barracudacentral.org, reject_rbl_client bl.spamcop.net, reject_rbl_client blackholes.mail-abuse.org, reject_rbl_client bogons.cymru.com, reject_rbl_client cbl.abuseat.org, reject_rbl_client cblless.anti-spam.org.cn, reject_rbl_client csi.cloudmark.com, reject_rbl_client db.wpbl.info, reject_rbl_client dnsbl.dronebl.org, reject_rbl_client dnsbl.inps.de, reject_rbl_client dnsbl.sorbs.net, reject_rbl_client drone.abuse.ch, reject_rbl_client dsn.rfc-ignorant.org, reject_rbl_client httpbl.abuse.ch, reject_rbl_client ix.dnsbl.manitu.net, reject_rbl_client korea.services.net, reject_rbl_client multi.surbl.org, reject_rbl_client netblock.pedantic.org, reject_rbl_client opm.tornevall.org, reject_rbl_client pbl.spamhaus.org, reject_rbl_client psbl.surriel.com, reject_rbl_client query.senderbase.org, reject_rbl_client rbl.efnetrbl.org, reject_rbl_client rbl.interserver.net, reject_rbl_client rbl.rbldns.ru, reject_rbl_client rbl.spamlab.com, reject_rbl_client rbl.suresupport.com, reject_rbl_client rbl-plus.mail-abuse.org, reject_rbl_client relays.mail-abuse.org, reject_rbl_client sbl.spamhaus.org, reject_rbl_client spamguard.leadmon.net, reject_rbl_client spamrbl.imp.ch, reject_rbl_client tor.dan.me.uk, reject_rbl_client ubl.unsubscore.com, reject_rbl_client virbl.bit.nl, reject_rbl_client wormrbl.imp.ch, reject_rbl_client zen.spamhaus.org, reject_rbl_client dnsbl-1.uceprotect.net, reject_rhsbl_sender dbl.spamhaus.org, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_client dbl.spamhaus.org, reject_rhsbl_helo black.uribl.com, reject_rhsbl_sender black.uribl.com, reject_rhsbl_client black.uribl.com, reject_rhsbl_helo multi.surbl.org, reject_rhsbl_sender multi.surbl.org, reject_rhsbl_client multi.surbl.org, reject_rhsbl_helo multi.uribl.com, reject_rhsbl_sender multi.uribl.com, reject_rhsbl_client multi.uribl.com, permit
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
# vim /etc/postfix/white-black-list
Nele adicione os dominos/emails com OK que você confia e REJECT para os que deseja descartar, ex.:
remontti.com.br OK gmail.com OK spamerdoinferno.com.br REJECT propagandadocapeta.com.br REJECT
Agora você precisa executar o comando postmap no seu arquivo white-black-list ele irá gerar um novo arquivo white-black-list.db
# postmap /etc/postfix/white-black-list
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.
# MINHASENHA='sua-senha-do-usuario-postfixadmin-do-mysql'
Não use $ ou # em sua senha
mysql_virtual_alias_maps.cf
# echo " hosts = localhost user = postfixadmin password = $MINHASENHA dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = '1' " >> /etc/postfix/mysql_virtual_alias_maps.cf
mysql_virtual_mailbox_maps.cf
# echo " hosts = localhost user = postfixadmin password = $MINHASENHA dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' " >> /etc/postfix/mysql_virtual_mailbox_maps.cf
mysql_sender_login_maps.cf
# echo " hosts = localhost user = postfixadmin password = $MINHASENHA dbname = postfixadmin query = SELECT username AS allowedUser FROM mailbox WHERE username='%s' AND active = 1 UNION SELECT goto FROM alias WHERE address='%s' AND active = '1' " >> /etc/postfix/mysql_sender_login_maps.cf
mysql_virtual_domains_maps.cf
# echo " hosts = localhost user = postfixadmin password = $MINHASENHA dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' " >> /etc/postfix/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.
# cd /etc/postfix # ls -lh mysql_* # chmod o-rwx,g+r mysql_* # chgrp postfix mysql_*
Vamos as alterações no master.cf.
Faça um backup do arquivo original antes e adicione no final:
# cp /etc/postfix/master.cf /etc/postfix/master.cf.orig # vim /etc/postfix/master.cf
Adicione ao final:
# Dovecot dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Localize as seguintes linhas e descomente-as:
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_sasl_auth_enable=yes smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes
Descomente e altere os valores de smtpd_client_restrictions, os originais são diferentes. (veja na imagem abaixo como fica)
-o smtpd_client_restrictions=permit_sasl_authenticated,reject [...] -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Configurando o Dovecot
Vou usar o comando sed para fazer as alterações necessárias em vez de ficarmos abrindo arquivo e editando.
# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig # sed -i -e 's/#listen/listen/' /etc/dovecot/dovecot.conf # cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig # sed -i -e 's/#driver =/driver = mysql/' /etc/dovecot/dovecot-sql.conf.ext
Adicionamos ao final do arquivo /etc/dovecot/dovecot.conf mais algumas conf:
# echo " " >> /etc/dovecot/dovecot.conf # echo "service stats {" >> /etc/dovecot/dovecot.conf # echo " unix_listener stats-reader {" >> /etc/dovecot/dovecot.conf # echo " user = vmail" >> /etc/dovecot/dovecot.conf # echo " group = vmail" >> /etc/dovecot/dovecot.conf # echo " mode = 0660" >> /etc/dovecot/dovecot.conf # echo " }" >> /etc/dovecot/dovecot.conf # echo " " >> /etc/dovecot/dovecot.conf # echo " unix_listener stats-writer {" >> /etc/dovecot/dovecot.conf # echo " user = vmail" >> /etc/dovecot/dovecot.conf # echo " group = vmail" >> /etc/dovecot/dovecot.conf # echo " mode = 0660" >> /etc/dovecot/dovecot.conf # echo " }" >> /etc/dovecot/dovecot.conf # echo "}" >> /etc/dovecot/dovecot.conf
Certifique-se que sua senha do postfixadmin ainda esta salva na variável $MINHASENHA.
# echo $MINHASENHA # sed -i -e "s/#connect =/connect = host=localhost dbname=postfixadmin user=postfixadmin password=$MINHASENHA/" /etc/dovecot/dovecot-sql.conf.ext # sed -i -e 's/#default_pass_scheme/default_pass_scheme/' /etc/dovecot/dovecot-sql.conf.ext
Vamos inserir algumas linhas ao final de dovecot-sql.conf.ext.
# echo "" >> /etc/dovecot/dovecot-sql.conf.ext # echo "user_query = SELECT concat('/var/vmail/', maildir) as home, concat('maildir:/var/vmail/', maildir) as mail, 5000 AS uid, 5000 AS gid, concat('*:bytes=', (quota)) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1';" >> /etc/dovecot/dovecot-sql.conf.ext # echo "" >> /etc/dovecot/dovecot-sql.conf.ext # echo "password_query = SELECT username as user, password, concat('/var/vmail/', maildir) as userdb_home, concat('maildir:/var/vmail/', maildir) as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid, concat('*:bytes=', (quota)) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1';" >> /etc/dovecot/dovecot-sql.conf.ext
Alterações dos arquivos 10-auth.conf / 10-logging.conf / 10-ssl.conf
# cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig # sed -i -e 's/#disable_plaintext_auth = yes/disable_plaintext_auth = no/' /etc/dovecot/conf.d/10-auth.conf # sed -i -e 's/auth_mechanisms = plain/auth_mechanisms = plain login/' /etc/dovecot/conf.d/10-auth.conf # sed -i -e 's/!include auth-system.conf.ext/#!include auth-system.conf.ext/' /etc/dovecot/conf.d/10-auth.conf # sed -i -e 's/#!include auth-sql.conf.ext/!include auth-sql.conf.ext/' /etc/dovecot/conf.d/10-auth.conf # cp /etc/dovecot/conf.d/10-logging.conf /etc/dovecot/conf.d/10-logging.conf.orig # sed -i -e 's/#log_path/log_path/' /etc/dovecot/conf.d/10-logging.conf # sed -i -e 's/#log_timestamp = "%b %d %H:%M:%S "/log_timestamp = "%Y-%m-%d %H:%M:%S "/' /etc/dovecot/conf.d/10-logging.conf
Em 10-master.conf ficou complicado fazer alteração com sed então vamos no braço.
# cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig # vim /etc/dovecot/conf.d/10-master.conf
em :service auth {
COMENTE tudo de unix_listener auth-userdb
service auth { # unix_listener auth-userdb { # #mode = 0666 # #user = # #group = # } # Descomente # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 } # Adicione unix_listener auth-master { mode = 0666 } # Descomente # Auth process is run as this user. user = $default_internal_user }
Vamos criar um filtro para que todas as mensagens marcada com spam sejam movida para o diretórios SPAM.
# mkdir /var/lib/dovecot/sieve/ # cp /etc/dovecot/conf.d/90-sieve.conf /etc/dovecot/conf.d/90-sieve.conf.orig # sed -i -e 's/sieve = file:~\/sieve;active=~\/.dovecot.sieve/sieve = ~\/dovecot.sieve/' /etc/dovecot/conf.d/90-sieve.conf # sed -i -e 's/#sieve_default =/sieve_default =/' /etc/dovecot/conf.d/90-sieve.conf # echo 'require ["fileinto"];' >> /var/lib/dovecot/sieve/default.sieve # echo '# rule:[Spam]' >> /var/lib/dovecot/sieve/default.sieve # echo 'if header :contains "X-Spam-Flag" "YES" {' >> /var/lib/dovecot/sieve/default.sieve # echo ' fileinto "Junk";' >> /var/lib/dovecot/sieve/default.sieve # echo '}' >> /var/lib/dovecot/sieve/default.sieve # sievec /var/lib/dovecot/sieve/default.sieve # chown -R vmail:vmail /var/lib/dovecot # cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig # sed -i -e 's/mail_location = mbox:~\/mail:INBOX=\/var\/mail\/%u/mail_location = mbox:~\/mail:INBOX=\/var\/vmail\/%u/' /etc/dovecot/conf.d/10-mail.conf
!Exatamente nessa ordem!
# sed -i -e 's/inbox = yes/inbox = yes\n /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n } /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n special_use = \Junk /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n mailbox Junk { /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n } /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n special_use = \Sent /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n mailbox Sent { /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n } /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n special_use = \Drafts /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n mailbox Drafts { /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n } /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n special_use = \Trash /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n auto = subscribe /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n mailbox Trash { /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/inbox = yes/inbox = yes\n /' /etc/dovecot/conf.d/10-mail.conf # sed -i -e 's/#mail_plugins =/mail_plugins = quota/' /etc/dovecot/conf.d/10-mail.conf
# cp /etc/dovecot/conf.d/20-managesieve.conf /etc/dovecot/conf.d/20-managesieve.conf.orig # vim /etc/dovecot/conf.d/20-managesieve.conf
Descomente:
protocols = $protocols sieve service managesieve-login { #... #... #.... } service managesieve { #... #... #.... } protocol sieve { #... #... #.... }
# cp /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.orig # sed -i -e 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins sieve quota/' /etc/dovecot/conf.d/15-lda.conf # cp /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.orig # sed -i -e 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota imap_quota/' /etc/dovecot/conf.d/20-imap.conf # cp /etc/dovecot/conf.d/20-pop3.conf /etc/dovecot/conf.d/20-pop3.conf.orig # sed -i -e 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins quota/' /etc/dovecot/conf.d/20-pop3.conf # cp /etc/dovecot/conf.d/90-quota.conf /etc/dovecot/conf.d/90-quota.conf.orig # sed -i -e 's/#quota = maildir/quota = maildir/' /etc/dovecot/conf.d/90-quota.conf # sed -i -e 's/#quota_rule =/quota_rule =/' /etc/dovecot/conf.d/90-quota.conf # sed -i -e 's/#quota_rule2 =/quota_rule2 =/' /etc/dovecot/conf.d/90-quota.conf # sed -i -e 's/#quota_warning/quota_warning/' /etc/dovecot/conf.d/90-quota.conf
# vim /etc/dovecot/conf.d/90-quota.conf
Descomente e altere user = dovecot para user = root
service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = root unix_listener quota-warning { user = vmail } }
# vim /usr/local/bin/quota-warning.sh
#!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing" From: postmaster@remontti.com.br Subject: $USER com $PERCENT% Content-Type: text/plain; charset="UTF-8" Sua conta de email: $USER está com uso acima de $PERCENT%, -- Rudimar Remontti Remontti ME EOF # Evine uma cópia para o administrador: ADM=noc@remontti.com.br cat << EOF | /usr/lib/dovecot/dovecot-lda -d $ADM -o "plugin/quota=maildir:User quota:noenforcing" From: postmaster@remontti.com.br Subject: $USER com $PERCENT% Content-Type: text/plain; charset="UTF-8" Verificar conta de email: $USER Caixa acima de $PERCENT% -- Rudimar Remontti Remontti ME EOF
Demos permissão e restartamos o serviços.
# chmod +x /usr/local/bin/quota-warning.sh # systemctl restart dovecot postfix # systemctl status dovecot postfix
Comando para ver cota
# doveadm quota get -u usuario@dominio.com.br
WEBMAIL ROUNDCUBE
Ajuste o time zone de acordo com sua localidade.
# sed -i -e "s/^;date\.timezone =.*$/date\.timezone = 'America\/Sao_Paulo'/" /etc/php/7.3/apache2/php.ini # systemctl restart apache2
Acesse e baixe a versão mais recente
https://roundcube.net/download/
Hoje (27/Nov/2019) 1.4.1 Complete
# cd /var/www/html # wget https://github.com/roundcube/roundcubemail/releases/download/1.4.1/roundcubemail-1.4.1-complete.tar.gz # tar -vxzf roundcubemail* # mv roundcubemail-1.4.1 webmail # rm roundcubemail-1.4.1-complete.tar.gz
Criaremos nosso banco de dados para o roundcubemail.
# mariadb
Será solicitado a senha root do mysql, entre com a senha.
CREATE DATABASE roundcubemail; GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'SUA-SENHA-BD-ROUND'; FLUSH PRIVILEGES; quit;
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,
# chown www-data. /var/www/html/webmail/ -R
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
# chown root. /var/www/html/webmail/ -R # chown www-data. /var/www/html/webmail/temp -R
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.
# rm installer/ -rf
Acesse o diretório dos plugins do roundcube.
# cd /var/www/html/webmail/plugins/
== newmail_notifier ==
# cd newmail_notifier # cp config.inc.php.dist config.inc.php # sed -i -e 's/= false/= true/' config.inc.php
== zipdownload ==
# cd ../zipdownload # cp config.inc.php.dist config.inc.php
== markasjunk ==
# cd ../markasjunk/ # cp config.inc.php.dist config.inc.php
= managesieve =
Faz emails identificado com spam cair na pasta spam.
# cd ../managesieve # cp config.inc.php.dist config.inc.php # vim config.inc.php
Altere: (atençao para o caminho)
$config['managesieve_default'] = '/var/www/html/webmail/plugins/managesieve/default.sieve'; $config['managesieve_script_name'] = 'Filtros';
Crie o arquivo default.sieve
# vim /var/www/html/webmail/plugins/managesieve/default.sieve
require ["fileinto"]; # rule:[Spam] if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; stop; }
== password ==
Permite usuário alterar sua senha.
# cd ../password # cp config.inc.php.dist config.inc.php # vim config.inc.php
Altere:
//Define o uma quantidade minima de caracteres $config['password_minimum_length'] = 8; $config['password_minimum_score'] = 4; $config['password_db_dsn'] = 'mysql://postfixadmin:SENHA-POSTFIX-MYSQL@localhost/postfixadmin'; $config['password_query'] = "UPDATE mailbox SET password=MD5(%p) WHERE username=%u AND password=MD5(%o)";
Plugins extra
== contextmenu ==
Baixe a versão mais recente
# cd /var/www/html/webmail/plugins/ # wget https://github.com/johndoh/roundcube-contextmenu/archive/3.0.zip # apt install unzip # unzip 3.0.zip # rm 3.0.zip # mv roundcube-contextmenu-3.0 contextmenu
== 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:
# cd /var/www/html/webmail/plugins # wget https://github.com/remontti/dovecot_ident/archive/3.0.tar.gz # tar -vxzf 3.0.tar.gz # rm 3.0.tar.gz # mv dovecot_ident-3.0 dovecot_ident # vim /etc/dovecot/dovecot.conf
Descomente incluindo:
login_trusted_networks = 127.0.0.1 ::1
Restarte os serviços
# systemctl restart dovecot postfix # systemctl status dovecot postfix
Agora precisamos adicionar nossos plugins extrar nas configurações do Round.
# vim /var/www/html/webmail/config/config.inc.php
Procure por:
$config['plugins'] = array('emoticons', 'identity_select', 'managesieve', 'markasjunk', 'newmail_notifier', 'password', 'zipdownload');
Inclua os plugins contextmenu e contextmenu ficando:
$config['plugins'] = array('emoticons', 'identity_select', 'managesieve', 'markasjunk', 'newmail_notifier', 'password', 'zipdownload', 'contextmenu', 'dovecot_ident');
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.
// If true all folders will be checked for recent messages $config['check_all_folders'] = true;
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)
# mariadb
use postfixadmin; ALTER TABLE `mailbox` ADD `last_login_date` DATETIME NULL COMMENT 'last login date',ADD `last_login_ip` VARCHAR( 39 ) NULL COMMENT 'last login ip',ADD `last_login_proto` CHAR( 5 ) NULL ; quit;
Vamos ensinar o dovecot a alimentar esses campos.
10-master.conf
# sed -i -e 's/service imap {/service imap {\n executable = imap imap-postlogin/' /etc/dovecot/conf.d/10-master.conf # sed -i -e 's/service imap {/service imap {\n # Post-login action/' /etc/dovecot/conf.d/10-master.conf # sed -i -e 's/service pop3 {/service pop3 {\n executable = pop3 pop3-postlogin/' /etc/dovecot/conf.d/10-master.conf # sed -i -e 's/service pop3 {/service pop3 {\n # Post-login action/' /etc/dovecot/conf.d/10-master.conf # echo ''>> /etc/dovecot/conf.d/10-master.conf # echo '# Post login scripting POP3'>> /etc/dovecot/conf.d/10-master.conf # echo 'service pop3-postlogin {'>> /etc/dovecot/conf.d/10-master.conf # echo ' executable = script-login /usr/local/bin/postlogin-pop.sh'>> /etc/dovecot/conf.d/10-master.conf # echo ' user = $default_internal_user'>> /etc/dovecot/conf.d/10-master.conf # echo ' unix_listener pop3-postlogin {'>> /etc/dovecot/conf.d/10-master.conf # echo ' }'>> /etc/dovecot/conf.d/10-master.conf # echo '}'>> /etc/dovecot/conf.d/10-master.conf # echo ''>> /etc/dovecot/conf.d/10-master.conf # echo '# Post login scripting IMAP'>> /etc/dovecot/conf.d/10-master.conf # echo 'service imap-postlogin {'>> /etc/dovecot/conf.d/10-master.conf # echo ' executable = script-login /usr/local/bin/postlogin-imap.sh'>> /etc/dovecot/conf.d/10-master.conf # echo ' user = $default_internal_user'>> /etc/dovecot/conf.d/10-master.conf # echo ' unix_listener imap-postlogin {'>> /etc/dovecot/conf.d/10-master.conf # echo ' }'>> /etc/dovecot/conf.d/10-master.conf # echo '}'>> /etc/dovecot/conf.d/10-master.conf
Crie o arquivo postlogin-imap.sh
# vim /usr/local/bin/postlogin-imap.sh
Atenção para SENHA.
#!/bin/sh MYSQL_USER='postfixadmin' PASSWD='SENHA' DB_NAME='postfixadmin' if [ X"${USER}" != X"dump-capability" ]; then mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} >/dev/null 2>&1 <<EOF UPDATE mailbox SET \ last_login_ip="$IP", \ last_login_date=NOW(), \ last_login_proto="POP3" \ WHERE username="$USER"; EOF fi exec "$@"
Crie o arquivo postlogin-pop.sh
# vim /usr/local/bin/postlogin-pop.sh
Atenção para SENHA.
#!/bin/sh MYSQL_USER='postfixadmin' PASSWD='SENHA' DB_NAME='postfixadmin' if [ X"${USER}" != X"dump-capability" ]; then mysql -u${MYSQL_USER} -p${PASSWD} ${DB_NAME} >/dev/null 2>&1 <<EOF UPDATE mailbox SET \ last_login_ip="$IP", \ last_login_date=NOW(), \ last_login_proto="POP3" \ WHERE username="$USER"; EOF fi exec "$@"
# chmod +x /usr/local/bin/postlogin-* # systemctl restart dovecot
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
# apt install spamc spamassassin
Alguns ajustes
# systemctl enable spamassassin # sed -i -e 's/CRON=0/CRON=1/' /etc/default/spamassassin # sed -i -e 's/# report_safe 1/report_safe 0/' /etc/spamassassin/local.cf
# vim /etc/postfix/master.cf
Adicione ==> -o content_filter=spamassassin
smtp inet n - - - - smtpd -o content_filter=spamassassin {..} submission inet n - - - - smtpd -o content_filter=spamassassin {..} smtps inet n - - - - smtpd -o content_filter=spamassassin {..}
E no final do arquivo:
# SpamAssassin spamassassin unix - n n - - pipe user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Vamos instalar o Razor Pyzor para ajudar no bloquei dos Spam.
# apt install razor pyzor
# vim /etc/spamassassin/local.cf
Inclua antes da ultima linha (endif # Mail::SpamAssassin::Plugin::Shortcircuit)
# ... # razor2 use_razor2 1 score RAZOR2_CHECK 2.500 # pyzor use_pyzor 1 score PYZOR_CHECK 2.500 endif # Mail::SpamAssassin::Plugin::Shortcircuit
# su - debian-spamd -c 'razor-admin -d --create' # su - debian-spamd -c 'razor-admin -register' # su - debian-spamd -c 'razor-admin -discover'
ANTIVIRUS AMAVIS / CLAMAV
Você precisa ter nos repositórios os pacotes contrib non-free
# vim /etc/apt/sources.list
(exemplo)
deb http://deb.debian.org/debian/ buster main contrib non-free deb-src http://deb.debian.org/debian/ buster main contrib non-free deb http://security.debian.org/debian-security buster/updates main contrib non-free deb-src http://security.debian.org/debian-security buster/updates main contrib non-free # buster-updates, previously known as 'volatile' deb http://deb.debian.org/debian/ buster-updates main contrib non-free deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
# apt update # apt install amavisd-new clamav clamav-freshclam clamav-daemon p7zip p7zip-full\ arj bzip2 cabextract nomarch pax rar unrar unrar-free unzip zip lhasa lrzip lz4\ libmail-dkim-perl libnet-ldap-perl libsnmp-perl libmessage-passing-zeromq-perl\ lzop p7zip rpm # adduser clamav amavis # mkdir /var/run/clamav # touch /var/run/clamav/clamd.ctl # chown clamav. /var/run/clamav/clamd.ctl # systemctl stop clamav-freshclam # freshclam # su - amavis -c 'razor-admin -d --create' # su - amavis -c 'razor-admin -register' # su - amavis -c 'razor-admin -discover'
# vim /etc/amavis/conf.d/15-content_filter_mode
#(Descomente)
[...] @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); [...]
# vim /etc/amavis/conf.d/50-user
Adicionar !! Atenção para SENHA
use strict; # # Place your configuration directives here. They will override those in # earlier files. # # See /usr/share/doc/amavisd-new/ for documentation and examples of # the directives you can use in this file # @lookup_sql_dsn = ( ['DBI:mysql:database=postfixadmin;host=127.0.0.1;port=3306', 'postfixadmin', 'SENHA-BD-POSTFIX']); $sql_select_policy = 'SELECT "Y" as local FROM alias WHERE address IN (%k)'; #------------ Do not modify anything below this line ------------- 1; # ensure a defined return
# vim /etc/amavis/conf.d/05-node_id
Altere:
$myhostname = "mail.remontti.com.br";
# vim /etc/amavis/conf.d/01-debian
Comente:
#$unarj = ['arj', 'unarj'];
Descomente:
$unrar = ['rar', 'unrar']; #disabled (non-free, no security support)
Personalização Amavis
# vim /etc/amavis/conf.d/20-debian_defaults
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.
#$sa_spam_subject_tag = '***SPAM*** ';
Comente se não desejar receber as menssagens de erro.
#$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine) #$final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA #$final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # False-positive prone (for spam)
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:
#$virus_admin = "postmaster\@$mydomain"; # due to D_DISCARD default
Habilitar o amavis no postfix
# postconf -e "content_filter = smtp-amavis:[127.0.0.1]:10024"
# vim /etc/postfix/master.cf
Adicionar ao final
#Amavis smtp-amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 -o smtp_generic_maps= 127.0.0.1:10025 inet n - - - - smtpd -o mynetworks=127.0.0.0/8 -o content_filter= -o local_recipient_maps= -o local_header_rewrite_clients= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks -o strict_rfc821_envelopes=yes # SPF policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf
Ajuste o SPF para que execute seus testes.
# sed -i 's/HELO_reject = Fail/HELO_reject = False/' /etc/postfix-policyd-spf-python/policyd-spf.conf # sed -i 's/Mail_From_reject = Fail/Mail_From_reject = False/' /etc/postfix-policyd-spf-python/policyd-spf.conf
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.
# postconf -e "policyd-spf_time_limit = 3600"
Alguns pacotes que o amavis utiliza já não estão mais no debian buster então vamos baixa-los e instala-los.
# cd /tmp # wget http://ftp.br.debian.org/debian/pool/main/r/ripole/ripole_0.2.0+20081101.0215-3_amd64.deb # apt install ./ripole_0.2.0+20081101.0215-3_amd64.deb # wget http://ftp.br.debian.org/debian/pool/main/z/zoo/zoo_2.10-28_amd64.deb # apt install ./zoo_2.10-28_amd64.deb
Restarte todos os serviços e verifique se tudo esta ok.
# systemctl restart clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix # systemctl status clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix
Simular o envio de um spam:
# cd /tmp # wget http://spamassassin.apache.org/gtube/gtube.txt # sendmail seu@email.com.br < gtube.txt
Não podemos esquecer de definir a senha do usuário root do mariadb/mysql
# mariadb
USE mysql; UPDATE user SET password=PASSWORD('SENHA_DB_ROOT') WHERE User='root'; UPDATE user SET plugin="mysql_native_password"; FLUSH PRIVILEGES; quit;
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
# vim /etc/apache2/sites-enabled/000-default.conf
Descomente a linha ServerName e adicione o domínio do seu servidor
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. Protocols h2 http/1.1 ServerName mail.remontti.com.br ServerAdmin webmaster@localhost DocumentRoot /var/www/html <Directory /var/www/html/> Options FollowSymLinks AllowOverride All </Directory> # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf </VirtualHost>
Restarte o apache
# a2enmod http2 # systemctl restart apache2
Instale o letsencrypt e cerbot
# apt install letsencrypt python-certbot-apache
Antes de gerar o certificado para “mail.remontti.com.br” pare o apache
# systemctl stop apache2 # letsencrypt --authenticator standalone --installer apache -d mail.remontti.com.br
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): noc@remontti.com.br - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N Obtaining a new certificate Performing the following challenges: http-01 challenge for mail.remontti.com.br Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://mail.remontti.com.br You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=mail.remontti.com.br - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mail.remontti.com.br/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mail.remontti.com.br/privkey.pem Your cert will expire on 2020-02-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
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!
# mv /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/certs/ssl-cert-snakeoil.pem.off # mv /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/private/ssl-cert-snakeoil.key.off # ln -s /etc/letsencrypt/live/mail.remontti.com.br/fullchain.pem /etc/ssl/certs/ssl-cert-snakeoil.pem # ln -s /etc/letsencrypt/live/mail.remontti.com.br/privkey.pem /etc/ssl/private/ssl-cert-snakeoil.key
Adicione smtp_tls_security_level, smtp_tls_CAfile e smtp_tls_loglevel em main.cf
# postconf -e "smtp_tls_security_level = may" # postconf -e "smtp_tls_CAfile = /etc/ssl/certs/ssl-cert-snakeoil.pem" # postconf -e "smtp_tls_loglevel = 1"
Restart os serviços
# systemctl restart clamav-daemon clamav-freshclam spamassassin amavis dovecot postfix
DKIM
Adicione usuário postfix ao opendkimgrupo para que o Postfix possa acessar o soquete do OpenDKIM quando for necessário.
# adduser postfix opendkim
# vim /etc/opendkim.conf
Altere
#Socket local:/var/run/opendkim/opendkim.sock Socket local:/var/spool/postfix/opendkim/opendkim.sock
Adicione ao final do arquivo
## Specifies the path to the private key to use when signing. Ignored if ## SigningTable and KeyTable are used. No default; must be specified for ## signing if SigningTable/KeyTable are not in use. KeyTable /etc/dkimkeys/key.table ## SigningTable dataset ## default (none) ## ## Defines a dataset that will be queried for the message sender's address ## to determine which private key(s) (if any) should be used to sign the ## message. The sender is determined from the value of the sender ## header fields as described with SenderHeaders above. The key for this ## lookup should be an address or address pattern that matches senders; ## see the opendkim.conf(5) man page for more information. The value ## of the lookup should return the name of a key found in the KeyTable ## that should be used to sign the message. If MultipleSignatures ## is set, all possible lookup keys will be attempted which may result ## in multiple signatures being applied. SigningTable refile:/etc/dkimkeys/signing.table ## ExternalIgnoreList filename ## ## Names a file from which a list of externally-trusted hosts is read. ## These are hosts which are allowed to send mail through you for signing. ## Automatically contains 127.0.0.1. See man page for file format. ExternalIgnoreList /etc/dkimkeys/trusted.hosts ## InternalHosts dataset ## default "127.0.0.1" ## ## Names a file from which a list of internal hosts is read. These are ## hosts from which mail should be signed rather than verified. ## Automatically contains 127.0.0.1. InternalHosts /etc/dkimkeys/trusted.hosts ## Canonicalization hdrcanon[/bodycanon] ## default "simple/simple" ## ## Select canonicalizations to use when signing. If the "bodycanon" is ## omitted, "simple" is used. Valid values for each are "simple" and ## "relaxed". Canonicalization relaxed/simple ## AutoRestart { yes | no } ## default "no" ## ## Indicate whether or not the filter should arrange to restart automatically ## if it crashes. AutoRestart yes ## AutoRestartRate n/t[u] ## default (none) ## ## Sets the maximum automatic restart rate. See the opendkim.conf(5) ## man page for the format of this parameter. AutoRestartRate 10/1M ## DNSTimeout n ## default 10 ## ## Specify the time in seconds to wait for replies from the nameserver when ## requesting keys or signing policies. DNSTimeout 5
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.
# mkdir /var/spool/postfix/opendkim # chown opendkim:postfix /var/spool/postfix/opendkim # vim /etc/default/opendkim
Altere
#RUNDIR=/var/run/opendkim RUNDIR=/var/spool/postfix/opendkim
# vim /etc/dkimkeys/signing.table
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:
*@remontti.com.br remontti
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.
# vim /etc/dkimkeys/key.table
remontti remontti.com.br:201911:/etc/dkimkeys/remontti.private
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.
# vim /etc/dkimkeys/trusted.hosts
127.0.0.1 ::1 localhost mail remontti.com.br mail.remontti.com.br
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:
# cd /etc/dkimkeys # opendkim-genkey -b 2048 -h rsa-sha256 -r -s 201911 -d remontti.com.br -v
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
# ln -s 201911.private remontti.private # chown -R opendkim. /etc/dkimkeys/ # chmod -R go-rw /etc/dkimkeys/
Restart e verifique se o OpenDKIM iniciou corretamente.
# systemctl restart opendkim # systemctl status -l opendkim
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:
201911._domainkey IN TXT ( "v=DKIM1; h=rsa-sha256; k=rsa; s=email; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3" "ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB" ) ; ----- DKIM key 201911 for remontti.com.br
Remova os parênteses, e as quebras de linhas. E h=rsa-sha256 altere para h=sha256. O resultado ficaria:
201911._domainkey TXT "v=DKIM1; h=sha256; k=rsa; s=email; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3" "ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB"
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.
_adsp._domainkeyem TXT "dkim=all"
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:
v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r
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:
v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r;fo=1;rf=afrf;rua=mailto:seuemail@domino.com.br
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):
$TTL 86400 ; 1 day remontti.net.br IN SOA ns1.remontti.net.br. hostmaster.remontti.net.br. ( 2019071900 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 2419200 ; expire (4 weeks) 300 ; minimum (5 minutes) ) NS ns1.remontti.net.br. NS ns2.remontti.net.br. A 45.80.50.4 AAAA 2804:f123:bebe:cafe::4 MX 10 mail.remontti.net.br. TXT "v=spf1 a mx -all" SPF "v=spf1 a mx -all" $ORIGIN remontti.net.br. $TTL 10800 ; 3 hours 45-80-50-0 A 45.80.50.0 router-gw A 45.80.50.1 AAAA 2804:f123:bebe:cafe::1 ns1 A 45.80.50.2 AAAA 2804:f123:bebe:cafe::2 hostmaster A 45.80.50.2 AAAA 2804:f123:bebe:cafe::2 ns2 A 45.80.50.3 AAAA 2804:f123:bebe:cafe::3 www A 45.80.50.4 AAAA 2804:f123:bebe:cafe::4 ftp A 45.80.50.4 AAAA 2804:f123:bebe:cafe::4 zabbix A 45.80.50.5 AAAA 2804:f123:bebe:cafe::5 phpipam A 45.80.50.5 AAAA 2804:f123:bebe:cafe::5 mail A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6 imap A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6 pop A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6 smtp A 45.80.50.6 AAAA 2804:f123:bebe:cafe::6 $TTL 300 ; 5 min $ORIGIN remontti.com.br. 201911._domainkey TXT "v=DKIM1; h=sha256; k=rsa; s=email; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAks0HGeii8xoDxuL9vlZmJg6ajHg0l5Mc/8PfC4FQtVTp1BWhlRHQwIQAgbnD+y1nt4JAp4hC7vGx/qdMd1MGlUUJGTpXtTOr4p5DyBwO8zGC+vIuN0cJaBViNXQxLKT0ZX0bg00yQ2LtJIbw+0nAmTyuPcHxOtLfS5GMJe7kP/rmCCOCqiVAfuq/sslkqlpNkOWHaJf211x0Q3" "ts6TNrFxu7ExdGfWFpzEtSW+a/HhR/iIwYQGPl63JdjOLhS6Sy7IGk0xKRbIMQfLa91voPTKq+GnHcXbKzwI1SFfF39wGnrxfw9bIS/KmgzHBrFJ8nvrwTas2Q249AZUNzqhvFSwIDAQAB" _adsp._domainkeyem TXT "dkim=all" _dmarc TXT "v=DMARC1;p=quarantine;sp=quarantine;adkim=r;aspf=r"
Teste as chaves para a assinatura e verificação corretas usando o opendkim-testkeycomando:
# opendkim-testkey -d remontti.com.br -s 201911
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
vim /etc/postfix/main.cf
# OpenDKIM milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = local:opendkim/opendkim.sock
# systemctl restart opendkim postfix # systemctl status opendkim postfix
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.
# cd /etc/dkimkeys/ # opendkim-genkey -b 2048 -h rsa-sha256 -r -s 202006 -d remontti.com.br -v
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:
# opendkim-testkey -d remontti.com.br -s 202006 -k remontti.private
Pare o Postfix e o OpenDKIM para que eles não processem e-mails enquanto você estiver trocando as chaves.
# systemctl stop postfix opendkim
Remova o link anterior do "remontti.private" e link ao novo "202006.private" arquivo gerado e defina as permissões corretas:
# cd /etc/dkimkeys # rm remontti.private # ln -s 202006.private remontti.private # chown -R opendkim. /etc/dkimkeys/ # chmod -R go-rw /etc/dkimkeys/
Altere o antigo valores de AAAAMM em key.table para o novo seletor e salve o arquivo.
# vim /etc/dkimkeys/key.table
remontti remontti.com.br:202006:/etc/dkimkeys/remontti.private
Inicie o OpenDKIM e o Postfix
# systemctl start opendkim postfix
Certifique-se de que ambos iniciem sem erros.
# systemctl status opendkim postfix
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.
# apt install nftables fail2ban
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".
# vim /etc/fail2ban/jail.conf
Procure por "banaction = iptables-multiport" e "banaction_allports = iptables-allports" e altere seu valor para "nftables-allports":
#banaction = iptables-multiport #banaction_allports = iptables-allports banaction = nftables-allports banaction_allports = nftables-allports
Altere o modo de bloqueio em nftables-allports.conf para fazer que ele de um "drop all".
# vim /etc/fail2ban/action.d/nftables-allports.conf
Procure por nftables_mode = meta l4proto
#nftables_mode = meta l4proto <protocol> nftables_mode =
Em nftables-common.conf alteraremos o padrão de reject para drop
# vim /etc/fail2ban/action.d/nftables-common.conf
Procure por "blocktype = reject" e altere seu valor para "drop".
#blocktype = reject blocktype = drop
Ativamos alguns filtros. Se desejar ajustar o tempo te banimento altere o valor de bantime, e os numeros de erros/tentativas em maxretry.
# vim /etc/fail2ban/jail.d/defaults-debian.conf
Adicione no arquivo:
[sshd] enabled = true [postfix-sasl] enabled = true bantime = 1h maxretry = 5 [dovecot] enabled = true bantime = 1h maxretry = 5 [sieve] enabled = true bantime = 1h maxretry = 5
Ativamos o nftables e restartamos os serviços:
# systemctl enable nftables # systemctl restart nftables fail2ban
Para visualizar seu firewall use o comando:
# nft list ruleset
Alguns comandos do fail2ban
Status:
# fail2ban-client status
Status do filtro:
# fail2ban-client status NOME_FILTRO
Remover um IP bloqueado de um filtro:
# fail2ban-client set NOME_FILTRO unbanip IP_BLOQUEADO
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!
Meu bindo apresenta syntax error na linha da chave TXT do DKIM, ja tentei de tudo e não aceita.
Parabéns pelo lab, funcionou perfeitamente.
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
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
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?
Boa tarde, qual porta o servidor usa para enviar emails?
Parabéns pelo tutorial!
Queria muito ter esse tutorial em PDF, para servir de base/consulta posterior.
Grato.
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
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.
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…
É 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..
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á.
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..
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?
Boa tarde Rudimar, como podemos diagnosticar o que está causando o “delivery temporarily suspended”?
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?
Opa, o tutorial foi feito em cima do Debian 10, não cheguei testar ele em um debian 11, e o postfixadmin provavelmente não esteja mais no repositório.
Acredito que terá outros problemas tambem, mas se for analizando com calma acredito q consiga sim subir no 11. O postfixadmin provavelmente vai ter que baixa-lo na mão.
muito obrigado pelo exclarecimento
https://www.rosehosting.com/blog/how-to-set-up-a-mail-server-with-postfixadmin-on-debian-11/
Tem como você baixar do repositório git e instalar que da certo tambem.
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.
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
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?
passei. erro na conexao com BD. problemas de senha. Permissão de usuario ou erro na configuração do postfixadmin
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?
Estão a conseguir com o novo update do debian?
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?
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.
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
excelente este alteração ficou TOP
era bom adicionar ao TOTURIAL
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
Vi uma alternativa diferente aqui:
https://help.ubuntu.com/community/PostfixAmavisNew#Spamassassin
# su – amavis -s /bin/bash
# razor-admin -create
# razor-admin -register
# pyzor discover
Será que dá pra eu usar assim no meu caso?
Recomendo que use o debian, pois o repositório do ubuntu é o “beta” do debian.
Obrigado. Consegui fazer funcionar.
Só que não consigo forçar o envio usando TLS tanto pra receber como para enviar, depois que instalei o amavis ele rejeita a entrega quando eu configuro pra forçar o TLS, então eu deixei opcional.
Tentei no debian 11 deu esse mesmo erro
Boa noite,
Parabéns pelo material.
Sobre o problema do colega acima eu também tive e vi que tem um bug https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1653861.html
Resolvi da forma “tabajara” alterei de nologin para /bin/sh e funcionou.
Quais os requisitos de hardware?
Vai depender do fluxo da utilização!
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
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.
Olá,
Bem que poderia fazer um Tutorial com o ISPConfig, ajudava bastante 😀
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???
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 ??
Vc tem q ver pq foi rejeitado ou caiu no spam. Pode ser muitos fatores.
Possivelmente ele utilize um servidor DNS externo, igual a mim, estou em busca de uma solução pra isso.
Atualmente utilizo Route 53 da AWS.
Tem que ter o SPF, DKIM e IP Reverso devidamente configurado