Вы находитесь на странице: 1из 13

FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

How-To Postfix com SMTP AUTH, Anti-spam, Anti-vírus, Quota, Dominios Virtuais,
Pop3 e Imap
Autoria de Daniel Bristot de Oliveira
21/06/2006
Última Atualização 02/08/2006

O 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 installConfigurando 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
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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: daniel@xx.net


`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
#

http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13


FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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.sqlAdicionando 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)

http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13


FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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("daniel@kiron.unesc.net","daniel@dbristot.info");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('daniel@exemplo.net', '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

http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13


FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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=Maildirpop3d 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
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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 IPConfiguraçã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
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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/clamavConfiguração do Sistema Operacional
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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.0Configuraçã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
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

# chown clamav:clamav /var/run/clamav /var/log/clamavLigando 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
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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


http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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
http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13
FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD

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. Retirado de
"http://dbristot.info/wiki/index.php?title=Postfix"

http://www.fug.com.br _PDF_POWERED _PDF_GENERATED 2 August, 2010, 09:13

Вам также может понравиться