FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD
 
08.07  
Inicio arrow Resumo do Site arrow How-To Postfix com SMTP AUTH, Anti-spam, Anti-vrus, Quota, Dominios Virtuais, Pop3 e Imap
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histrico da Lista
Forum
Keyserver
PC-BSD: Artigos
PC-BSD: Notcias
Galeria de Imagens
Contador Usurios FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS / Twitter
-
DOC-BR (FUG BR)
Introduo
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usurio

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma


How-To Postfix com SMTP AUTH, Anti-spam, Anti-vrus, Quota, Dominios Virtuais, Pop3 e Imap PDF Imprimir E-mail
Por Daniel Bristot de Oliveira   
21/06/2006
ndice de Artigos
How-To Postfix com SMTP AUTH, Anti-spam, Anti-vrus, Quota, Dominios Virtuais, Pop3 e Imap
Parte 2

ImageO Postfix é um servidor de e-mail estável, leve e modular, sua modulariade permite integrá-lo a vários outros serviços, mantendo um baixo consumo de recursos.

Iremos integrar o Postfix com as ferramentas mais utilizadas em servidores de e-mail: O Anti-Spam SpamAssassim, Anti-Vírus  Clamav, Courier-Maildrop, Courier-Imap, Cyrus-Salsl. A base de dados será armazenada no banco de dados MySQL, e o sistema terá suporte para múltiplos domínios. Também, como opcional, temos a configuração do UebiMial , um Webmail em PHP.

Postfix

Atenção: Se for copiar e colar os arquivos de configuração RETIRE OS COMENTÁRIOS!!!!!! POIS ELES PODEM CAUSAR ERROS, PRINCIPAMENTE SE ELES NÃO INICIAM NO COMEÇO DA LINHA.

 A ordem de configuração foi a que eu pessoalmente achei mais simples, primeiramente iremos configurar os sistemas que darão sustentação ao servidor, como a base de dados, depois iremos instalar e configurar os sistemas periféricos e ao final ligaremos tudo com o Postfix.

MySQL

O banco e dados será responsável pelo armazenamento e gerenciamento da base de dados dos usuários. A base de dados irá conter informações como, nome do usuário, domínio, cota em disco, local do armazenamento da mensagem, e outros informações que serão necessárias para alguns daemons. Um banco centralizado irá ajudar na administração pois todos os serviços iráo ter compatibilidade de informações.

Instalando o Mysql

A instalação do MySQL é feita através do ports, Neste caso utilizaremos a versão 5.0 do MySQL. O caminho para o ports do MySQL 5 é: /usr/ports/databases/mysql50-server Entre no ports e instale o MySQL, em geral somente o comando make fará o serviço, porém eu utilizei o seguinte comando.

# make WITHOUT_INNODB=yes BUILD_STATIC=yes BUILD_OPTIMIZED=yes install

Configurando o MySQL

Configuração para o Sistema Operacional Existem algumas opções do /etc/rc.conf para a inicialização do banco de dados com o sistema, veja no quadro abaixo.

mysql_enable="YES" Para habilitar o MySQL.

mysql_dbdir="/var/db/mysql" Para especificar o local onde ficará a base de dados do MySQL.

mysql_args="" Argumentos de linha de comando de inicialização do MySQL.


Uma configuração padrão do rc.conf é a seguinte.

''mysql_enable="YES"''
''mysql_dbdir="/var/db/mysql"''

A partir deste momento podemos inicializar o MySQL, como por padrão, foi criado um script de controle em /usr/loca/etc/rc.d, para iniciar o banco de dados execute:

# /usr/local/etc/rc.d/mysql-server.sh start

Configuração do Banco de Dados

Agora devemos adicionar uma senha para o usuário administrador, por padrão o usuário root.

# mysqladmin -u root password "Senha"

Existem algumas configurações que podem ser feitas no MySQL, o arquivo de configuração fica por padrão no diretório da base da dados com o nome my.cnf, em meu caso o seu caminho é /var/db/mysql/my.cnf. A minha configuração ficou assim:

[client]
socket = /tmp/mysqld.sock
[safe_mysqld]
err-log = /var/log/mysql.err
[mysqld]
user = mysql
port = 3306
log = /var/log/mysql.log
set-variable = key_buffer=5M

A instalação e configuração básica do MySQL estão prontas, agora vamos criar os bancos de dados.

Estrutura do Banco de Dados

Nosso banco de dados irá precisar basicamente de um banco de dados e três tabelas, o banco de dados terá o nome mail, as tabelas serão a tabela aliases que será responsável pelos alias do servidor de e-mail, a tabela trasport que será responsável em distinguir o transporte local do transporte virtual e por fim, a tabela virtual_users que terá as informações sobre cada usuário.

Vejamos uma explicação do conteúdo das tabelas aliases

alias varchar(255) NOT NULL default '',            #Nome do destinatário do correio
rcpt varchar(255) default NULL, #Nome do novo destinatário do correio


transport

domain char(128) NOT NULL default '',                #Nome do domínio Ex: xx13.net
transport char(128) NOT NULL default 'maildrop:', #Transporte de entrega da mensagem Ex: maildrop:


virtual_users

  `id` varchar(255) default NULL,                              #Endereço de e-mail Ex: 
 Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo
 
