Servidor de e-mail com OpenBSD - Postfix & Cia

cvs

Nesse breve HOWTO vamos discorrer a respeito da instalação de um servidor de e-mail usando a plataforma OpenBSD com Postfix, MySQL e mais algumas coisas legais de se mexer.

[ Hits: 70.461 ]

Por: Thiago Alves em 28/01/2009 | Blog: http://www.seeufosseopresidente.com.br


Postfix



Vamos aqui instalar o Postfix.

Tendo em vista que você já tenha o ports funcional no sistema, faça o seguinte:

# cd /usr/ports/mail/postfix/snapshot
# env FLAVOR="mysql sasl2" make install


Isso vai fazer com que seja instalado o Postfix com suporte a MySQL e sasl2 e também instalando os respectivos softwares. Provavelmente vai demorar um pouco.

Agora vamos editar os arquivos de configuração do postfix para ver se está tudo ok.

No arquivo /etc/postfix/main.cf altere o seguinte:

myhostname = mail.exemplo.com.br
mydomain = exemplo.com.br
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8, 172.16.0.0/24, 172.16.240.0/24
relay_domains = $mydestination
relayhost = [smtp.outroservidor.com]
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
smtpd_banner = $myhostname ESMTP $mail_name
virtual_mailbox_domains = $mydomain
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
virtual_alias_maps = hash:/etc/postfix/virtual

Criando o usuário:

# useradd -d /var/mail/vhosts -g =uid -u 2000 -s /sbin/nologin -c "vboxs owner" vmail
# mkdir /var/mail/vhosts
# chown vmail.vmail /var/mail/vhosts/


Editando os arquivos com a lista de e-mails validos:

# cat /etc/postfix/vmailbox

info@exemplo.com.br          exemplo.com.br/info/
ti@exemplo.com.br          exemplo.com.br/ti/
suporte@exemplo.com.br          exemplo.com.br/suporte/
cvs@exemplo.com.br          exemplo.com.br/cvs/

# cat /etc/postfix/virtual

root@exemplo.com.br             root@localhost.exemplo.com.br
postmaster@exemplo.com.br       postmaster@localhost.exemplo.com.br
abuse@exemplo.com.br            postmaster@localhost.exemplo.com.br
diretoria@exemplo.com.br        postmaster@localhost.exemplo.com.br

Depois de alterado da forma desejada, execute os seguintes passas para que as alterações entrem em vigor:

# postmap /etc/postfix/vmailbox
# postmap /etc/postfix/virtual
# newaliases


Agora vamos substituir o sendmail, assim, ativando o postfix:

# postfix-enable
old /etc/mailer.conf saved as /etc/mailer.conf.pre-postfix
postfix /etc/mailer.conf enabled

NOTE: do not forget to add sendmail_flags="-bd" to
      /etc/rc.conf.local to startup postfix correctly.

NOTE: do not forget to add "-a /var/spool/postfix/dev/log" to
      syslogd_flags in /etc/rc.conf.local and restart syslogd.

NOTE: do not forget to remove the "sendmail clientmqueue runner"
      from root's crontab.

Agora comente a linha referente ao sendmail que está no crontab usando o comando:

# crontab -e

Agora vamos alterar a inicialização do syslog e do sendmail para pegar o postfix. Altere o arquivo /etc/rc.conf.

Edite as variáveis para ficarem da seguinte maneira:

syslogd_flags="-a /var/spool/postfix/dev/log"
sendmail_flags="-bd"

Reinicie o sistema pra entrar em vigor as alterações. Teria até outro jeito de fazer, mas é melhor reiniciar só pra ter certeza mesmo.

Agora vamos testar o funcionando do Postfix.

Testando com o telnet na porta 25:

# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 chronos.exemplo.com.br ESMTP Postfix
HELO kernel.org
250 chronos.exemplo.com.br
mail from: abuse@kernel.org
250 2.1.0 Ok
rcpt to: root@exemplo.com.br
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: abuse@kernel.org
To: root@exemplo.com.br
Subject: Email de Teste

Funcionando!
.

250 2.0.0 Ok: queued as 013E16BFA8
quit
221 2.0.0 Bye
Connection closed by foreign host.

Aparentemente tudo ok.

Seguindo os próximos passos:

# openssl req -days 3650 -nodes -new -x509 -keyout /etc/ssl/private/ca.key -out /etc/ssl/ca.crt
Generating a 1024 bit RSA private key
........++++++
.........................................................++++++
writing new private key to '/etc/ssl/private/ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:BR
State or Province Name (full name) []:Brasil
Locality Name (eg, city) []:Goiania
Organization Name (eg, company) []:Exemplo LTDA
Organizational Unit Name (eg, section) []:TI CA
Common Name (eg, fully qualified host name) []:ca.testes.exemplo.com.br
Email Address []:

# openssl req -days 3650 -nodes -new -keyout /etc/postfix/ssl/private/server.key -out /etc/postfix/ssl/private/server.csr
Generating a 1024 bit RSA private key
.................................++++++
....................++++++
writing new private key to '/etc/postfix/ssl/private/server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:BR
State or Province Name (full name) []:Brasil
Locality Name (eg, city) []:Goiania
Organization Name (eg, company) []:Exemplo LTDA
Organizational Unit Name (eg, section) []:Postfix Server
Common Name (eg, fully qualified host name) []:mail.exemplo.com.br
Email Address []:root@exemplo.com.br

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:exemplopasswd
An optional company name []:exemplopasswd

