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

post-emails

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

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

CENÁRIOS

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

REQUISITOS

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

AJUSTES

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

# vim /etc/hosts
1
2
3
127.0.0.1       localhost
250.250.250.6     mail.dominiorev.com.br    mail
{...}
# vim /etc/hostname
1
mail

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

# vim /etc/network/interfaces
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
auto eth0
iface eth0 inet static
        address 250.250.0.6
        netmask 255.255.255.240
        network 250.250.0.0
        broadcast 250.250.0.15
        gateway 250.250.0.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 250.250.0.2
        dns-search ns1.dominiorev.com.br
 
#v6
iface eth0 inet6 static
        pre-up modprobe ipv6
        address 2000:fff:250:250:0::6
        netmask 64
        gateway 2000:fff:250:250:0::1

Reinicie seu servidor

 # reboot

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

POSTFIX / DOVECOTE

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

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

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

# apt update && apt upgrade
# apt install dovecot-common dovecot-mysql dovecot-imapd dovecot-pop3d dovecot-lmtpd postfix postfix-mysql openssl php5-imap dovecot-sieve dovecot-managesieved

Responda:
Site da Internet
screenshot_20161017_125641

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

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

# vim /etc/mailname
1
mail.dominiorev.com.br

Restarte o apache pois instalamos o pacote php5-imap

# /etc/init.d/apache2 restart

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

# vim /etc/aliases
1
root: postmaster@dominiorev.com.br
# newaliases

POSTFIXADMIN

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

# mysql -uroot -p -e "CREATE DATABASE postfix; GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'SENHA';"

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

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

# cd /var/www/html/
# wget --no-check-certificate --content-disposition http://sourceforge.net/projects/postfixadmin/files/latest/download?source=files
# tar xfvz postfixadmin-*.tar.gz
# mv postfixadmin*/ postfixadmin
# chown www-data:www-data -R postfixadmin
# cd postfixadmin
# cp config.inc.php config.inc.php.orig

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

# vim config.inc.php

Procure pelas seguintes linhas e altere conforme a baixo.

1
2
3
4
5
6
7
8
9
10
11
$CONF['configured'] = true;
$CONF['default_language'] = 'pt-br';
 
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'SENHA';
$CONF['database_name'] = 'postfix';
 
# Defina o tipo de criptografia para as senhas salvas no BD.
$CONF['encrypt'] = 'md5';
# cp config.inc.php config.local.php

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/dominiorev.com.br/' config.inc.php

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

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

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

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

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

screenshot_20161017_134710

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

# vim  config.inc.php

Localize:

1
$CONF['setup_password'] = 'changeme';

Altere para:

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

Deve retornar a mensagem:

	Administrador criado! (postmaster@dominiorev.com.br)
	You are done with your basic setup.

	You can now login to PostfixAdmin using the account you just created.

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

# mv setup.php QLQRNOME_setup.php

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#--------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 = virtual
#virtual_transport = dovecot ????????/ ql ?
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
dovecot_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_helo_restrictions =	permit_mynetworks,
				permit_sasl_authenticated,
				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,
				permit_mynetworks
 
smtpd_recipient_restrictions =  permit_sasl_authenticated,
                                permit_mynetworks,
                                reject_unauth_destination,
                                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 zen.spamhaus.org,
                                reject_rbl_client bl.spamcop.net,
                                reject_rbl_client dnsbl.sorbs.net,
                                permit

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

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

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

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

# MINHASENHA='sua-senha-do-usuario-postifix-do-mysql'

Não use $ ou # em sua senha

mysql_virtual_alias_maps.cf

# echo "
hosts = localhost
user = postfix
password = $MINHASENHA
dbname = postfix
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 = postfix
password = $MINHASENHA
dbname = postfix
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 = postfix
password = $MINHASENHA
dbname = postfix
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 = postfix
password = $MINHASENHA
dbname = postfix
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:

1
2
3
# 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:

1
2
3
4
5
6
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_sasl_auth_enable=yes
 
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes

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

1
2
3
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
[...]
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

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.

# 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

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

# MINHASENHA='sua-senha-do-usuario-postifix-do-mysql'

# sed -i -e "s/#connect =/connect = host=localhost dbname=postfix user=postfix 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

# cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
# sed -i -e 's/ssl = no/#ssl = no/' /etc/dovecot/conf.d/10-ssl.conf
# sed -i -e 's/#ssl_cert =/ssl_cert =/' /etc/dovecot/conf.d/10-ssl.conf
# sed -i -e 's/#ssl_key =/ssl_key =/' /etc/dovecot/conf.d/10-ssl.conf

Criamos os certificados para o dovecot