`user` varchar(255) default NULL, # A parte do usuário no endereço, neste caso 'daniel'
`password` varchar(255) NOT NULL default '1234', #Senha
`uid` int(5) NOT NULL default '1002', #Id do usuário virtual
`gid` int(5) NOT NULL default '6', #Grupo do usuário virtual
`home` varchar(255) NOT NULL default '/var/mail/virtual/', #Diretório base de entrega de msg, este valor pode ser igual para todos.
`maildir` varchar(255) NOT NULL default 'domain/user/', #O diretório pessoal de cada usuário. O valor da caixa de correio em disco é "home"/"maildir"
`domain` varchar(255) NOT NULL default 'dominio', #O mesmo domínio do endereço de e-mail, neste caso "xx.net"
`nome` varchar(255) NOT NULL default 'Nome Sobrenome', #Nome do dono da caixa de correio
`login_maps` varchar(255) NOT NULL default '', #Endereço pelo qual o usuário pode enviar mensagens, por padrão o mesmo do "id".
`imapok` tinyint(1) unsigned default '1', #Clausula de conta ativa, se este valor for mudado para 0, esta conta sera desativada
`quota` varchar(255) default '10485760', #Tamanho da cota em bytes, neste caso 10 Megabytes


Para simplificar, veja abaixo o dump do nosso banco de dados padrão, mas preste atenção em nossos valores padrões. principalmente, uid, gid e home

#=======================MAIL.DB=================================

#

CREATE DATABASE mail;
use mail;

#
#Tabela de aliases
#

CREATE TABLE aliases (
alias varchar(255) NOT NULL default '',
rcpt varchar(255) default NULL,
PRIMARY KEY (alias)
) TYPE=MyISAM;


#Tabela transport
#