# openssl x509 -req -days 3650 -in /etc/postfix/ssl/private/server.csr -out /etc/postfix/ssl/server.crt -CA /etc/ssl/ca.crt -CAkey /etc/ssl/private/ca.key -CAcreateserial
Signature ok
subject=/C=BR/ST=Brasil/L=Goiania/O=Exemplo LTDA/OU=Postfix Server/CN=mail.exemplo.com.br/emailAddress=root@exemplo.com.br
Getting CA Private Key

Editando o arquivo de configuração do postfix, o main.cf para habilitar o ssl. Edite o arquivo /etc/postfix/main.cf e adicione o seguinte:

# TLS
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_cert_file = /etc/postfix/ssl/server.crt
smtpd_tls_key_file = /etc/postfix/ssl/private/server.key
smtpd_tls_CAfile = /etc/ssl/ca.crt
tls_random_source = dev:/dev/urandom

Salve e feche.

No arquivo /etc/postfix/master.cf descomente as seguintes linhas referentes ao smtps:

smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

Salve e feche.

Verifique se no arquivo /etc/services existe a linha:

smtps 465/tcp # SMTPS

Se não existe, adicione, se existir, copie o arquivo para o chroot do postfix:

# cp /etc/services /var/spool/postfix/etc/services

E por fim, recarregue o postfix:

# postfix reload

Agora vamos para o MySQL.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução - O que é o que?
   2. Postfix
   3. MySQL
   4. Courier-IMAP
   5. Filtragem de conteúdo (Spamassassin + ClamAV + Amavisd-new)
   6. Webmail (Squirrel ou RoundCube)
   7. Postfixadmin
   8. Sugestão de script
   9. Conclusão
Outros artigos deste autor

CentOS + RAID1 via software

MPlayer - The Movie Player

Samba + clamav - compartilhamento livre de vírus

Compilação distribuída usando o distcc

Montando um PDC com OpenBSD

Leitura recomendada

Claws Mail: o cliente de correio eletrônico que morde!

Utilizando o pine com o fetchmail

Utilizando o Thunderbird no Windows e Linux

Servidor de e-mails vinculado ao AD (Postfix + Courier)

Anti-SPAM ASK - Válidando remetentes por confirmação de mensagens

  
Comentários
[1] Comentário enviado por jmucelli em 28/01/2009 - 17:25h

Show de bola o artigo... parabéns... e continue escrevendo sobre o Open... muito bom

[2] Comentário enviado por diogojp em 29/01/2009 - 13:19h

Show de bola o artigo, vc ja tentou aplicar essa solução em um SO Freebsd ?

[3] Comentário enviado por cvs em 29/01/2009 - 13:20h

Opa..
Valeu...
Mas não, ainda não tentei...
Mas acredito que não havera muitas coisas diferentes pra fazer no freebsd.

[4] Comentário enviado por pogo em 30/01/2009 - 11:09h

CVS,

Muito bom o texto. Com certeza precisamos de mais artigos desta qualidade e voltados para sistemas BSD's. Parabéns!

[]'s

Pogo.

[5] Comentário enviado por mathcuei em 31/01/2009 - 18:49h

Caro Thiago!

Primeiramente, agradeço a grande contribuição a toda comunidade!

Estou tentando configurar o servidor como descrito, porém estou com dificuldades de instalação do postfix + mysql. O problema é relacionado alguma source nas configurações do proprio port. Qual é a versão do port que foi instalado? É por um acaso a da data 08/08/2008?

Estou usando a versão 4.4. Poderia ser isso?


Desde já agradecido!


Atenciosamente

[6] Comentário enviado por cvs em 02/02/2009 - 09:45h

Eu usei a versão padrão que fica em ftp://ftp.das.ufsc.br/pub/OpenBSD/4.4/ports.tar.gz e não tive que fazer nada alem do que descrevi para subir o postfix com suporte a mysql. A versão é a 4.4 mesmo que estou usando.

Qual erro que aparece? Cola ae pra gente ver.

[7] Comentário enviado por mathcuei em 03/02/2009 - 10:27h

Caro Thiago!

Acabei por descobrir qual era o erro apresentado. O problema na compilação estava acontecendo pelo uso do interpretador Bash. Efetuei a modificação para o interpretador padrão, continuando assim a compilação perfeitamente. Consegui subi o servidor, seguindo os passos descritos neste. Muito Obrigado pela atenção!


Atenciosamente


[8] Comentário enviado por TecBSD em 06/02/2009 - 12:08h

Para montar um script para popular:

GRANT SELECT ON mail.* to 'vmail'@'localhost' IDENTIFIED BY 'vmail';
use mail; (faltou acrescentar isso)
INSERT INTO domains (domain) VALUES ('exemplo.com.br');

INSERT INTO users (login, name, password, maildir)
VALUES ('thiago@exemplo.com.br', 'Thiago Alves', ENCRYPT('thiagogostosao'), 'exemplo.com.br/thiago/');

INSERT INTO alias_maps (account, alias)
VALUES ('postmaster@exemplo.com.br', 'postmaster@localhost.exemplo.com.br');

INSERT INTO alias_maps (account, alias)
VALUES ('root@exemplo.com.br', 'root@localhost.exemplo.com.br');

[9] Comentário enviado por pardalz em 21/01/2010 - 11:31h

amigão... pode me ajudar?


[11] Comentário enviado por pardalz em 21/01/2010 - 17:11h

respondi la..


Contribuir com comentário