Servidor de e-mail Postfix + MySQL + Dovecot + Cyrus

Nesse artigo aprenderemos a configurar rapidamente um servidor de e-mail com Postfix + MySQL + Dovecot + Cyrus usando RHEL 5.2.

[ Hits: 96.069 ]

Por: André Costa em 08/03/2010


Configuração do MTA Postfix



Postfix precisa saber onde e como ele pode procurar todas as informações relacionadas com caixa de entrada. Para este efeito, iremos criar os seguintes arquivos em /etc/postfix.

# cd /etc/postfix

Criar o arquivo mysql_virtual_alias_maps.cf para encaminhar e-mails de um endereço de e-mail para outro.

# vi /etc/postfix/mysql_virtual_alias_maps.cf

user = mail
password = mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Criar o arquivo "mysql_virtual_domains_maps.cf" para o mapeamento de domínios virtuais.

# vi /etc/postfix/mysql_virtual_domains_maps.cf

user = mail
password = mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'

Criar o arquivo mysql_virtual_mailbox_maps.cf, que é o mapeamento de endereços de e-mail para a localização da caixa de entrada dos usuários no seu disco rígido:

# vi /etc/postfix/mysql_virtual_mailbox_maps.cf

user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

Finalmente criar o arquivo mysql_virtual_mailbox_limit_maps.cf, que será usado para mapear os utilizadores de correio limite de cota.

# vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf

user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'

Depois de criados, dê permissão para os arquivos:

# cd /etc/postfix
# chown root:postfix *.cf
# chmod 644 *.cf


Antes de mexer no arquivo de configuração, criar uma cópia de segurança do main.cf:

# mv /etc/postfix/main.cf /etc/postfix/main.cf.orig

Vamos começar a configuração:

# vi /etc/postfix/main.cf

############## Postfix###############
#Data modificado em 15.02.2010
#Andre Costa
#-----------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
#relayhost =
#relay_domains = $mynetworks
mynetworks = 127.0.0.0/8, 172.16.0.0/24, 172.16.3.0/24, 172.16.1.0/24
inet_interfaces = all
#inet_protocols = all
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = mail.domain.com.br
mydomain = domain.com.br
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
#numero de msgs que podem ser enviadas por vez
smtpd_recipient_limit = 100
#Se e obrigado a fazer helo
smtpd_helo_required = yes
unknown_local_recipient_reject_code = 450
#Quantidades de processos o valor padrão e 100
default_process_limit = 500

####################postfix section ends here###############

#$config_directory
#######################Virtual Domains Users and mailboxes###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
##############################Virtual section of main.cf ends##############

#################### SASL/TLS Authentication###########################
######SASL PART#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
#######################################################################
smtpd_recipient_restrictions = reject_invalid_hostname, reject_unauth_pipelining, permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_client_access, reject_rbl_client sbl.spamhaus.org, reject_rbl_client sbl-xbl.spamhaus.org, permit

######TLS PART###########
#smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
#smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
#smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
#smtp_tls_auth_only = yes
#smtp_use_tls = no
#smtpd_use_tls = yes
#smtpd_tls_received_header = no
#smtp_tls_note_starttls_offer = yes
#smtpd_tls_loglevel = 1
#tls_random_source = dev:/dev/urandom
#smtpd_tls_session_cache_timeout = 3600s
#smtpd_tls_recieved_header = yes
###########################SASL/TLS Authentication ends here#############
data_directory = /var/lib/postfix

Criar diretório para domínios e usuários virtuais:

# mkdir /var/vmail
# useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual mailbox" vmail
# chmod 770 /var/vmail/
# chown vmail:mail /var/vmail
# cp /etc/aliases* /etc/postfix/
# newaliases


Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação e configuração do DNS (Bind)
   3. Cyrus-sasl para SMTP AUTH, OpenSSL para TLS e MySQL
   4. Dovecot e MTA Postfix
   5. Configuração do SMTP-AUTH/TLS e MySQL
   6. Configuração do MTA Postfix
   7. Configuração do Dovecot, servidor POP3 e IMAP
   8. Subindo os serviços e testando o sistema
Outros artigos deste autor

Webmail Squirrelmail e Roundcubemail, Clamav e SpamAssassin integrados no MTA Postfix

Cluster MySQL - Instalação e configuração

Leitura recomendada

Dividindo carga de saída de servidor SMTP (MTA Selor)

Aliases e autenticação para aliases no Postfix

Como acessar contas do Hotmail no seu cliente de e-mail Linux

Postfix com autenticação em base LDAP no Slackware

Populando sua SpamTrap com e-mails relevantes

  
Comentários
[1] Comentário enviado por thiagosc em 08/03/2010 - 20:40h

Olá amigo muito bom o artigo!

Você já configurou o mesmo como um servidor de e-mail interno? Em uma rede baseada em windows 2003 server?

[2] Comentário enviado por andrecostall em 08/03/2010 - 21:00h

Obrigado thiagosc.
Sim, já configurei como um servidor interno, minha rede também é baseada em windows 2003 server, são 35 usuários pendurado em um unico servidor usando Terminal Service e funcionou perfeitamente.
Quaisquer duvida da um grito ai.
Abraços

[3] Comentário enviado por marcosantonioti em 03/05/2010 - 16:33h

André, vc esta de parabéns, o artigo ficou perfeito, com uma ótima distribuição que é o"CentOS" e uma linguagem de fácil entendimento. Precisamos de mais Administradores como vc, Obrigado!!!

[4] Comentário enviado por marcosantonioti em 29/09/2010 - 17:14h

André, é o Marcos colega seu que trabalhava na Consel em Brasilia, me add no meu novo msn e gtalk, [email protected]m, [email protected]