CREATE TABLE transport (
domain char(128) NOT NULL default '',
transport char(128) NOT NULL default 'maildrop:',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

#
#Tabela virtua_users
#


CREATE TABLE `virtual_users` (
`id` varchar(255) default NULL,
`user` varchar(255) default NULL,
`password` varchar(255) NOT NULL default '1234',
`uid` int(5) NOT NULL default '125',
`gid` int(5) NOT NULL default '125',
`home` varchar(255) NOT NULL default '/var/mail/virtual/',
`maildir` varchar(255) NOT NULL default 'domain/user/',
`domain` varchar(255) NOT NULL default 'dominio',
`nome` varchar(255) NOT NULL default 'Nome Sobrenome',
`login_maps` varchar(255) NOT NULL default '',
`imapok` tinyint(1) unsigned default '1',
`quota` varchar(255) default '10000000',
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


#==========================================================

Para inserir este dump em um banco de dados execute o seguinte comando:

#mysql -u root -pSenha < dump.sql

Adicionando Usuários ao Sistema

Por motivo de segurança, criaremos um novo usuário para os serviços acessarem o banco de dados, este usuário terá apenas os privilégios necessários para ele. Para isto acesse como usuário root o banco de dados e execute os seguintes comandos.

mysql> USE mysql
Database changed.

mysql> INSERT INTO user (host, user, password) VALUES('localhost','postfix','');
Query OK, 1 row affected (0.00 sec)

mysql> UPDATE user set password=PASSWORD('senha') WHERE user='postfix';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT select, insert, update ON mail.* TO postfix;
Query OK, 0 rows affected (0.00 sec)

O banco de dados está pronto.

Adicionando dados ao Banco da Dados

Agora que temos um banco de dados, vamos adicionar dados a ele. Dados da tabela transport A tabela transport como mencionado anteriormente, serve para o Postfix saber se o correio é local ou virtual. O correio local vai adicionado uma única vez, para adicioná-lo, acesse banco de dados como usuário postfix, e execute os seguintes comandos:

mysql> USE mail
Database changed

mysql> INSERT INTO transport(domain,transport) VALUES("DOMINIO_LOCAL","local:");
Query OK, 1 row affected (2.61 sec)

Para domínios virtuais, o comando é o mesmo, apenas alterando o campo transport de local: para virtual: ou maildrop:. Em nosso caso utilizaremos o maildrop para entrega de mensagens, então, utilize o maildrop como no exemplo abaixo:

mysql> USE mail
Database changed

mysql> INSERT INTO transport(domain,transport) VALUES("DOMINIO_VIRTUAL","maildrop:");
Query OK, 1 row affected (2.61 sec)

Dados da tabela alias A tabela alias irá conter apelidos para contas de E-mail, mensagens endereçadas para contas que tenham alias, serão desviadas para os endereços correspondentes, e cada endereço pode ter um ou mais apelidos, assim pode-se formar até pequenas listas de e-mail.

Para adicionar aliases, acesse banco de dados como usuário postfix, e execute os seguintes comandos:

mysql> USE mail
Database changed

mysql> INSERT INTO aliases(alias,rcpt) VALUES(" Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo "," Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo ");
Query OK, 1 row affected (0.00 sec)

Dados da tabela virtual_users Esta tabela possui mais dados que as demais, ela irá conter informações que variam muito de sistema para sistema, e alguns valores são padrões, por exemplo, o usuário que daemon de entrega irá executar tem o uid igual a 1002 e gid 6 , estes valores ja são adicionados por padrão, os valores que são variáveis irão ser adicionados no exemplo a seguir,para isso acesse banco de dados como usuário postfix, e execute os seguintes comandos:

mysql> USE mail
Database changed

mysql> INSERT INTO virtual_users(id, password, maildir, domain, nome) VALUES(' Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo ', '1234', "exemplo.net/daniel", "exemplo.net", "Daniel Bristot");
Query OK, 1 row affected (0.01 sec)
Atenção: O valor id é um valor único! e não será aceito outro valor igual.

Informações Gerais

O MySQL utiliza a porta 3306 para conexões, se você utilizar o banco de dados somente para conexões locais, uma dica é restringir o acesso a porta 3306 com o auxílio de um firewall. O MySQL é um consumidor de memória e processamento.

Cyrus-Sasl

O Cyrus-Sasl será responsável pela autenticação smtp.

Instalando o Cyrus-Sasl

Normalmente o postfix iria compilar o cysrus Sasl, porém teremos que habilitar a compatibilidade com o MySQL, então vamos instalar o Cyrus-Sasl a partir do ports, o caminho para o ports é: /usr/ports/security/cyrus-sasl2. Entre no diretório do ports e execute o comando:

# make -DWITH_MYSQL install

Após isto a compilação deve correr até o final sem mais perguntas.

Configurando o Cyrus-Sasl

A configurção do Cyrus-Sasl é simples, exige apenas a criação de um arquivo, ele deve ser criado em /usr/local/lib/sasl2/smtpd.conf, veja como ele deve ficar.

pwcheck_method: auxprop
mech_list: LOGIN CRAM-MD5 DIGEST-MD5
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_database: mail
sql_user: postfix
sql_passwd: e-mail
sql_select: SELECT password FROM virtual_users WHERE user='%u' and domain='%r' AND imapok='1'
sql_usessl: no

A única questão que pode gerar dúvida são os valores '%u' e '%r' na pesquisa, eles serão substituídos pelos valores do nome do usuário e do domínio respectivamente.

A configuração do Cyrus-Sasl está pronta.

Postfix

O postfix será nosso servidor de e-mail, ele escutará o protocolo SMTP pela porta 25/tcp e será responsável pelo transporte das mensagens. O Postfix é o carro-chefe de nosso Sistema, então fica difícil apresentar sua instalação em uma única parte do artigo, então primeiramente irei construí-lo a partir do ports, e na parte final iremos configurá-lo, pois sua configuração depende de vários outros serviços.

Instalando o Postfix

O Postfix irá precisar de alguma dependências, porém tudo isto é feito automaticamente a partir do ports. Uma única observação, se a autenticação for feita através das senhas de usuários do UNIX, é necessário instalar cyrus-sasl2-saslauthd. Neste caso não estaremos utilizando, então isto não se faz necessário.

O ports do postfix fica em /usr/ports/mail/postfix. Para construir o Postfix apenas digite make no diretório do ports, neste momento aparecerá uma tela com as opções de configuração. Eu escolhi as opções:

NOPCRE Pois eu não irei utilizar expressões regulares do perl.
Sasl2 Para autenticação SMTP
DB43 Para criar tabelas de aliases e outras configurações com base de dados DB.
MySQL Para habilitar o suporte ao MySQL.

A partir daí o postfix começa a ser construído, e dependendo da máquina isto pode demorar algum tempo. Nos instantes finas da instalação, você será perguntado se deseja ativar o postfix no mailer.conf, diga que sim, e ele será automaticamente inicializado pelo sistema.

Configurando o Sistema Operacional

O postfix não irá precisar de uma entrada no arquivo de inicialização /etc/rc.conf pois eu habilitei-o no mailer.conf, porém se você não o habilitou você precisa inserir as seguintes linhas no /etc/rc.conf

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
postfix_enable="YES"

Estas linhas servirão para desativar o Sendmail e ativar o Postfix.

O Postfix utilizará a porta 25 tanto para chegada quanto para saída de mensagem, caso você esteja utilizando um firewall, não esqueça de deixar o trafego in e out passar por esta porta. O postfix também depende do serviço de nomes, verifique se o tempo de consulta a base de dados de nomes não é muito lento, isto pode trancar seu sistema, não esqueça de liberar o tráfego 53 udp e tcp. Cuidado com o horário e o fuso-horário do sistema também é fundamental.

Courier-Imap

O Courier-Imap nos dará suporte aos protocolos de entrega de mensagem, o imap e pop3, apesar do nome, ele traz estes dois protocolos. O courier-imap é dividido em duas partes, os protocolos de transporte e de autenticação. O os protocolos de transporte serão feitos pelos daemons imapd e pop3d, e o protocolo de autenticação será feito pelo authdaemond.

Instalado o Courier-Imap

A instalação do courier-imap será feita via ports, o caminho do ports é: /usr/ports/mail/courier-imap, entre neste diretório e execute o comando make install. Após isto irá aparecer uma tela oferecendo opções de compilação, neste caso adicione somente a opção AUTH_MYSQL, que nos dará suporte ao MySQL. Após isto a instalação deverá terminar sem demais perguntas.

Configuração do Courier-Imap

Vamos dividir a configuração do courier-imap em duas partes, primeiro iremos abordar o daemon de autenticação, e logo após os daemons de entrega.

Configurando o authdaemond

O authdaemond irá por buscar informações do banco de dados sobre os usuários. Os arquivos de configuração do authdaemond estão em /usr/local/etc/authlib, e são eles, authdaemonrc responsável por características gerais do sistema e authmysqlrc responsável pela ligação entre o courier-imap e o banco de dados. Abaixo veremos os arquivos de configuração de exemplo.

authdaemonrc
authmodulelist="authmysql" 		# Lista de módulos habilitados.
authmodulelistorig="authmysql" # Lista de módulos utilizados pelo Courier webadmin.
daemons=5 # Número de daemons de autenticação.
authdaemonvar=/var/run/authdaemond # Diretório utilizado por alguns scripts.. NÃO MEXA.
subsystem=mail # Para qual facilidade do syslog enviar as mesagens.
DEBUG_LOGIN=0 # Nível de debug que as mensagens são enviadas para a syslog.
DEFAULTOPTIONS="wbnodsn=1" # Opções de linha de comando.
LOGGEROPTS="" # Opções de log.
authmysqlrc
MYSQL_SERVER localhost			# Servidor do banco de dados
MYSQL_USERNAME portfix # Usuário do banco de dados
MYSQL_PASSWORD e-mail # Senha do banco de dados
MYSQL_SOCKET /tmp/mysql.sock # Socket do banco de dados
MYSQL_PORT 3306 # Porta do banco de dados
MYSQL_OPT 0 # Opções do mysql
MYSQL_DATABASE mail # Nome do banco de dados
MYSQL_USER_TABLE virtual_users # Nome da tabela com informações do usuário
MYSQL_CLEAR_PWFIELD password # Coluna com as senhas
MYSQL_UID_FIELD uid # Coluna com o userid
MYSQL_GID_FIELD gid # Coluna com o groupid
MYSQL_LOGIN_FIELD id # Coluna com o Login
MYSQL_HOME_FIELD home # Coluna com o Home
MYSQL_NAME_FIELD nome # Coluna com o nome do usuário
MYSQL_MAILDIR_FIELD maildir # Coluna com o maildir do usuário
MYSQL_QUOTA_FIELD quota # coluna com a cota do usuário
MYSQL_WHERE_CLAUSE imapok=1 # Coluna com a flag de ativação da conta

A configuração do authdaemond está pronta, agora veremos as configurações dos damons de transporte.

Configurando os daemons de transporte

Os arquivos de configuração do courier-imap estão em /usr/local/etc/courier-imap, e tem os nomes correspondentes ao seu daemon de transporte. Você pode optar por utilizar somente um dos dois protocolos, porém o imap tem algumas vantagens sobre o pop3, cabe a você escolher qual prefere, neste exemplo utilizaremos os dois. Abaixo veremos os arquivos de configuração de exemplo.

imapd
ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=4
PIDFILE=/var/run/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_KEYWORDS=1
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/usr/local/etc/courier-imap/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=NO
MAILDIRPATH=Maildir
pop3d
PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"
AUTHMODULES="authdaemon"
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
DEBUG_LOGIN=2
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=NO
MAILDIRPATH=Maildir

As configurações padrões são bastante completas, os itens que vale a pena dar uma revisada são:

MAXDAEMONS=40 		# Número máximo de processos
MAXPERIP=4 # Conexões máximas simultâneas por IP

Configuração do SO

Agora que tudo está configurado, basta ativar o courier-imap na inicialização do sistema. para isto basta adicionar as seguintes linhas em /etc/rc.conf.

courier_authdaemond_enable="YES"	# Obrigatória
courier_imap_pop3d_enable="YES" # Para ativar o pop3
courier_imap_imapd_enable="YES" # Para ativar o imapd

O protocolo imap utiliza a porta 143 TCP, e o protocolo pop3 utiliza a porta 110 TCP, se você está utilizando um firewall, libere estas portas. Os logs serão enviados para a facilidade mail do syslog, por padrão o arquivo de log será /var/log/maillog.

Courier-Maildrop

O Maidrop será nosso agente de entrega de mensagem, ele irá entregar as mensagens em suas devidas caixas de correio. Bom, mas porque não utilizar o daemon virtual que vem juntamente com o Postfix? Primeiramente, o virtual não tem controle de quota nativo, para isso iria ser preciso aplicar um patch, Segundo, o maildrop pode fazer várias verificações de mensagem, e ele cria automaticamente as caixas de correio, já com o virtual você teria de criá-las manualmente, e o maildrop oferece opções de filtros, como por exemplo desviar as mensagens de spam para uma pasta chamada Spam, retirando assim os spams da caixa de entrada.

Instalando o Maiodrop

O maildrop será instalado a partir do ports no seguinte caminho, /usr/ports/mail/maildrop. Como as informações de usuário estão armazenadas no banco de dados, precisamos adicionar o suporte para a Authlib, para isto execute o seguinte comando para construir o ports.

# make -DWITH_AUTHLIB install

A partir deste memento a instalação deve concluir sem mais perguntas.

Após a instalação, devemos criar um usuário para executar o maildrop. neste caso criei o usuário vmail, e o com o grupo padrão mail. O UID e o GID do usuário devem ser os mesmo do uid e gid do banco de dados. Isto determinará o dono dos diretórios e arquivos das caixas de correio, então no memento da criação de uma nova conta, não esqueca de inserir os valores uid e gid iguais as do usuário vmail e do grupo mail. O maildrop será executado com o usuário vmail, porém ele não possuirá permição para comunicar-se com a base de dados, por isto o executavel do maildrop deve ter o SetUID habilitado, para isto execute o seguinte comando:

# chmod u+s /usr/local/bin/maildrop

A configuração básica do maildrop está pronta.

Configurando o Maildrop

O maildrop tem apenas um arquivo de configuração, que está em: /usr/local/etc/maildroprc, na verdade este arquivo nem precisa existir. A configuração do banco de dados não é necessária, pois ele irá utilizar a Authlib para isto, e isto nós já configuramos anteriormente para o courier-imap.

O arquivo de configuração do maildrop irá conter uma rotina de tarefas que ele deve fazer ao entregar uma mensagem, veja o exemplo que utilizamos abaixo.

logfile "/var/log/maildrop.log" 		#Arquivo de Log

`test -d $HOME/$DEFAULT` # Testa se a caixa de correio existe
if ($RETURNCODE!=0) # Caso não exista...
{
`maildirmake $DEFAULT` # Cria a caixa de correio,
`maildirmake -f .Spam $HOME/$DEFAULT` # e as pastas para o Spam
`maildirmake -f .Trash $HOME/$DEFAULT` # e a lixeira
}

QUOTA="$MAILDIRQUOTA"'S'
`maildirmake -q $QUOTA $HOME/$DEFAULT` # Ajusta a cota da caixa de correio

if (/^X-Spam-Status: Yes/) # E se a mensagem for um Spam, ela a envia
{ # para a pasta Spam.
to "$DEFAULT/.Spam/"
}

Ligando ao Postfix

Para ligá-lo ao Postfix, apenas verifique a linha sobre o transporte maildrop no arquivo /usr/local/etc/postfix/master.cf ela deve estar como no exemplo abaixo.

maildrop  unix  -       n       n       -       -       pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} -w 90

Com a opção -w 90 o maildrop irá enviar a mensagem contida no arquivo /usr/local/etc/quotawarnmsg avisando que a cota de uso de sua conta chegou aos 90%, o valor pode ser alterado a seu critério, e por padrão a mensagem não existe, então você deve cria-la.

Clamav Filter

O clamav filter é um script que será responsável pela filtragem de virus e spam de uma mensagem, ele interliga os daemons clamd que fará a checagem do antivírus e o spamd que fará a verificação de spam. O clamav-filter é apenas um arquivo que está disponível para download neste link. Porque utilizar este filtro, se existe o amavisd? Bom, o amavisd é um daemon que consome muitos recursos, este filtro faz apenas o que é necessária. Por agora iremos tratar mais a parte de instalação dos dois daemons, o clamav-filter será utilizado para ligar o postfix aos dois daemons, veremos isto no memento da configuração do Postfix.

Clam-AV

o Clam-AV é um poderoso antivírus open source, ele irá filtrar todas as mensagens que passarem pelo servidor. ele é dividido em dois daemons, o clamd e o freshclamd um para varredura de vírus e um para atualização da base de dados de vírus respectivamente.

Instalando o Clam-AV

A instalação do Clam-AV é feita apartir do ports, seu caminho é: /usr/ports/security/clamav. A instalação é simples, vá para o diretório do ports e execute:

# make install

Logo após irá aparecer uma tela com as opções de compilação, eu ativei apenas a opção LIBUNRAR, ela da suporte para arquivos compactados com extensão .rar. Após isto a configuração deve prosseguir sem mais perguntas até o final.

Configurando o Clam-AV

Os arquivos de configuração estão em /usr/local/etc/ e são /usr/local/etc/clamd.conf e /usr/local/etc/freshclam.conf. O clamd.conf é responsável pela configuração do daemon de verificação de vírus. Veja abaixo o exemplo de arquivo de configuração.

clamd.conf

#configurações de log
LogFile /var/log/clamav/clamd.log # Arquivo de Log
LogFileMaxSize 2M # Tamanho máximo do arquivo de log
LogTime # Horário nos arquivos de log
LogSyslog # Usa Syslog
LogVerbose # Log mais aprofundado
PidFile /var/run/clamav/clamd.pid # Arquivo com o Pid
DatabaseDirectory /var/db/clamav # Base de dados de virus
LocalSocket /var/run/clamav/clamd # Local do socket
FixStaleSocket # Atualização do socket ao inicia o daemon
MaxConnectionQueueLength 30 # Número máximo de conexões na fila de espera
MaxDirectoryRecursion 20 # Max Nún da profundidade de diretórios
FollowDirectorySymlinks # Segue links para diretórios
User clamav # Nome do usuário que o anti vírus está executando
AllowSupplementaryGroups # Acesso suplementar a outros grupos
ScanMail # Habilita varredura de arquivos de e-mail
ArchiveMaxFileSize 10M # Tamanho máximo do arquivo a ser varrido
ArchiveMaxRecursion 9 # Nível de recursão de um arquivo
ArchiveMaxFiles 1500 # Núm Máx de arquivos a ser varrido em um arquivo compactado

Agora iremos ver a configuração utilizada no freshclam.

DatabaseDirectory /var/db/clamav		# Base de dados de informações de vírus
UpdateLogFile /var/log/clamav/freshclam.log # Arquivo de Log de atualizações
PidFile /var/run/clamav/freshclam.pid # Arquivo com o Pid
DatabaseOwner clamav # Usuário dono da base de dados
AllowSupplementaryGroups # Acesso suplementar a outros grupos
DatabaseMirror database.clamav.net # Servidor de atualização
NotifyClamd # Notifica o Clamd sobre atualizações

Esse esquema de configuração exige que seja criados dois diretórios: /var/run/clamav e /var/log/clamav. após criar este diretório, mude o dono dos diretórios para usuário clamav.

# chown clamav:clamav /var/run/clamav /var/log/clamav

Configuração do Sistema Operacional

Agora devemos habilitar o ClamAV na inicialização do sistema. Para isso devemos adicionar as seguintes linhas em /etc/rc.conf:

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"

Caso você esteja utilizando um firewall, abra o trafego para o servidor da base de dados de atualização.

O Anti-Vírus está pronto.

SpamAssassin

O SpamAssassim será responsável pelo controle anti-spam, pesquisas mostram que sua eficácia é de 95 por cento, porém, seu custo é um pouco alto, ele checa todo o corpo de uma mensagem, isto cria um esforço computacional grande, e ele também consome uma boa fatia da memória. Nós utilizaremos o SpamAssassin na forma de um daemon, o spamd, isto reduz o esforço que o computador faria para iniciar a execução a cada checagem de e-mail, assim, o spamassassim quando requisitado não precisa iniciar todo o processo, apenas verificar a mensagem. Para isto é nescessário um programa cliente, o spamc, que envia a mensagem para o spamd chegar.

Instalando o Spamassassim

O SpamAssassin será instalado via ports, o caminho para o seu ports é: /usr/ports/mail/p5-Mail-SpamAssassin/. Para instalar entre no diretório do ports e execute.

# make install

Após isto irá aparecer uma tela de configuração de opções, eu não habilitei nenhuma, agora é só esperar o sistema terminar de compilar o SpamAssassin.

Configurando o SpamAssassim

A configuração do SpamAssassim é simples, o arquivo de configuração está em /usr/local/etc/mail/spamassassim. O arquivo init.pre contém informações sobre módulos de checagem de e-mail, habilite ou desabilite-os como quiser. O arquivo de configuração que mais nos interessa neste memento é o local.cf. Ele é um arquivo simples, em nosso coso ele precisa ter apenas as seguintes linhas:

# Deixa a mensagem intacta, porém adiciona os headers de spam.
report_safe 0
# Este é a pontuação pela qual uma mensagem é considerada spam
required_score 5.0

Configuração do Sistema Operacional

É preciso escrever um script de inicialização do spamd, ele deve estar em /usr/local/etc/rc.d/spamd.sh e ter permissão de execução. O arquivo de inicialização deve ser como no exemplo abaixo, apenas ajuste as opções de processos filhos do spamd conforme for o trafego de seu servidor.

/usr/local/etc/rc.d/spamd.sh

#!/bin/sh

case "$1" in
start)
/usr/local/bin/spamd --socketpath=/var/run/spamd/spamd.sock --pidfile=/var/run/spamd/spamd.pid --min-children=1 --min-spare=1 --max-spare=2 -d
echo "Starting Spamd."
 ;;