# openssl req -new -x509 -days 3650 -nodes -out "/etc/dovecot/dovecot.pem" -keyout "/etc/dovecot/private/dovecot.pem"

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
service auth {
 
#unix_listener auth-userdb {
 #mode = 0666
 #user =
 #group =
#}
 
#descomente
 unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
 
#add
  unix_listener auth-master {
    mode = 0666
  }
 
  #Descomente
  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_default =/sieve_default =/' /etc/dovecot/conf.d/90-sieve.conf
# sed -i -e 's/#sieve_global_dir =/sieve_global_dir = \/var\/lib\/dovecot\/sieve\/ /' /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:

1
2
3
4
5
6
7
8
9
# Uncomment to enable managesieve protocol:
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

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

!# sed -i -e 's/#mail_plugins = $mail_plugins/#mail_plugins = $mail_plugins\n  postmaster_address = postmaster@dominiorev.com.br/' /etc/dovecot/conf.d/15-lda.conf
# sed -i -e 's/#mail_plugins = $mail_plugins/#mail_plugins = $mail_plugins\n  auth_socket_path = \/var\/run\/dovecot\/auth-master/' /etc/dovecot/conf.d/15-lda.conf
# sed -i -e 's/#mail_plugins = $mail_plugins/mail_plugins = $mail_plugins sieve/' /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

1
2
3
4
5
6
7
service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = dovecot
  unix_listener quota-warning {
    user = vmail
  }
}
# vim /usr/local/bin/quota-warning.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/deliver -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: postmaster@mail.dominiorev.com.br
Subject: Quota Aviso
 
AVISO
Usando $PERCENT% do tamanho da caixa postal.
 
Remontti
(55) 9999-9999
EOF
# chmod 777 /usr/local/bin/quota-warning.sh
# /etc/init.d/dovecot restart
# /etc/init.d/postfix restart 

Comando para ver cota

# doveadm quota get -u usuario@dominio.com.br

WEBMAIL ROUNDCUBE

# apt install php5-intl php-pear
# sed -i -e "s/^;date\.timezone =.*$/date\.timezone = 'America\/Sao_Paulo'/" /etc/php5/apache2/php.ini
# /etc/init.d/apache2 restart
# cd /var/www/html

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

Hoje 1.2.4 – Complete

# wget --no-check-certificate https://github.com/roundcube/roundcubemail/releases/download/1.2.4/roundcubemail-1.2.4-complete.tar.gz

# tar -vxzf roundcubemail*
# mv roundcubemail-1.2.4 webmail
# chown  www-data. -R webmail

Criaremos nosso banco de dados para o roundcubemail.

# mysql -u root -p

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

1
2
3
4
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/

screenshot_20161017_152350

Clique em Next

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

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

== Logging & Debugging ==
log_driver: syslog

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

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

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

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

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

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

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

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

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

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

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

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

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

# mv installer/ installer_XYZ_12345

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
# sed -i -e 's/= false/= true/' config.inc.php

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

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

1
2
$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
1
2
3
4
5
6
7
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:

1
2
3
4
5
6
7
//Define o uma quantidade minima de caracteres
$config['password_minimum_length'] = 8;
 
$config['password_require_nonalpha'] = false;
 
$config['password_db_dsn'] = 'mysql://postfix:SENHA-POSTFIX-MYSQL@localhost/postfix';
$config['password_query'] = "UPDATE  mailbox SET  password=MD5(%p) WHERE username=%u AND password=MD5(%o)";

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

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

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

# git clone --recursive https://github.com/JohnDoh/Roundcube-Plugin-Context-Menu.git
# mv Roundcube-Plugin-Context-Menu contextmenu

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

# git clone --recursive https://github.com/mfreiholz/Roundcube-Persistent-Login-Plugin.git
# mv Roundcube-Persistent-Login-Plugin persistent_login
# cd persistent_login/
# cp config.inc.php.dist  config.inc.php
# sed -i -e 's/= false/= true/' config.inc.php

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

# mysql -u roundcube -pSENHA-USER-MYSQL-ROUNDCUBE roundcubemail < sql/mysql.sql

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

# vim localization/pt_BR.inc

Altere para:

1
2
3
4
<?php
$labels['ifpl_rememberme'] = 'Salvar login';
$labels['ifpl_rememberme_hint'] = 'N&atilde;o salve seu login em computadores p&uacute;blicos por raz&otilde;es de seguran&ccedil;a.';
?>

== 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
# git clone --recursive https://github.com/corbosman/dovecot_ident.git
# vim /etc/dovecot/dovecot.conf

Decomente incluindo o valor (127.0.0.1 ::1)

1
login_trusted_networks = 127.0.0.1 ::1 IP-DO-SEU-SERVIDOR

ex:

1
login_trusted_networks = 127.0.0.1 ::1 250.250.0.6 2000:fff:250:250:0::6
# /etc/init.d/dovecot  restart
# /etc/init.d/postfix  restart

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

# vim /var/www/html/webmail/config/config.inc.php

