Servidor de e-mail no Linux com MTA Sceo

Como configurar um servidor de email no Linux usando MTA Sceo e Courier-IMAP com base de dados MySQL, Maildir, proteção antivírus com Clamav, proteção antispam com SPF e Greylist, quota de caixa postal e controle de número de emails enviados por cliente.

[ Hits: 41.331 ]

Por: Lucas Priori em 15/09/2008


Preparando-se



Características do servidor de e-mail:
  • Courier IMAP;
  • Caixas postais em formato Maildir;
  • SMTP Sceo autenticado;
  • MySQL;
  • Quota de caixa postal e número de emails enviados;
  • Proteção SPF e Greylist;
  • Proteção com antivírus Clamav.

Meu nome é Lucas, sou programador e autor do projeto MTA Sceo, um servidor SMTP para Linux escrito do zero em C e Assembly. Comecei há muito tempo um programa anti-spam e isso me jogou dentro do mundo dos emails.

Senti então a necessidade de um servidor MTA mais flexível, onde eu pudesse acionar programas externos com facilidade e que trabalhasse com esquemas de condições e ações. Nasceu então o projeto.

Vou demonstrar neste tutorial como criar um servidor de emails com domínios virtuais em base de dados MySQL.

O servidor SMTP será o MTA Sceo, que fará consultas via módulo externo em um banco de dados MySQL, controlando quota de tamanho de caixa postal e limite de número de emails que cada cliente pode enviar por dia/semana/mês e vamos usar proteção anti-spam com SPF e Greylist e proteção contra vírus usando o Clamav.

Para serviços POP3 e IMAP, usaremos o Courier-IMAP, que trabalhará com a mesma base de dados usada pelo servidor SMTP.

Versões utilizadas:
  • Linux Slackware 12.0 Full;
  • Courier authentication library 0.61.0;
  • Courier-IMAP 4.4.1;
  • Courier Maildrop 2.0.4;
  • MTA Sceo 0.28b;
  • Módulo externo Sceo_mysql 1.1;
  • Utilitário Sceo_greylist
  • Utilitário Sceo_rquota;
  • Clamav 0.94.

Obtendo arquivos necessários

Crie um diretório temporário (/home/temp), faça download dos seguintes arquivos e jogue-os lá dentro.

POP3 e IMAP

Courier authentication library:
Courier-imap para os serviços de POP3 + IMAP:
Courier Maildrop (MDA - Mail Delivery Agent)

SMTP

MTA Sceo para o protocolo SMTP:
Módulo Sceo_mysql para permitir que o MTA Sceo trabalhe com base de dados Mysql:
Utilitário externo Sceo_greylist:
Utilitário externo Sceo_rquota para controlar o número de emails enviados por cliente:

Antivírus Clamav

Antivírus Clamav para Linux:
O primeiro passo é criar o usuário 'sceo' que será utilizado pelo Courier e Sceo nas caixas postais dos clientes:

# useradd -u 105 sceo

Utilize o UID 105 que é o que usaremos no banco de dados. Se quiser você pode usar outro, mas lembre-se de alterar o UID em todas as etapas abaixo.

Preparando o banco de dados Mysql

No Slackware é preciso criar o banco de dados básico de funcionamento do Mysql, sem isso ele não liga.

Digite os seguintes comandos:

# /usr/bin/mysql_install_db
# chown -R mysql. /var/lib/mysql/mysql
# chown -R mysql. /var/lib/mysql/test
# chmod 555 /etc/rc.d/rc.mysqld


Ligue o Mysql:

# /etc/rc.d/rc.mysqld start

Vamos criar o banco de dados, digite os seguintes comandos:

# mysql

mysql> create database mail;
mysql> grant all privileges on mail.* to [email protected] identified by "minhasenha" with grant option;
mysql> flush privileges;
mysql> quit

Lembre-se de colocar uma outra senha qualquer no comando identified by "minhasenha" acima.

Pronto, o banco de dados está criado, vamos criar agora as tabelas. Crie um arquivo chamado mail.sql.

# pico /etc/mail.sql

e coloque o seguinte texto dentro dele:

-- ----------------------------------
-- Estrutura da tabela `aliases`
--
CREATE TABLE `aliases` (
`alias` varchar(255) NOT NULL default '',
`rcpt` varchar(255) default NULL,
KEY `alias` (`alias`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ----------------------------------
-- Estrutura da tabela `domain`
--
CREATE TABLE `domain` (
`name` char(128) NOT NULL default '',
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ----------------------------------
-- Estrutura da tabela `users`
--
CREATE TABLE `users` (
`id` int(32) unsigned NOT NULL auto_increment,
`mail` char(128) NOT NULL default '',
`pass` char(128) default NULL,
`uid` int(10) unsigned default '105',
`gid` int(10) unsigned default '100',
`home` char(255) default NULL,
`maildir` char(255) default NULL,
`date_add` date default NULL,
`time_add` time default NULL,
`domain` char(128) default NULL,
`name` char(255) default NULL,
`ok` tinyint(3) unsigned default '1',
`quota` char(255) default '250000000',
PRIMARY KEY (`mail`),
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

250000000 equivale a aproximadamente 250MB para cada caixa postal. Você pode alterar este valor se quiser. Em vários tutoriais por ai, você pode notar um 'S' no final do valor da quota (Ex: 250000000S), ele serve para fazer o maildrop, controlar a quota pra você, mas NÃO é isso que queremos. O Sceo é que vai controlar e você NÃO deve colocar o 'S' no final.

Agora execute o comando:

# mysql mail < /etc/mail.sql

Se não houve mensagem alguma de resposta, tudo ocorreu bem, o banco de dados está criado e suas tabelas também. (Assim espero.)

Entre no Mysql e insira alguns registros que usaremos para testes. Vamos usar um domínio de testes chamado dominio.com.br com a conta de email [email protected]:

# mysql

mysql> use mail;
mysql> INSERT INTO domain VALUES ('dominio.com.br');
mysql> INSERT INTO users ( mail,home,pass,maildir,date_add,time_add,domain,name) VALUES ('[email protected]','/home/mail/',encrypt('mudar123'), 'dominio.com.br/lucas/Maildir/', '2008-08-14', '00:00:00', 'dominio.com.br', 'Lucas Teste');
mysql> quit

Ok, a parte do Mysql está finalizada. Vamos agora a parte mais complicada que é a instalação do Courier-IMAP, sua lib de autenticação e o Maildrop.

    Próxima página

Páginas do artigo
   1. Preparando-se
   2. Courier-Authlib
   3. Courier-IMAP
   4. MTA Sceo
   5. Configurando o SPF
   6. Greylist
   7. Quota de caixa postal e número de emails enviados
   8. Antivírus Clamav e finalizando
Outros artigos deste autor

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

Servidor de emails com Dovecot e MTA Sceo (projeto brasileiro)

Benchmark entre servidores de e-mails

MTA Selor: Servidor de E-mails - Novo Projeto GPL

Leitura recomendada

Gateway de email com Qmail - proteção antivírus e antispam

Abrindo arquivos TNEF

Montando um servidor de e-mail completo com Postfix

Configurando o Korn

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

  
Comentários
[1] Comentário enviado por giovanildo em 15/09/2008 - 09:49h

É por causa de artigos como esse que se tornou rotina a minha visita a este site, o q tenho a dizer eh obrigado.

[2] Comentário enviado por naarea em 15/09/2008 - 11:56h

So tomem cuidado com a questão da licença do software
"2) Esta versão do MTA Sceo não disponibiliza seu código-fonte, ficando
obrigado a qualquer um não modificar, descompilar ou utilizar qualquer outro
meio para descobrir o código-fonte do programa."

"Você deve estar ciente de que o programa não
é livre de defeitos e seus autores e/ou distribuidores não dão e não
podem dar qualquer tipo de garantias"

Mais parabens pelo tutorial.

[3] Comentário enviado por lpriori em 15/09/2008 - 13:24h

Ola naarea e giovanildo,

Obrigado, é muito bom poder contribuir para a comunidade.
Pretendo escrever muito mais.

O software é grátis como os de licença GPL, mas por enquanto só não é possível modifica-lo porque seu código fonte não esta disponível.

Toda idéia das "garantias" foram tiradas da licença GPL que tenta sempre proteger o autor de qualquer problema. Foi apenas isso que tentei fazer. Este programa esta em uso em muitos lugares e a muito tempo sem dar problemas, sem sequer precisar ser reiniciado.

Não tenho sequer pensamentos de num futuro próximo cobrar o uso do programa, muito pelo contrário, espero disponibiliza-lo sob GPL também, assim como seus utilitários disponíveis no site.

Conheço vários outros programadores que também tem medo de disponibilizar o código fonte de seu projeto e na maioria das vezes eles nem mesmo divulgam o projeto. Uma pena pois nosso país é residência dos melhores programadores.

O Sceo é um projeto muito especial pra mim. Esta disponível porque tenho certeza absoluta que seu poder em velocidade, flexibilidade e segurança vai ajudar muito todos nós da comunidade e porque tenho o sonho de incentivar nós brasileiros a mostrar que temos o potencial para bater de frente com os enlatados de fora e principalmente porque quero receber dicas de melhorias.

Gostaria de aproveitar e agradecer ao grupo vivaolinux. Achei extremamente profissional o processo de criação de tutorial aqui.



[4] Comentário enviado por renatomartins em 15/09/2008 - 14:35h

Parabéns pelo MTA.
Mas não caia no erro do qmail, que devido o tipo da licença não se popularizou, e não pode ser integrada nas distribuições e não teve o devido crescimento. Isso foi uma grande perda para a comunidade livre.
Mas mesmos sem licença mas com código aberto ele é considerado o melhor servido de email do mundo.( o código do qmail é aberto com ressalva o núcleo não pode ser alterado só podemos aplicar patch. )

Outra coisa se você abrir seu código alem de ganhar varias contribuições e atá melhorias. Você pode aprende muito com outros programadores e talvez até uma distro linux receber seu servidor como uma alternativa ate mesmo para o qmail e portfix.

Eu mesmo já precisei fazer varias alterações tanto no postfix quanto qmail e isso só foi possível devido o código ser aberto

Um grande abraço e novamente Parabéns

[5] Comentário enviado por grandmaster em 15/09/2008 - 17:24h

Muito bom saber que temos mais opções :D

Renato de Castro Henriques
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br

[6] Comentário enviado por nariz em 16/09/2008 - 08:36h

nao conhecia esse
testarei em breve

obrigado

[7] Comentário enviado por c.rafael em 16/09/2008 - 17:32h

lpriori ,

Meus parabéns pelo o software e pelo insentivo de colocar o mesmo no VL. Irei testar o mesmo e colocar o resultado do mesmo aqui.

Abraços

[8] Comentário enviado por Telli em 16/09/2008 - 17:44h

Mas não possui nem um webmail ? E como criar as contas de e-mail nele ?

[9] Comentário enviado por lpriori em 20/09/2008 - 17:43h

Desculpem-me mas ficou faltando um comando no tutorial.

Logo após a instalação do Maildrop, é preciso setar o uid dele senão ele pode ter problemas para entregar o email na caixa postal.

# chmod 4555 /usr/local/bin/maildrop

É só fazer isto e tudo fica ok

Em relação a criação de contas de emails:
Estou terminando uma ferramenta de criação das contas de emails no banco de dados MySQL que será anexada ao pacote do sceo_mysql em breve.


Obrigado a todos pelos comentários.
Espero que gostem do projeto.


[10] Comentário enviado por kram3r em 09/10/2008 - 20:43h

Caro lpriori,
adorei o seu mta. Simples prático rápido e seguro.
Implementei ele em 2 servidores que utilizo e estão trabalhando de forma absolutamente Jóia!!!
porem, vc comentou que esta terminando uma ferramenta de criacao de contas. Eu a fiz e estou somente finalizando e o código estará liberado após alguns testes. Inclusive gostaria de uma avaliação sua e do pessoal que já o tem implementado (basta entrar em contato).
Outra coisa que gostaria de saber, é como implementar lista de discussao nele (como o mailman, ezmlm, majordomo e outros...)Há algum já implementado com SCEO?

Grande abraço e parabens.

[11] Comentário enviado por lpriori em 21/10/2008 - 16:13h

Obrigado pelo comentário aqui e o que me enviou por email, kram3r

Como disse a você via email, eu nunca instalei esses gerenciadores de listas com Sceo. Quando você o fizer,
ficaremos feliz em ler um tutorial seu explicando o caminho (principalmente eu) ;-)

Podem enviar qualquer dúvida ou sugestão por email ou pelo site sceo.hospedaria.com.br que
ficarei feliz em ajudar ou que me ajudem. =)

Uma nova versão do Sceo esta a caminho, com muitos melhoramentos, por isso é importante que eu
receba sugestões para o projeto.

Há uma nova versão do modulo Mysql
A versão apontada pelo tutorial é a versão 1.1 e a nova versão é a 1.2
http://sceo.hospedaria.com.br/ferramentas/sceo_mysql_1.2.tar.bz2

Foi corrigido apenas um bug no controle de quota para caixas postais gigantes.

Abraço a todos e mais uma vez obrigado a equipe do VOL.



[12] Comentário enviado por lpriori em 14/11/2008 - 16:46h

Esta disponível no site do projeto o Sceo-UI. É uma ferramenta extremamente útil escrita em PHP para administrar seu servidor de emails.
Foi programada pelo Ananias (kram3r)

O link é http://sceo.hospedaria.com.br/ferramentas/sceo-ui-0.6.tar.gz


Obrigado Ananias por contribuir para o projeto. O administrador ficou excelente.

[13] Comentário enviado por lpriori em 12/12/2008 - 13:05h

Me desculpem mais eu percebi um erro no tutorial. É um erro de digitação apenas.

Na parte de Greylist, a regra que aciona o programa no arquivo regras_destinatario esta incorreta.

Na regra:
!SPF_resp? "1" !Auth? Internal_rcpt? Exec! "sceo_greylist -i %s -f %f -t %r" Exec_resp? "1" Reply! "451 Tente mais tarde" Deny!

A primeira condição esta digitada de forma errada, o correto é:
!Spf_resp? "1" .....

Com o erro, a Greylist acaba não sendo processada e por conseqüência, muitos Spams passam.



[14] Comentário enviado por calaff2 em 31/01/2009 - 23:46h

Ae meu velho estou com alguns problemas nunca configurei um servidor de email.
Vamos lá:
telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.

login [email protected] mudar123
-ERR Invalid command.

login [email protected]
-ERR Invalid command.

elnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.

user [email protected]
+OK Password required.

ass mudar123
-ERR Temporary problem, please try again later
Connection closed by foreign host.

telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user [email protected]
+OK Password required.
pass mudar123
-ERR Temporary problem, please try again later
Connection closed by foreign host.




[15] Comentário enviado por lpriori em 01/02/2009 - 12:56h

Olá calaff2,

O primeiro problema ocorreu porque você errou a porta. Você deu comandos de IMAP no POP3

"login [email protected] mudar123" é um comando de IMAP que funciona na porta 143

Veja que você deu um telnet na porta 110

O outro problema ocorreu porque provavelmente você não criou o diretorio HOME do email [email protected]

De uma olhada no tutorial, antes ele te manda criar o diretorio home do email...

Abraço,
Lucas

[16] Comentário enviado por calaff2 em 01/02/2009 - 14:41h

Lucas você tem como informar seu msn e seu email para contato tirar algumas duvidas?


telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc. See COPYING for distribution information.
? login [email protected] mudar123
* BYE Temporary problem, please try again later
Connection closed by foreign host.


telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user [email protected]
+OK Password required.
pass mudar123
-ERR Temporary problem, please try again later
Connection closed by foreign host.



ta criado o direotrio

ls /home/mail/dominio.com.br/lucas/Maildir/
cur/ maildirsize new/ tmp/

ls /home/mail/ipxba.no-ip.biz/idalmo/Maildir/
cur/ maildirsize new/ tmp/


Att: Idalmo Junior

[17] Comentário enviado por lpriori em 02/02/2009 - 16:10h

Pode ser um problema de permissão então.

Tente dar um chmod -R 755 em /home/mail
chmod -R 755 /home/mail

o Corrier é meio chatinho mesmo.

Algum passo foi pulado no tutorial. Verifique se o /usr/local/libexec/courier-authlib/authdaemond esta rodando.


Você pode me contactar pelo email [email protected]

Abraço,
Lucas

[18] Comentário enviado por lpriori em 02/02/2009 - 16:11h

Esqueci de um detalhe,

Verifique se é o usuario do diretorio também.

chown -R sceo. /home/mail


[19] Comentário enviado por calaff2 em 11/02/2009 - 14:18h

Lucas velho você esta vivo ? hauhauha mandei alguns emails para você e até agora não recebi resposta .

Abraços

Att: Idalmo Junior

[20] Comentário enviado por lpriori em 22/06/2009 - 15:36h

Gostaria de informar que o código fonte do MTA Sceo será disponibilizado em breve sob licença GPL.
O código fonte esta sendo preparado para um fácil entendimento, como adição de comentários, estrutura interna de distribuição das funções em arquivos fonte separados, etc...

Espero poder contar com a comunidade livre

[21] Comentário enviado por kram3r em 22/06/2009 - 15:46h

Ótima notícia.
Lembrando que uma das ferramentas externas do sceo já é GPL (nasceu GPL)
O Sceo-UI que era de minha autoria e que já foi modificado por 4 pessoas e hoje tem um mantedor junto comigo na re-escrita do zero utilizando o framework CodeIgniter.
Parabéns pela decisão!

[22] Comentário enviado por poetah em 02/10/2009 - 11:15h

Belo artigo,
mais aqui não se encontra a pasta com o file
para iniciar o imap

/usr/lib/courier-imap/libexec/imapd.rc

debian lenny aqui

?


[23] Comentário enviado por poetah em 03/10/2009 - 01:09h

disfarça, acabei não lendo os erro na compilação e nao vi que precisa de permissão ali para criar as pastas!!!

(Y)


Contribuir com comentário