stop)
kill -9 `cat /var/run/spamd/spamd.pid`
echo "Stoping Spamd."
 ;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
 ;;
esac
exit 0

O SpamAssassin está pronto, agora vamos ligar os dois filtros como o Clamav-Filter.

Configurando do Clamav-Filter

Faça o download do clamav-filter apartir deste link. Após o download copie-o para o diretório /usr/local/libexec/postfix/, e altere suas permições como no exemplo abaixo:

chown clamav:clamav /usr/local/libexec/postfix/clamav-filter.sh

O clamav-fiter irá precisar de dois diretórios, com permissão de escrita para o dono do clamav-filter, neste caso o usuário clamav. para isto execute o seguinte comando.

# mkdir /var/run/clamav /var/log/clamav
# chown clamav:clamav /var/run/clamav /var/log/clamav

Ligando o clamav-filter ao Postfix

Para ligá-lo ao Postfix precisamos criar um transporte e um filtro para as conexões tcp, para isto comente a seguinte linha no arquivo /usr/local/etc/postfix/master.cf

smtp      inet  n       -       n       -       -       smtpd
E adiciones estas linhas ao mesmo aquivo.
smtp      inet  n       -       n       -       -       smtpd
-o content_filter=clamav:clamav
clamav unix - n n - - pipe
flags=Rq user=clamav argv=/usr/local/libexec/postfix/clamav-filter.sh -f ${sender} -- ${recipient}