[5] Comentário enviado por tiagogchagas em 19/11/2010 - 18:10h

Amigos, estou tendo o seguinte problema ao compilar esses arquivos
/usr/bin/ld: cannot find -llber
collect2: ld returned 1 exit status
make: ** [master] Erro 1
make: ** [update] Erro 1

Se alguem poder me ajudar...preciso muito instalar o postfix..estou fazendo um trabalho sobre...

desde ja grato

[6] Comentário enviado por syokoyama em 29/11/2010 - 12:56h

A linha xxgdb $daemon_directory/$process_name $process_id & sleep 5 contém um erro.

Em primeiro lugar, a versão 5.5 não possui mais o xxgdb no extras. Mas isso pode ser resolvido baixando em:
ftp.forth.org e instalando manualmente.

Em segundo lugar, as duas linhas abaixo do debugger_command são referentes a ele. Portanto, devem ser colocadas como subcomandos, ou seja, iniciando as linhas com tabulação.

Ficariam semelhantes a:
debugger_command =
<TAB>PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
<TAB>xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no

Deve ser por causa do editor usado para inserção da matéria no site que deve coibir o uso de espaço e tabulação antes da linha.

O tutorial está muito bom. Parabéns.

[7] Comentário enviado por lpossamai em 02/12/2010 - 08:36h

Bom dia tiagogchagas
Conseguiste resolver o problema do "/usr/bin/ld: cannot find -llber"?

Obrigado.

[8] Comentário enviado por andrecostall em 02/12/2010 - 15:46h

Boa tarde tiagogchagas !!!

E ai cara conseguiu resolver o problema ?

Qualquer coisa me add ai no msn [email protected]

Abraço

[9] Comentário enviado por lpossamai em 04/12/2010 - 11:53h

Bom dia André..
Seu tutorial é muito bom !
está funcionando tudo perfeitamente.

Porém, tenho uma dúvida.
Se eu quiser que o [email protected] tenha limite de 20 MB na mailbox dele, e o [email protected] tenha 40 MB.
Como prodecer?

Obrigado

[10] Comentário enviado por andrecostall em 06/12/2010 - 15:56h

Boa tarde psyscrew !!!

Cara na tabela "mailbox" tem o campo "quota", para inserir 20MB o valor seria "20000000" e de 40MB "40000000".

mysql > update mailbox set quota = 20000000 where username = '[email protected]';

Abraços

[11] Comentário enviado por doomk em 03/04/2012 - 10:39h

Pra a galera que se deparou com o erro abaixo:


/usr/bin/ld: cannot find -llber
collect2: ld returned 1 exit status
make: ** [master] Erro 1
make: ** [update] Erro 1


É só instalar o pacote openldap-devel que resolve.

(yum install openldap-devel)


Abraço

[12] Comentário enviado por heathcliffz em 24/05/2012 - 08:43h

meu caro... como funciona a questão do domínio?
tenho uma rede baseada em win 2008 server e gostaria de ter um servidor de e-mail interno somente para algumas aplicações (como o ZABBIX) enviar e-mails de alerta...
eu terei que ter um domínio válido para configurar os MX ou posso definir qualquer um já que os e-mails serão enviados para o e-mail corporativo? (esse e-mail corporativo é hospedado por nós mesmos)

[13] Comentário enviado por andrecostall em 05/06/2012 - 16:51h

Boa tarde heathcliffz!

Cara desculpa a demora.

Então, vc pode configurar um domínio interno e apontar o MX dentro da sua rede, mas vc só vai poder enviar e-mails.

Se precisar de ajuda me add no MSN: [email protected] ou gtalk; [email protected]

Abs

[14] Comentário enviado por carlos domingues em 14/08/2012 - 10:37h

Bom dia André
Obrigado por nos ajudar, ótimo tutorial.
Consigo enviar emails, inclusive externo, porem, receber não consigo. Os emails que chegam não vai para o MAILBOX do dominio.
Ficam no spool e na caixa de entrada de emails /var/mail/"user" em texto. Sendo que deveria ficar em /var/vmail/"dominio"/"usuario".
Se eu cadastro os usuarios no banco de dados do mysql e não cadastro no sistema unix, ao enviar email dá como usuario desconhecido.

Tenho dominio cadastrado com internet e servidor DNS em funcionamento nesse servidor.

Estou te adcionando no MSN caso voce tenha disponibilidade para ajudar me nesse item que falta.

Obrigado.

[15] Comentário enviado por lucianonicola em 18/04/2013 - 11:44h

quando inicio o dovecot da o seguinte erro:

[[email protected] dovecot]# /etc/init.d/dovecot start
Starting Dovecot Imap: doveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf: passdb is missing driver

o que pode ser?

[16] Comentário enviado por linus black em 06/05/2013 - 18:06h

amigo essa configuração pode ser aplcada na integra no debian?.

[17] Comentário enviado por linus black em 06/05/2013 - 18:10h

o dns que vc usou no arquivo /var/named/chroot/etc/named.conf
é da sua rede ou dns free ou de um servidor como velox

[18] Comentário enviado por andrecostall em 06/05/2013 - 22:26h

Fala linus black, boa noite!

Sim, esta configuração pode ser aplicada em qualquer versão do linux.

Essa configuração de dns é da minha própria rede.

Abraço!

[19] Comentário enviado por andrecostall em 06/05/2013 - 22:29h

Fala lucianonicola, boa noite!

Cara desculpe a demora para responder, faz muito tempo que não passo por aqui!

Fique atento nas chaves "{}", pode ser isso!

Qualquer dúvida posta ai!

Abraço!


Contribuir com comentário