Procure por:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$config['plugins']
Inclua os plugins contextmenu, persistent_login e dovecot_ident ficando:
$config['plugins'] = array('emoticons', 'managesieve', 'markasjunk', 'newmail_notifier', 'password', 'zipdownload','contextmenu', 'persistent_login', 'dovecot_ident');
 
//Eu particularmente gosto de fazer ainda algumas mudanças, se desejar inclua ao final do arquivo:
$config['show_images'] = 2;
$config['prefer_html'] = true;
$config['check_all_folders'] = true;
$config['message_show_email'] = true;
$config['draft_autosave'] = 180;
$config['quota_zero_as_unlimited'] = true;
$config['list_cols'] = array('flag', 'status', 'fromto', 'subject', 'date', 'size', 'attachment', 'priority');
//Se desejar cadastrar um domino qual não precisa informar o @dominio...
$config['username_domain'] = 'dominiorev.com.br';
# chown  www-data. -R /var/www/html/webmail/

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)

# mysql -u root -p
1
2
3
use postfix;
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh
MYSQL_USER='postfix'
PASSWD='SENHA'
DB_NAME='postfix'
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="IMAP" \
WHERE username='$USER';
EOF
fi
exec "$@"

Crie o arquivo postlogin-pop.sh

# vim /usr/local/bin/postlogin-pop.sh

Atenção para SENHA.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh
MYSQL_USER='postfix'
PASSWD='SENHA'
DB_NAME='postfix'
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 777 /usr/local/bin/postlogin-*
# /etc/init.d/dovecot  restart

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

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

SPAMASSASSIN

Vamos começar pelo SpamAssassin

# apt install spamc spamassassin

Alguns ajustes

# sed -i -e 's/ENABLED=0/ENABLED=1/' /etc/default/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
????# sed -i -e 's/inbox = yes/inbox = yes\n    } /' /etc/dovecot/conf.d/10-mail.conf
# systemctl enable spamassassin
# vim /etc/postfix/master.cf

Adicione ==> -o content_filter=spamassassin

1
2
3
4
5
6
7
8
9
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:

1
2
3
# 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)

1
2
3
4
5
6
7
# razor2
use_razor2 1
score RAZOR2_CHECK 2.500
 
# pyzor
use_pyzor 1
score PYZOR_CHECK 2.500
# su - debian-spamd -c 'razor-admin -d --create'
# su - debian-spamd -c 'razor-admin -register'
# su - debian-spamd -c 'razor-admin -discover'
# su - debian-spamd -c 'pyzor discover'

ANTIVIRUS AMAVIS / CLAMAV

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

# vim /etc/apt/sources.list

(exemplo)

1
deb http://ftp.br.debian.org/debian/ jessie main contrib non-free
# apt update
# apt install amavisd-new clamav clamav-freshclam  clamav-daemon arj bzip2 cabextract nomarch pax rar unrar unzip zip zoo lhasa libmail-dkim-perl libnet-ldap-perl libsnmp-perl libzeromq-perl lzop p7zip rpm
# adduser clamav amavis
# /etc/init.d/clamav-freshclam stop
# freshclam
# su - amavis -c 'razor-admin -d --create'
# su - amavis -c 'razor-admin -register'
# su - amavis -c 'razor-admin -discover'
# su - amavis -c 'pyzor discover' 
# vim /etc/amavis/conf.d/15-content_filter_mode

#(Descomente)

1
2
3
4
5
@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

1
2
3
4
5
6
7
8
9
#
@lookup_sql_dsn = (
    ['DBI:mysql:database=postfix;host=127.0.0.1;port=3306',
     'postfix',
     '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:

1
$myhostname = "mail.dominiorev.com.br";
# vim /etc/amavis/conf.d/01-debian

Comente:

1
#$unarj      = ['arj', 'unarj'];

Descomente:

1
$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.

1
#$sa_spam_subject_tag = '***SPAM*** ';

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

1
2
3
4
#$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:

1
#$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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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

Restarte todos os serviços

# /etc/init.d/clamav-daemon restart
# /etc/init.d/clamav-freshclam restart
# /etc/init.d/spamassassin restart
# /etc/init.d/amavis restart
# /etc/init.d/dovecot restart
# /etc/init.d/postfix restart 

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

Abraço!

Rudimar Remontti

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

Você pode gostar...

21 Resultados

  1. Maycon disse:

    Boa noite Amigo,

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

    Sabe alguma forma de fazer isto?

  2. Olivam disse:

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

    Obrigado e mais uma vês Ótimo post.

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

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

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

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

  3. Paruba disse:

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

  4. Fabio disse:

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

  5. Fabio disse:

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

  6. Gilvan Muniz disse:

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

  7. Luis Paulo de Almeida Batista disse:

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

  8. Fabio Silva disse:

    Poxa vida Amigo, muito obrigado pelo excelente tutorial.

  9. Adilson disse:

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

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

  11. olivam disse:

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

  1. 13 de fevereiro de 2017

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

Deixe uma resposta

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