O clamav-Filter está pronto!

Configurando o Postifix

Esta é a parte final deste How-To, é a configuração final do postfix, será basicamente, ligando o Postfix ao Cyrus-Sasl e a base de dados, basicamente, abaixo serão mostrados os arquivos do diretório /usr/local/etc/postfix, todos eles devem estar presente, as únicas alterações a serem feitas é o nome do usuário e senha da base de dados nos arquivos de ligação com o MySQL.


Arquivo de configuração do Postfix. /usr/local/etc/postfix/main.cf

mydestination = localhost.$mydomain, localhost, $transport_maps
local_recipient_maps = unix:passwd.byname, $alias_maps, $virtual_recipient_maps
unknown_local_recipient_reject_code = 550
mynetworks_style = class
alias_maps = hash:/usr/local/etc/postfix/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no

#Configuração do MySQL e de dominios virtuais
transport_maps = mysql:/usr/local/etc/postfix/transport.cf
virtual_gid_maps = mysql:/usr/local/etc/postfix/gids.cf
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual.cf
virtual_maps = mysql:/usr/local/etc/postfix/mysql.aliases.cf
virtual_uid_maps = mysql:/usr/local/etc/postfix/uids.cf
virtual_recipient_maps = mysql:/usr/local/etc/postfix/recipients.cf
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mailboxsize-mysql.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 100000000

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_helo_required = yes
smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps
smtpd_sender_login_maps = mysql:/usr/local/etc/postfix/login_maps.cf
smtpd_recipient_restrictions =
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_invalid_hostname
reject_unknown_sender_domain
reject_unknown_recipient_domain
reject_multi_recipient_bounce
reject_sender_login_mismatch
permit_sasl_authenticated
reject_unauth_destination
permit

