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: 43.752 ]

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 sceo@localhost 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 lucas@dominio.com.br:

# 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 ('lucas@dominio.com.br','/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

Benchmark entre servidores de e-mails

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

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

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

Leitura recomendada

Post-la - Gerador de relatórios para o Postfix

Qmail e chkuser - fila de mensagens limpa

Autenticando e enviando e-mail diretamente através da linha de comando

Postfix + Dovecot + MySQL + Squirrelmail no CentOS 5.5 32/64 bits

Comunicação POP3

  
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 lucas@dominio.com.br mudar123
-ERR Invalid command.

login idalmo@ipxba.no-ip.biz
-ERR Invalid command.

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

user lucas@dominio.com.br
+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 idalmo@ipxba.no-ip.biz
+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 lucas@dominio.com.br 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 lucas@dominio.com.br

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 lucas@dominio.com.br 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 lucas@dominio.com.br
+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 sceo@hospedaria.com.br

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts