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.