Arquivos de ligação do postfix com o MySQL:

/usr/local/etc/postfix/transport.cf

user = postfix
password = e-mail
dbname = mail
table = transport
select_field = transport
where_field = domain
hosts = localhost

/usr/local/etc/postfix/gids.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = gid
where_field = id
hosts = localhost

/usr/local/etc/postfix/uids.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = uid
where_field = id
hosts = localhost

/usr/local/etc/postfix/mysql_virtual.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = maildir
where_field = id
hosts = localhost

/usr/local/etc/postfix/mysql.aliases.cf

user = postfix
password= e-mail
dbname = mail
table = aliases
select_field = rcpt
where_field = alias
hosts = localhost

/usr/local/etc/postfix/recipients.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = nome
where_field = id
hosts = localhost

/usr/local/etc/postfix/mailboxsize-mysql.cf

password = e-mail
dbname = mail
table = virtual_users
select_field = quota
where_field = id
hosts = localhost

/usr/local/etc/postfix/login_maps.cf

password = e-mail
dbname = mail
table = virtual_users
select_field = login_maps
where_field = id
hosts = localhost

pronto, tudo deve estar funcionando.

Agora vamos instalar o WebMail

Uebimiau o WebMail

Para finalizar a nossa configuração, iremos instalar o Uebimial que é um Webmail baseado em PHP, por isso ele precisa de um servidor Web com suporte ao PHP. O UebiMial tem suporte aos protocolos POP3 e IMAP, a língua Portuguesa, e possui uma interface limpa e fácil.

O Uebimial está disponível via ports, porém atualamente ele está quebrado, então teremos que fazer o download do site [1]. Agora que fizemos o Download vamos configurar o WebMail. Vamos descompactar o Uebimial no diretório /var/www/, para isto, copie o download do Uebimial para /var/www/ e extraia do .zip, neste exemplo estamos utilizando a versão 2.7.10.

# cp uebimiau-2.7.10-any.zip /var/www
# cd /var/www/
# unzip uebimiau-2.7.10-any.zip

Agora vai ser criado o diretório webmail, onde está o nosso webmail. O arquivo de configuração fica, relativamente dentro do diretório do webmail, em inc/config.php. Antes de configura-lo vamos criar o diretório /var/webmail e dar a parmição 755 e dono e grupo www, este será um diretório que o uebimial precisará para guardar arquivos temporários.

# mkdir /tmp/webmail
# chmod 755 /tmp/webmail
# chown www:www /tmp/webmail

Agora vamos editar o arquivo de configuração. basicamente o que devemos fazer é, setar a opção que dis que o Webmail servirá para multiplos dimínios, e configurar as conexões.]

Configurando o WebMail

Abra no editor de sua preferência o arquivo /var/www/webmail/inc/config.php, e altere as seguintes variáveis:

Mude o caminho da pasta temporária para a o diretório que criamos em /tmp/

$temporary_directory = "/tmp/webmail";

$mail_server_type de ONE-FOR-EACH para ONE-FOR-ALL, isto diz para o Uebimial que o servidor serve para multiplos dompinios, e irá pedir o nome de usuário na forma do endereço de e-mail completo. Ex:

$mail_server_type       = "ONE-FOR-ALL";

Agora modifique as variáveis abaixo, os valores que elas estão mostrando, provavelmente funcionarão, e os nomes são bem sugestivos.

$default_mail_server    = "127.0.0.1";
$one_for_all_login_type = "%user%@%domain%";
$default_protocol = "pop3";
$default_port = "110";
$default_folder_prefix = "";

O UebiMial está configurado, agora apenas adicione um alias, para as requisições que chegam para o seu "servidor"/webmail/ para /var/www/webmail, e está pronto.

NOTA: Eu tive um problema com o PHP, algo com, a função header não aceita quebra de linha, então editei o arquivo que continha o erro, na linha do erro é só retirar os \n e tudo funciona.

O UebiMial também é altamente costomizável, a interface é escrita em HTML e está dendro do diretório, relativo ao webmail, themes/uebimial.

Caso aconteça algo errado, a saída é utilzar o nosso bom e velho amigo log. Uma dica simples, cole o log no google! isso ajuda bastante. Qualquer outra duvida ou sugestão, mande um e-mail para daniel At dbristot dot info 

Final

Este How-to foi produzido por Daniel Bristot de Oliveira, sobre a licença BSD, tomei como referência os seguintes arquivos: Servidor de email com SMTP, POP, IMAP, quota e MySQL de Marco A. S. Máximo Link
INTEGRANDO O POSTFIX COM O CLAMAV de Gleydson Soares (gsoares) - Deives Michellis "thefallen" Link
Todos os direitos do CLAMAV-FILTER pertencem aos seus idealisadores.  

Comentrios
Parabns !!!
Por Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo em 20/08/2006 22:19:34
Daniel, 
 
muito difcil me ver comentando em fruns. Sobre a instalao para o funcionando do sistema que voc acabou de nos passar muito importante para ns, mesmo aqueles que no conseguem fazer isso que voc acabou de fazer. Contribuirei com mais coisas, estas simples como: webmail gerenciamento via Web e outros. Nunca pare de disponibilizar informaes isso muito profissionalmente. Estarei disposio. 
 
Um Abrao. 
 
Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo  
MSN: Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo
Parabns
Por Marcos Gomez em 28/08/2006 13:15:23
Daniel, 
 
Parabns pelo tutorial, completssimo e muito bem escrito! 
 
