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.
A Greylist faz com que um email seja temporariamente recusado por nosso servidor, se por acaso o host remoto seguir as regras do protocolo SMTP ele vai tentar reenviar a mensagem mais tarde onde será aceita sem problemas pelo nosso servidor. Grande parte dos spammers não tentam reenviar uma mensagem em caso de erro temporário. Todo esse processo é controlado via banco de dados pelo programa sceo_greylist.
O filtro Greylist é muito poderoso e barra muito lixo. Muitos servidores por aí usam Greylist baseada no IP do servidor remoto, mas há casos em que um host possui vários IPs e isso prejudica muito o esquema básico da Greylist. Vamos fazer então o sceo_greylist trabalhar não com o IP, mas com o endereço reverso do servidor e caso o mesmo não tenha, o Sceo automaticamente utilizará o endereço IP.
O Gmail é um exemplo onde um mesmo endereço reverso tenta entregar uma mensagem com muitos IPs diferentes. Outro diferencial é que NÃO vamos rodar Greylist caso o SPF do domínio esteja OK (Pass). Isto agiliza a entrega de emails de servidores válidos (vindos do Gmail, Hotmail etc). Isto me tirou muita dor de cabeça, já que o spammer que é capaz de configurar um registro SPF consegue passar tranqüilamente por uma Greylist.
Para tudo ficar organizado crie o diretório /usr/local/sceo/uteis:
# mkdir /usr/local/sceo/uteis
# cd /home/temp
# cp sceo_greylist.tar.bz2 /usr/local/sceo/uteis/
# cd /usr/local/sceo/uteis
# tar xjvf sceo_greylist.tar.bz2
Crie o banco de dados:
# mysql
mysql> create database sceo_greylist;
mysql> grant all privileges on sceo_greylist.* to sceo@localhost identified by "minhasenha" with grant option;
mysql> flush privileges;
mysql> quit
Você pode usar outro usuário e senha se quiser. Jogue do arquivo sceo_greylist.sql para o banco de dados:
# mysql sceo_greylist < sceo_greylist.sql
Agora é só editar o sceo_greylist.c:
# pico sceo_greylist.c
Procure as defines USUARIO e SENHA para mudar seus "valores" se necessário.
#define USUARIO "sceo"
#define SENHA "minhasenha"
Lembre-se de colocar a senha que especificou na criação do banco de dados sceo_greylist acima. Salve, saia do arquivo e compile-o:
Obs.: Todos comandos acima DEVEM ficar em uma única linha.
Esta linha roda o programa externo sceo_greylist caso a resposta do SPF NÃO seja 1 e o cliente NÃO seja autenticado. A exclamação (!) na frente da condição funciona como um negador.
Salve e saia do arquivo. Não é preciso reiniciar o Sceo. Você só precisa reiniciá-lo quando alterar o arquivo sceo.conf.
Agende o seu cron para rodar a seguinte linha uma vez ao dia:
sceo_greylist -clean
Linha do cron:
00 0 * * * /usr/bin/sceo_greylist -clean
Isso fará a exclusão de registros mortos mantendo o banco de dados limpo e rápido.
[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"
[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
[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?
[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.
[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)
[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.
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.
[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/
[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...
[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!