09.01  
Inicio arrow Resumo do Site arrow How-To Postfix com SMTP AUTH, Anti-spam, Anti-vírus, Quota, Dominios Virtuais, Pop3 e Imap
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histórico da Lista
PC-BSD: Artigos
PC-BSD: Notícias
Galeria de Imagens
Contador Usuários FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS
-
DOC-BR (FUG BR)
Introdução
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usuário

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma


How-To Postfix com SMTP AUTH, Anti-spam, Anti-vírus, 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-vírus, 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 endereço 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 endereço de e-mail está sendo protegido de spam, você precisa de Javascript habilitado para vê-lo "," Este endereço 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 endereço 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.  

Comentários


Comente!*
Nome:
E-mail
Homepage
Título:
Comentário:

Código:* Code



Última Atualização ( 02/08/2006 )
 
< Anterior   Próximo >
FUG-BR - Espalhando BSD
Dicas Rápidas:
O portsclean(1) é uma ferramenta que limpa todo o diretório work/ do ports(7). Além de liberar espaço em disco ele é capaz de remover arquivos antigos que não possuem referência no /usr/ports/distfiles.

#portsclean -C
Limpa o diretorio work/

#portsclean -D

Limpa o diretorio distfiles/

#portsclean -i
Modo interativo, pergunta se você quer remover o arquivo

Recomendado
#portsclean -CDi
 






Wallpapers
Online:
Nós temos 23 visitantes e 1 membro online
  • rafael valim


Devil Store - Sua loja BSD
FreeBSD Brasil LTDA

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