Abraos,
Sucesso na Instalao
Por Henrique em 04/11/2006 23:50:18
Senhores, 
 
muito importante para ns saber se todos tiveram sucesso ao seguir este HowTo. Poste aqui seu sucesso. 
 
Um abrao, 
 
Henrique 
MSN: Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo
Parabn pelo tutorial
Por slpond em 24/01/2007 17:19:57
Ol, Parabns pela iniciativa deste tutorial, e complicado achar documentao completa sobe este assunto, mas sou novo neste mundo do postfix, segui seu tutorial a risca, porem, ao tentar autenticar estou tendo problemas, nos logs aparece, 
\"Jan 24 16:29:28 zeus pop3d: scancur opendir(\"cur\"): No such file or directory\" , o que pode ser ?
Parabn pelo tutorial
Por alessandro em 03/06/2007 23:25:26
Parabens e respondendo ao amigo acima... 
 
criaste o maildir?
Duvida cruel
Por Marcos Paulo em 25/09/2007 11:54:05
Ola, nao tenho muita experiencia nessa parte ainda e me surgiu uma duvida no mail drop: 
Aps a instalao, devemos criar um usurio para executar o maildrop. neste caso criei o usurio vmail, e o com o grupo padro mail. O UID e o GID do usurio devem ser os mesmo do uid e gid do banco de dados. Isto determinar o dono dos diretrios e arquivos das caixas de correio, ento no memento da criao de uma nova conta, no esqueca de inserir os valores uid e gid iguais as do usurio vmail e do grupo mail. O maildrop ser executado com o usurio vmail, porm ele no possuir permio para comunicar-se com a base de dados...... 
 
Bem, o uid e gid do usuario vmail, seria o mesmo do mysql (88), ou do postfix (125), que foi adicionado no banco de dados, porem, eu nao consigo criar um usuario com o mesmo uid de usuarios padra do sistema. Por acaso nao seria criar o usuario vmail com id default e participando do grupo mail (6), e mysql (88)? 
Por Favor me ajudem.....
Duvida cruel
Por Marcos Paulo em 25/09/2007 11:58:24
Ola, nao tenho muita experiencia nessa parte ainda e me surgiu uma duvida no mail drop: 
Aps a instalao, devemos criar um usurio para executar o maildrop. neste caso criei o usurio vmail, e o com o grupo padro mail. O UID e o GID do usurio devem ser os mesmo do uid e gid do banco de dados. Isto determinar o dono dos diretrios e arquivos das caixas de correio, ento no memento da criao de uma nova conta, no esqueca de inserir os valores uid e gid iguais as do usurio vmail e do grupo mail. O maildrop ser executado com o usurio vmail, porm ele no possuir permio para comunicar-se com a base de dados...... 
 
Bem, o uid e gid do usuario vmail, seria o mesmo do mysql (88), ou do postfix (125), que foi adicionado no banco de dados, porem, eu nao consigo criar um usuario com o mesmo uid de usuarios padra do sistema. Por acaso nao seria criar o usuario vmail com id default e participando do grupo mail (6), e mysql (88)? 
Por Favor me ajudem.....
Duvida cruel
Por Marcos Paulo em 25/09/2007 11:59:32
Ola, nao tenho muita experiencia nessa parte ainda e me surgiu uma duvida no mail drop: 
Aps a instalao, devemos criar um usurio para executar o maildrop. neste caso criei o usurio vmail, e o com o grupo padro mail. O UID e o GID do usurio devem ser os mesmo do uid e gid do banco de dados. Isto determinar o dono dos diretrios e arquivos das caixas de correio, ento no memento da criao de uma nova conta, no esqueca de inserir os valores uid e gid iguais as do usurio vmail e do grupo mail. O maildrop ser executado com o usurio vmail, porm ele no possuir permio para comunicar-se com a base de dados...... 
 
Bem, o uid e gid do usuario vmail, seria o mesmo do mysql (88), ou do postfix (125), que foi adicionado no banco de dados, porem, eu nao consigo criar um usuario com o mesmo uid de usuarios padra do sistema. Por acaso nao seria criar o usuario vmail com id default e participando do grupo mail (6), e mysql (88)? 
Por Favor me ajudem.....
ERRO!!!
Por remontti em 01/10/2007 19:11:31
postfix[719]: fatal: chdir(/usr/libexec/postfix): No such file or directory 
 
Algum pode me ajudar? 
 
msn: Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo
Mesma dvida
Por Alvaro em 14/05/2008 13:39:21
Oi, estou com a mesma dvida do Marcos Paulo, quanto a criao do usurio do vmail 
 
Algum que j seguiu esse tutorial, ou com mais experincia, poderia ns ajudar? 
 
obrigado
Dvida
Por thi_vini em 21/05/2008 13:32:44
Algum sabe como fazer para colocar o assunto do e-mail para ser visualizado no log do postfix?



ltima Atualizao ( 02/08/2006 )
 
< Anterior   Prximo >
FUG-BR - Espalhando BSD
Dicas Rpidas:

Para ter seu sistema otimizado para seu hardware.

Coloque no "/etc/make.conf" a linha "CPUTYPE=native"

Isto vale para gcc 4.2 e maiores

para saber a versão do seu compilador use "gcc -v"

 






Wallpapers
Online:
Ns temos 13 visitantes online


Devil Store - Sua loja BSD
FreeBSD Brasil LTDA

FUG-BR: Desde 1999, espalhando BSD pelo Brasil.