|
Este é um "Tutorial" criado por Jefferson
baseado no tutorial original:
| Este tutorial
aborda a criação de um servidor de e-mail baseado em
banco de dados MySQL, com suporte a QUOTA de
usuários, antispam, antivírus, webmail e tudo mais o
que se pode imaginar. |
Tutorial criado em: 09/12/2006
Última Atualização: 18/12/2006
Plataforma: FreeBSD 6.0
Versão do Tutorial: TUTORIAL-POSTFIX-1.1.3-Beta
Licensa: LDP ( Linux Documentation Project )
|
|

|
Versões para OpenBSD em breve! |
|
Copyright (c) 2004 Jefferson <jeffi@linuxajuda.org>.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
Version 1.2 or any later version published by the Free Software
Foundation; with no Invariant Sections, no Front-Cover Texts,
and no Back-Cover Texts. A copy of the license can be found
here.
| |
 |
|
O seu propósito, é mostrar como configurar
um servidor de e-mail
Postfix para trabalhar com vários domínios em uma mesma
máquina, utilizando para isso, o MySQL.
Esse
tutorial é voltado para administradores de sistema ou
usuários interessados em montar um ambiente de email de alta
performance. Os requisitos necessários, são o conhecimento
em FreeBSD, um pouco de
Postfix e experiência na compilação de pacotes.
Não
me responsabilizo por qualquer problema ou perda de
informações que esse tutorial possa vir a causar. Fiz um
grande esforço para tentar deixar esse tutorial o mais
didático e intuitivo possível, chegando até a montar duas
vezes o mesmo ambiente. Tudo isso para que, quem se propor a
utilizá-lo tenha um mínimo de sucesso.
Sendo assim, não darei suporte a usuários
desse material nem responderei a e-mails com pedido de ajuda. |
 |
Ficarei muito feliz em receber e-mails de agradecimentos ou
relatos de sucesso que esse tutorial possa ter proporcionado.
Também, gostaria que vocês mandassem sugestões e críticas (construtivas)
para um maior enriquecimento desse material. |
Descrição da solução e características do site:
- Este site utiliza um menu deslizante ao lado
esquerdo para facilitar a busca e a navegação dos tópicos
relacionados.
- Correção de todos os links do site. No caso de haver algum link fora,
favor me notificar através de e-mail.
- Este ambiente terá agora como plataforma o
sistema operacional FreeBSD 6.0.
- Utilizar o Postfix em conjunto com o MySQL, ou seja, todas as contas e aliases dos
usuários são criadas no banco de dados e não no sistema,
como é por padrão.
- Pode-se utilizar as contas LOCAIS (do sistema) já
criadas, em conjunto com o MySQL, nesse caso, toda conta
criada no MySQL é reconhecida pelo Postfix com uma conta
"VIRTUAL" e as contas locais como "LOCAL".
- Utilização de contas do tipo Maildir (igual ao Qmail).
Isso traz vantagem na segurança e no desempenho.
- Utilização do
Maildrop para controle de QUOTAS.
Aviso ao
usuário, por parte do MAILDROP, caso o seu espaço em disco
ultrapasse os 90% de utilização; - PostfixADMIN, um ambiente completo para gerenciar as contas
virtuais através de uma página WEB;
- VACATION, aplicativo que permite o Postfix enviar um
email de resposta automático, pode ser usado para casos em
que o usuário não se encontre no escritório;
- Clamav + SpamAssassin;
- Mcafee, agora você pode contar com outro podesoro
antivirus neste ambiente. Porém, os dois não devem trabalhar
simultaneamente, vou apenas ensinar como deixar os dois
configurados.
- SMTP-AUTH, utilização do mesmo método AUXPROP de
autenticação de usuários no SASL2 usado no artigo anterior.
- Webmail (squirrelmail) com suporte ao MySQL,
Courier-IMAP e Domínios Virtuais;
- Nesse ambiente foi utilizado o sistema FreeBSD 6.0. E a
vantagem deste tutorial, é que pode ser portado para
qualquer outra versão do FreeBSD anterior.
- Mostrarei como fazer a instalação dos programas
utilizando o sistema via "ports" e em outros casos
utilizando os "SOURCES".
Meu problema começou quando me chamaram para trabalhar com
servidores de e-mail que suportassem vários domínios na mesma
máquina, onde cada domínio representava uma empresa distinta.
Até ai eu sabia que o Postfix tinha esse tipo de suporte e um outro
motivo da escolha foi devido a sua facilidade (péssimas experiências
anteriores com Qmail :-)) e também a sua compatibilidade com o "Sendmail".
Seguindo os manuais, consegui criar um ambiente para 2
domínios e outros tantos que aparecessem.
Outros problemas
começaram, quando por exemplo, um diretor do DOMINIO1 de nome José
da Silva queria que o seu login fosse "jose.silva", até ai tudo bem.
Só que um outro diretor do DOMINIO2, também de nome José da Silva
queria que o seu login também fosse jose.silva.
Ferrou!!!
Pois eu não poderia criar dois logins iguais e nem dava para
explicar que esse login já tinha sido reservado para o diretor de
uma outra empresa. Olha a encrenca!
Pedi ajuda nas listas de
discussões e me sugeriram usar MySQL ou um indicador no login;
criando depois um alias para esse login.
Bem, como eu não
conhecia patavina de MySQL, optei pela segunda dica. Então criei:
"jose.silva-dm2" é uma ALIAS (jose.silva@dominio2.com.br
= jose.silva-dm2)
Perfeito, resolveu o problema, só que tinha de
explicar para todo mundo por que o seu login tinha esse "-dm2" e o
seu e-mail, não. Sem falar nos relatórios de logs que não ficaram
nada bonitos.
O negócio começou a ficar feio quando fechamos
com um cliente que o seu Webmail mostrava o login da pessoa que
estava logado no momento e lá estava o "-dm*".
Os meus
problemas seriam resolvidos se eu pudesse criar o login já com o
domínio, por exemplo:
jose.silva@dominio1.com.br. E não é que dá! :-) O
FreeBSD aceita. Só que quando esse usuário envia uma mensagem pelo
Postifix, o seu email sai como:
"jose.silva@dominio1.com.br@dominio1.com.br"
Bem! Não preciso dizer mais nada.
Alguns dias
antes de pedir as contas da empresa, resolvi como última solução,
pesquisar sobre o Postfix com MySQL. E o que lhes apresento agora, é
o resultado da minha pesquisa. Há! Ainda continuo na empresa :-)
|
INSTALAÇÃO
DO FreeBSD 6.0 ! ! ! |
- Bom, então vamos ao que interessa! Suponho que você
tenha o CD do FreeBSD 6.0, e que você já saiba dar boot pelo
CD =). Vamos particionar seu HD. Aqui no meu laboratório
usei um HD de 40GB.
- Ao contrário do Linux, o sistema de partições do FreeBSD
é chamado de UFS ( Unix FileSystem ), e a maneira de como
ele pode ser particionado é bem interessante. As partições
são criadas dentro de Slices ( fatias ) de no máximo 7 partições dentro de cada Slice. E como vamos utilizar mais
de 8 partições neste ambiente, é necessário que seja criado
então 2 Slices. A partir dai, podemos criar as partições da
forma que desejarmos, mas para mantermos um padrão bem
organizado, eu optei por criar partições em um HD de 40GB da
seguinte forma:
- Primeiro Slice:
| |
|
Filesystem |
Size |
Mounted
on |
System |
| |
| /dev/ad0s1b |
|
|
Swap |
| /dev/ad0s1a |
|
|
UFS |
| /dev/ad0s1g |
|
|
UFS |
| /dev/ad0s1d |
|
|
UFS |
| /dev/ad0s1e |
|
|
UFS |
| /dev/ad0s1f |
|
|
UFS |
| /dev/ad0s1h |
|
|
UFS |
|
| |
|
Filesystem |
Size |
Mounted
on |
System |
| |
| /dev/ad0s2d |
|
|
UFS |
|
- Obs: Como você pode ver, a
unica diferença entre as duas tabelas é a
nomenclatura, onde "ad0s1" refere-se ao primeiro
slice e o "ad0s2" refere-se ao segundo slice.
Uma rápida explicação das partições:
| /dev/ad0s1f |
- |
/var |
- |
Logs |
| /dev/ad0s1h |
- |
/www |
- |
Webmail |
| /dev/ad0s2d |
- |
/mailbox |
- |
Caixas Postais |
Bom, este foi um pequeno exemplo de como você
poderá particionar o seu HD para este ambiente.
Não entrarei
em mais detalhes sobre particionamento.
Dica !!!! |
- Na instalação do FreeBSD, selecione
a opção "Developer" e
selecione "YES" para a
instalação do PORTS quando questionado.
|
Coloque todos os programas dentro do diretório '~/', pois
esse diretório será usado para compilar os fontes. Isso não
influência em NADA a instalação, apenas tenho preguiça de digitar /usr/local/src/
=)
Toda instalação será executada como ROOT.
PS: Onde aparecer os caracteres "xxxxx", troque pela sua senha
correspondente.
Então vamos iniciar nossa configuração criando
primeiramente toda a base para o nosso MTA, começando pelos
'users e groups', que serão necessários para a instalação
dos programas 'Maildrop' e 'Postfix'.
Uma forma interessante de manutenção do sistema FreeBSD, é o seu
utilitário de frontend chamado "sysinstall", com ele você pode
criar grupos e usuário, configurar ips estáticos, ajustar hora do
sistema entre outras coisas. Então vou mostrar aqui como criar um
usuário de ambas as formas, utilizando tanto o sysinstall como
cria-los à moda antiga. Criaremos o seu usuário utilizando o
sysintall e os demais usando a linha de comando.
Execute o comando "sysinstall" sem as aspas, e logo verá uma tela
como esta, e selecione a opção "Configure como mostrado na tela
abaixo."

Depois selecione a opção
"User Management" como mostra a figura abaixo:

Depois selecione a opção
"User" como mostra a figura abaixo:

Preencha os campos como mostra a figura abaixo, é
necessário que você coloque o seu usuário no grupo
wheel, pois sem isso você não poderá usar o comando SU
para se tornar super usuário. É importante também
selecionar a shell de sua preferência, no meu caso,
gosto de usar o /bin/csh, mas você pode usar a shell que
mais te agrada, no FreeBSD, o BASH não vem instalado por
padrão, caso você tenha interesse em usa-la, você terá
que instalar via SOURCE ou via PORTS. Mas não vou entrar
no mérito de instalações de shells neste tutorial. Agora
selecione a opção Ok para criar seu usuário.

Bom, feito isso, seu usuário foi criado, espero que você
tenha gostado do exemplo acima. Agora vamos criar os outros
usuários necessário para o ambiente usando a linha de
comando.
|
/* Crie o grupo e usuário para o
MAILDROP: */
# pw groupadd maildrop
-g 108 # pw adduser maildrop -d /var/spool/mail
-g 108 -u 108 -s /sbin/nologin
/* Crie o grupo e usuário para o
POSTFIX: */
# pw groupadd postdrop #
pw adduser postfix -d /dev/null -s /sbin/nologin | |
Criamos então um user através do sysinstall, dessa forma
ele também cria automaticamente o seu homedir que será usado
para salvar os softwares que serã baixados em seu sistema e
posteriormente compilados e instalados, outro para o
Maildrop e também para o Postfix, .
Lembrando que o nome "jeffi" é apenas para exemplo, esteja a
vontade para criar o user com o nome que você
desejar.
Um fator de máxima importância neste ambiente que devemos
realizar, é a desativação do Sendmail. Pois ele já vem instalado e
ativado por padrão no FreeBSD, mas nós não queremos ele por aqui
certo ? Uma dica legal também, é a ativação do serviço de SSH para
acesso remoto.
Para desativar o Sendmail e ativar o SSH, devemos editar o arquivo
/etc/rc.conf e adicionar as linhas:
sendmail_enable="NONE"
sshd_enable="YES" |
|
Mate o processo do sendmail e inicie o processo do sshd.
Agora se quiser, reinicie o servidor para ver se as
configurações terão efeito quando você tiver uma queda de
energia ou tiver que reiniciar o servidor por algum motivo
bastante crítico.É isso ae !!!!
|
INSTALANDO O
MYSQL E A BASE DO POSTFIX !!! |
Logando no sistema como ROOT, execute os seguintes comandos:
# cd /usr/ports/databases/mysql41-server/
# make install clean
| |
|
Próximo passo será alterar o caminho do
arquivo de log do MySQL, aconselho indicar o dir padrão de
todos os outros logs, no caso o
/var/log/mysql/mysqld.log. Assim fica mais fácil até mesmo no
caso de haver outro administrador na empresa. Para isso
crie o arquivo em /etc/my.cnf com o seguinte conteúdo:
|
[mysql.server]
datadir=/var/db/mysql
socket=/tmp/mysql.sock
[mysqladmin]
socket=/tmp/mysql.sock
[mysqld]
datadir=/var/db/mysql
socket=/tmp/mysql.sock
language=/usr/local/share/mysql/english/
log=/var/log/mysql/mysqld.log
[mysql]
socket=/tmp/mysql.sock
| |
Crie o diretório de log do MySQL e mude a
permissão: |
# mkdir /var/log/mysql # chown
mysql:mysql /var/log/mysql
/*
Inicie o serviço MySQL e teste: */
#
/usr/local/etc/rc.d/mysql-server
/* Saída do Log do MySQL:
*/
# cat /var/log/mysql/mysqld.log
/usr/local/libexec/mysqld, Version: 4.1.13-log.
started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument | |
Para que o serviço volte a operar automaticamente caso o
servidor seja reiniciado, é necessário editar o arquivo
/etc/rc.conf, vou mostrar um exemplo de pós instalação do FreeBSD (
ativação do portas USB, configuração de rede, hostname, ativação
do sshd, e desativação do sendmail ), é um exemplo bem básico.
|
# -- sysinstall generated deltas -- # Fri Dec 8 23:20:54
2006
# Created: Fri Dec 8 23:20:54 2006
# Enable network daemons for user convenience.
# Please make all changes to this file, not to
/etc/defaults/rc.conf.
# This file now contains just the overrides from
/etc/defaults/rc.conf.
usbd_enable="YES"
ifconfig_xl0="inet 192.168.0.3 netmask 255.255.255.0"
keymap="br275.iso.acc"
defaultrouter="192.168.0.1"
hostname="srvmail.postfix"
sshd_enable="YES"
sendmail_enable="NONE"
mysql_enable="YES"
| |
Agora temos que setar uma senha para o usuário ROOT do MYSQL,
para isto, utilize o comando abaixo alterando os caracteres
"xxxxxx" pela sua respectiva
senha.
|
| # mysqladmin -u root password
xxxxxx | |
Beleza! Vamos agora criar as tabelas para o
POSTFIX. Crie um arquivo com o nome "postfix_mysql.db"
( ou qualquer outro nome que você queira usar ) com o seguinte
conteúdo:
ATENÇÃO:
- Substitua, no primeiro bloco, o
valor "xxxxx" pela senha dos usuários
correspondentes.
- Substitua, caso queira, o diretório
onde ficarão as caixas postais dos usuários, no último bloco
no campo home. No meu caso estou usando o diretório
"/mailbox/".
DICA: Uma boa dica aqui, é no caso de
você querer utilizar algum Frontend para MySQL para facilitar
a administração do mesmo em caso de acesso remoto. Para isso
você terá que alterar no campo 'Host' de um dos users que terá
acesso ao banco de dados remotamente. Você pode utitlizar para
isso o usuário "postfixadmin", então troque o valor
'localhost' por '%' no script abaixo. Apenas siga as marcações
em vermelho para encontrar as linhas a serem
alteradas.
# INÍCIO DO
postfix_mysql.db ================= # # Postfix /
MySQL
# Cria o banco
de dados postfix
create database postfix;
use postfix;
# Tabela alias
create table alias (
address varchar(255) not null primary key,
goto text not null,
domain varchar(255) not null,
create_date datetime not null default '0000-00-00
00:00:00',
change_date datetime not null default '0000-00-00
00:00:00',
active tinyint(4) not null default '1');
# Tabela domain
create table domain (
domain varchar(255) not null primary key,
description varchar(255) not null,
transport varchar(255) not null default 'maildrop',
create_date datetime not null default '0000-00-00
00:00:00',
change_date datetime not null default '0000-00-00
00:00:00',
active tinyint(4) not null default '1');
# Tabela mailbox
create table mailbox (
username varchar(255) not null primary key,
password varchar(255) not null,
name varchar(255) not null,
home char(255) default '/mailbox/',
maildir varchar(255) not null,
quota varchar(255) not null default '10485760S',
domain varchar(255) not null,
create_date datetime not null default '0000-00-00
00:00:00',
change_date datetime not null default '0000-00-00
00:00:00',
active tinyint(4) not null default '1',
passwd_expire enum('N','Y') default 'Y',
uid int(10) unsigned default '108',
gid int(10) unsigned default '108');
# Tabela admin
create table admin (
username varchar(255) not null primary key,
password varchar(255) not null,
domain varchar(255) not null,
create_date datetime not null default '0000-00-00
00:00:00',
change_date datetime not null default '0000-00-00
00:00:00',
active tinyint(4) not null default '1');
# Cria os usuários (postfix,
maildrop e postfixadmin) com suas respectivas senhas e
privilegios.
grant select on postfix.* to postfix@localhost identified
by 'xxxxx';
grant select on postfix.* to maildrop@localhost identified
by 'xxxxx';
grant select,update,delete,insert on postfix.* to
postfixadmin@localhost identified by 'xxxxx';
# Altera o campo host da tabela user
e db do banco mysql para que o user postfixadmin ter
acesso de qualquer lugar.
use mysql
update user set host = 'localhost
ou %' where user = 'postfixadmin';
update db set host = 'localhost
ou %' where user = 'postfixadmin';
# Salva definições
FLUSH PRIVILEGES;
# Script by NoComments
| |
Depois do arquivo criado, execute o
comando com a senha do usuário root do
MySQL: |
| # mysql -psenha_do_root < postfix_mysql.db
|
| O banco e as tabelas, bem como o usuário do
postfix serão criados. Vamos testar o acesso do usuário
postfix: |
# mysql -D postfix -u postfix
-psenha_do_postfix
Reading table information for completion of table and
column names
You can turn off this feature to get a quicker startup
with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version:
4.0.26-log
Type 'help;' or '\h' for help. Type '\c' to clear the
buffer.
mysql> | |
mysql> show tables; +-------------------+
| Tables_in_postfix |
+-------------------+
| admin |
| alias |
| domain |
| mailbox |
+-------------------+
mysql> desc alias; +-------------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| address | varchar(255) | | PRI | | |
| goto | text | | | | |
| domain | varchar(255) | | | | |
| create_date | datetime | | | 0000-00-00 00:00:00 | |
| change_date | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+-------------+--------------+------+-----+---------------------+-------+
|
|
Descrição: Essa tabela é onde serão criados os redirecionamentos
(ALIAS).
address: É o endereço do novo redirecionamento
(ALIAS) goto: É o destinatário(s) do redirecionamento.
Exemplo:
address =>
goto postmaster@dominio.com.br >
jeffi@dominio.com.br postmaster@dominio2.com.br =>
jeffi@dominio2.com.br, jeffi@dominio1.com.br
mysql> desc domain; +-------------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| domain | varchar(255) | | PRI | | |
| description | varchar(255) | | | | |
| transport | varchar(128) | | | maildrop | |
| create_date | datetime | | | 0000-00-00 00:00:00 | |
| change_date | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+-------------+--------------+------+-----+---------------------+-------+
|
|
Descrição: Essa tabela é aonde você cria e indica o domínio.
transport: Nesse campo, você indica se o transporte será
"local", para usuários do sistema ou "maildrop", para usuários virtuais. O
padrão é "maildrop".
mysql> desc mailbox; +---------------+------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------------------+-------+
| username | varchar(255) | | PRI | | |
| password | varchar(255) | | | | |
| name | varchar(255) | | | | |
| home | varchar(255) | YES | | /mailbox/ | |
| maildir | varchar(255) | | | | |
| quota | varchar(255) | | |10000000S | |
| domain | varchar(255) | | | | |
| create_date | datetime | | | 0000-00-00 00:00:00 | |
| change_date | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
| uid | int(10) unsigned | YES | | 108 | |
| gid | int(10) unsigned | YES | | 108 | |
| passwd_expire | enum('N','Y') | YES | | Y | |
+---------------+------------------+------+-----+---------------------+-------+
|
|
Descrição: É a principal tabela, onde
serão criados os usuários e suas configurações como senha,
diretório, QUOTA de disco, etc.
- username: É o login do usuário. Exemplo:
jeffi@dominio1.com.br
- password: É a senha do usuário, você pode usar
dois tipos de senhas: crypt() ou clear text. Esse último é
interessante caso você vá usar alguma autenticação que use
Cram-MD5. Eu uso o crypt, acho mais ético.
- name: O nome completo do usuário.
- home: É o diretório aonde será criado as caixas
postais dos usuários. Normalmente é usado o /home,
mas no meu caso usarei o diretório /mailbox/.
Usar um outro diretório no lugar do /home/ é
recomendável, pois o dono desse diretório deve ser o usuário
maildrop. Isso pode causar um problema caso você já
tenha usuários criados nesse diretório.
- maildir: É o Maildir do usuário, aonde os email
serão armazenados.
- quota: É a QUOTA de disco do usuário, o default é
10MB. Note o "S" no final do valor, ele é necessário para o
MAILDROP criar o arquivo "maildirsize" no diretório do
usuário. Esse arquivo contém um cálculo da QUOTA atual do
usuário.
- domain: Domínio de qual faz parte o usuário.
- active: Esse campo serve para habilitar(1) ou
desabilitar(0) a conta do usuário, é usado pelo courier-imap
para permitir o login do usuário. Serve também para
maltratar um pouco dos seus desafetos dentro da empresa :-)
- uid: virtual uid (use o do usuário maildrop).
- gid: virtual gid (use o do usuário maildrop).
- passwd_expire: Esse campo é utilizado por alguns
programas para forçar a mudança de senha por parte do
usuário.
mysql> desc admin; +-------------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| username | varchar(255) | | PRI | | |
| password | varchar(255) | | | | |
| domain | varchar(255) | | | | |
| create_date | datetime | | | 0000-00-00 00:00:00 | |
| change_date | datetime | | | 0000-00-00 00:00:00 | |
| active | tinyint(4) | | | 1 | |
+-------------+--------------+------+-----+---------------------+-------+
|
|
Descrição: Essa tabela é usado pelo
PostfixAdmin para criar os administradores que irão ser
responsáveis pela administração das contas dos respectivos
domínios.
Legal! O nosso banco de email está criado. O
que temos que fazer, é "ensinar" ao Postfix a conectar-se no
MySQL e pegar os dados que ele precisa sobre o usuário, mas
antes, vamos configurar o SASL e o Courier-IMAP.
|
INSTALANDO O
Cyrus-SASL ! ! ! |
O SASL permite que um usuário consiga enviar
emails pelo servidor smtp (relay) sem que o seu IP esteja na lista de
IP's liberados para relay, no postfix é configurado na linha
"mynetworks" no arquivo main.cf.
O requisito
para enviar email é que o usuário exista no sistema. Isso é um ótimo
recurso, pois o usuário onde estiver pode enviar email pelo seu
servidor, sem que você precise liberar o "Relay" para todo mundo.
O uso desta ferramenta é muito importante, porque impede que usuários
não cadastrados no sistema use o seu servidor de e-mail para prática de
SPAMS, e você não precisará liberar o RELAY para toda a internet.
Sem esse tipo de configuração, o seu servidor de e-mail iria com certeza parar nas regras
de 'RBL' ( RealTime Blackhole List ), o que não seria muito agradável para
a empresa e muito menos para o seu chefe. :)
Nessa versão do tutorial, configurei o SASL para
autenticação de usuários LOCAIS (do sistema) e VIRTUAIS (MySQL).
Porém, devemos voltar nossa atenção para alguns detalhes
antes de compilar e instalar o software. Neste ambiente, o SASL2 ainda
não faz autenticação com senhas criptografadas por padrão. Por isto é
necessário compilar o SASL2 com os 3 patches em seu respectivo
diretorio.
Salve os Patches no diretório "/usr/ports/security/cyrus-sasl2/files" :
Preparando para compilar/instalar o
Cyrus-SASL+Patch. Observe primeiramente se os patches estão no
diretório correto, senão, copie-os e em seguida instale o SASL2 com
os comandos abaixo:
Crie o seguinte arquivo com o respectivo
conteúdo: |
#
/usr/local/lib/sasl2/smtpd.conf #
----------- pwcheck_method: auxprop mech_list:
login plain sql_engine: mysql auxprop_plugin:
sql srp_mda: md5 password_format:
crypt sql_hostnames: localhost sql_user:
postfix sql_passwd: xxxxx sql_database:
postfix sql_select: select password from mailbox where
username = '%u@%r' sql_verbose:
true | |
|
INSTALANDO O
COURIER-IMAP ! ! ! |
Como iremos utilizar o Postfix com suporte para Maildir ao estilo
Qmail, então o Courier-IMAP é o programa que permite o acesso a esse tipo
de caixa postal. Ele também vai ser responsável por validar os logins dos
usuários e permitir que eles baixem as suas mensagens por POP3 ou acesso
por IMAP. Tudo isso, lendo informações da tabela "mailbox" no MySQL.
Assim como no Cyrus, nós também iremos utilizar o sistema PORTS do
FreeBSD para a instalação deste pacote, é necessário ter acesso root.
# cd /usr/ports/mail/courier-imap # make
WITH_MYSQL=yes
| |
Isso irá instalar o
courier-authlib automaticamente, necessário para a instalação do
courier-imap e criará os
seguintes arquivos de configuração do courier: imapd, pop3d, authmysqlrc,
authdaemonrc, imapd-ssl, pop3d-ssl. Esses 2 últimos para conexões
seguras.
Configurando
o Courier:
# cd /usr/local/etc/courier # mkdir dist # mv
*.dist dist/
| |
DICA: Acho interessante manter os arquivos *.dist, isso irá ajudar caso
você queira lembrar das configurações default do courier.
As
configurações default dos arquivos imapd e pop3d, ao meu
ver, já são boas. Altere caso você tenha necessidade.
Edite o /usr/local/etc/authlib/authmysqlrc. Esse arquivo é responsável pelas
configurações do Courier para que ele conecte no MySQL e autentique os
usuários. Edite-o conforme as suas configurações. Exemplo:
| # vi /usr/local/etc/authlib/authmysqlrc | |
MYSQL_SERVER localhost MYSQL_USERNAME postfix
MYSQL_PASSWORD xxxxx MYSQL_SOCKET /tmp/mysql.sock MYSQL_PORT 3306
MYSQL_OPT 0 MYSQL_DATABASE postfix MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD uid MYSQL_GID_FIELD gid MYSQL_LOGIN_FIELD username MYSQL_HOME_FIELD home MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD
maildir MYSQL_QUOTA_FIELD
quota MYSQL_WHERE_CLAUSE active=1 | |
ATENÇÃO: Não deixe espaços ou tab no começo do
nome. Isso causa erro para o Maildrop. Exemplo:
MYSQL_MAILDIR_FIELD
maildir - (Correto!)
MYSQL_QUOTA_FIELD quota -
(Incorreto)
| |
Antes de iniciar os serviços de pop e imap, é recomendável que você
edite o arquivo "/etc/rc.conf" novamente e adicione as seguintes
linhas:
courier_authdaemond_enable="YES"
courier_imap_pop3d_enable="YES"
courier_imap_imapd_enable="YES" | |
Coloque as 3 últimas linhas acima no arquivo
/etc/rc.conf para que os serviços IMAP e POP3 sejam iniciados
automaticamente durante a inicialização do servidor.
É extramamente
importante que sejam adicionados nessa ordem, o courier-authdaemond deve
ser iniciado antes dos serviços de pop e imap, pois estes serviços
dependem do arquivo de configuração do authlib para se conectar ao banco
de dados. De outra forma, o courier-imap não conseguirá conectar no
banco de dados.
Os scripts de inicialização de qualquer software instalado via PORTS
estão localizados em /usr/local/etc/rc.d/, neste diretório você
encontrará os scripts de inicialização do courier-authlib, courier-imapd
e courier-pop entre outros softwares que você tenha instalado via PORTS.
Mas os que nos interessam no momento são apenas os 3 acima
mencionados, certo ? Agora inicie os serviços na mesma ordem colocada no
arquivo /etc/rc.conf:
# ./usr/local/etc/rc.d/courier-authdaemond.sh
start # ./usr/local/etc/rc.d/courier-imap-pop3d.sh start
# ./usr/local/etc/rc.d/courier-imap-imapd.sh start | |
Teste se os serviços IMAP e POP iniciaram sem problemas, vamos rodar os
seguintes comandos:
# ps ax |grep courier
435 con- I 0:00.01
/usr/local/sbin/courierlogger -facility=mail
-pid=/var/run/authdaemond/pid -start /usr/local/libex
436 con- I 0:00.05
/usr/local/libexec/courier-authlib/authdaemond
451 con- I 0:00.02 /usr/local/sbin/courierlogger
-pid=/var/run/imapd.pid -start -name=imapd
/usr/local/libexec/courie
452 con- I 0:00.05 /usr/local/libexec/courier-imap/couriertcpd
-address=0 -maxprocs=40 -maxperip=4 -nodnslookup -noid
466 con- I 0:00.01 /usr/local/sbin/courierlogger
-pid=/var/run/pop3d.pid -start -name=pop3d
/usr/local/libexec/courie
467 con- I 0:00.02 /usr/local/libexec/courier-imap/couriertcpd
-address=0 -maxprocs=40 -maxperip=4 -nodnslookup -noid
470 con- I 0:00.04
/usr/local/libexec/courier-authlib/authdaemond
471 con- I 0:00.04
/usr/local/libexec/courier-authlib/authdaemond
472 con- I 0:00.04
/usr/local/libexec/courier-authlib/authdaemond
473 con- I 0:00.04
/usr/local/libexec/courier-authlib/authdaemond
474 con- I 0:00.04
/usr/local/libexec/courier-authlib/authdaemond
|
|
Deve aparecer algo como isso. As linhas indicam que os serviços imap e
pop3 subiram usando a autenticação pelo MySQL. Vamos checar se as portas
dos serviços estão abertas e respondendo:
# netstat -an | grep tcp
Proto Recv-Q
Send-Q Local Address
Foreign Address
State tcp4
0
0 *.143
*.*
LISTEN
tcp4
0
0 *.110
*.*
LISTEN
tcp4 0
0
*:3306
*:*
LISTEN
| |
Teste do IMAP e POP3:
# telnet localhost 143 Trying
0.0.0.0... Connected to 0 (0.0.0.0). Escape character is
'^]'. * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE
THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE
STARTTLS] Courier-IMAP ready. Copyright 1998-2003 Double
Precision, Inc. See COPYING for distribution
information.
0 logout
* BYE Courier-IMAP
server shutting down 0 OK LOGOUT completed Connection
closed by foreign host.
# telnet localhost 110 Trying
0.0.0.0... Connected to 0 (0.0.0.0). Escape character is
'^]'. +OK Hello there.
quit +OK Better
luck next time. Connection closed by foreign host.
|
|
Se aparecer isso, então esta ok.
Vamos agora
instalar/configurar o Maildrop.
|
INSTALANDO O
MAILDROP ! ! ! |
O Maildrop será
responsável pela entrega propriamente dita da mensagem à sua
respectiva caixa postal. Ele também fará o controle da QUOTA de
disco.
Com o Maildrop você também poderá implementar
algumas regras de filtragem.
Baixe e instale o pacote:
# ln -s /usr/local/include/mysql
/usr/include/mysql
# tar -jxvf maildrop-1.6.3.tar.bz2 -C
/home/~/ # cd /home/~/maildrop-1.6.3/ #
./configure --prefix=/usr --sysconfdir=/etc/maildrop
--enable-maildrop-uid=108 -enable-maildrop-gid=108 \
--enable-syslog=1 --enable-maildropmysql --enable-maildirquota # make
# make install # mkdir /etc/maildrop # cp maildropmysql.config
/etc/ # cp maildir/quotawarnmsg /etc/maildrop/
| |
Configurando o MAILDROP:
Configure o Maildrop para
acessar o MySQL. Edite o arquivo /etc/maildropmysql.conf:
| # vi
/etc/maildropmysql.config | |
hostname localhost port
3306 socket
/tmp/mysql.sock database postfix dbuser
maildrop dbpw
xxxxx dbtable
mailbox
default_gidnumber
108 default_uidnumber
108
uid_field
username uidnumber_field
uid gidnumber_field
gid maildir_field
maildir homedirectory_field
home quota_field
quota mailstatus_field active where_clause "" | |
DICA: O Maildrop possui um recurso de aviso de email para o
usuário caso a sua caixa postal ultrapasse a porcentagem de
utilização de um valor especificado. Nesse tutorial usarei o valor
de 90% (explicado mais adiante).
Sendo assim, você pode
personalizar a mensagem de aviso que o usuário ira receber, bastando
para isso editar o arquivo /etc/maildrop/quotawarnmsg.
|
INSTALANDO O
POSTFIX ! ! ! |
Vamos instalar o Postfix com suporte a
Maildir + SASL + MySQL, na maioria das distribuições isso não
vem habilitado por padrão, sendo necessário uma nova
compilação. O Postfix também não tem suporte a QUOTA de disco
com o formato Maildir, sendo necessário, em alguns casos, a
instalação de uma Patch para tal. No nosso caso, como já
explicado, a QUOTA será administrada pelo MAILDROP, sendo
assim, não será necessário a instalação de nenhum PATCH.
|
# tar -zxvf postfix-2.3.4.tar.gz -C
~/ # cd ~/postfix-2.3.4/ # make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL
-I/usr/include/mysql -DUSE_CYRUS_AUTH -I/usr/local/include/sasl'
'AUXLIBS=/usr/local/lib/mysql/libmysqlclient.so -lm
-L/usr/local/lib -lsasl2' # make # make upgrade | |
Verifique se o suporte ao MySQL foi habilitado:
# postconf
-m static pcre nis regexp environ proxy mysql btree unix hash
| |
Configurando o Postfix:
Crie 4 arquivos dentro do diretório /etc/postfix/ com o
seguinte conteúdo:
#
mysql_virtual_alias_maps.cf #
----------------------------- user =
postfix password = xxxxx dbname = postfix table
= alias select_field = goto where_field =
address hosts =
localhost | |
#
mysql_virtual_mailbox_maps.cf #
------------------------------ user =
postfix password = xxxxx dbname = postfix table
= mailbox select_field = maildir where_field =
username hosts =
localhost | |
#
mysql_transport_maps.cf #
-------------------------- user =
postfix password = xxxxx hosts =
localhost dbname = postfix table =
domain select_field = transport where_field =
domain | |
#
mysql_virtual_mailbox_limit_maps.cf #
------------------------------------ user =
postfix password = xxxxx dbname = postfix table
= mailbox select_field = quota where_field =
username hosts =
localhost | |
OBS: Não esqueça de configurar as linhas
"user, password" conforme a sua configuração.
Nesse ambiente, não irei utilizar o Postfix com a opção de
CHROOT, sendo assim, edite o /etc/postfix/master.cf e
troque TODOS os "y" por "n" na coluna "chroot".
Configure o suporte ao Maildrop:
MASTER.CF:
| # vi /etc/postfix/master.cf
| |
|
maildrop unix -
n
n
-
-
pipe flags=DRhu user=maildrop
argv=/usr/bin/maildrop -w 90 -d
${recipient} | |
- A configuração da segunda linha deve ter pelo menos 2 espaços
no começo da linha, conforme o exemplo.
- O parâmetro "-w 90" representa a porcentagem de utilização da
caixa postal que pode chegar até ser avisado pelo sistema. A
mensagem de aviso é enviado pelo MAILDROP com o conteúdo do
arquivo /etc/maildrop/quotawarnmsg.
Renomeie o arquivo original "main.cf" para evitar problemas:
| # mv /etc/postfix/main.cf
/etc/postfix/main.cf.bkp | |
MAIN.CF:
Crie o /etc/postfix/main.cf com o seguinte conteúdo:
| # vi
/etc/postfix/main.cf | |
#========
CONFIGURAÇÕES =============== queue_directory
=
/var/spool/postfix/ program_directory = /usr/sbin command_directory
= /usr/sbin daemon_directory =
/usr/libexec/postfix mail_owner =
postfix default_privs = nobody default_transport = smtp alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases readme_directory
= no sample_directory = /etc/postfix sendmail_path
= /usr/sbin/sendmail setgid_group =
postdrop manpage_directory =
/usr/local/man newaliases_path =
/usr/bin/newaliases mailq_path =
/usr/bin/mailq smtpd_banner = $myhostname ESMTP
"Version not
Available" disable_vrfy_command = yes home_mailbox = Maildir/
# ========== NOME DO DOMÍNIO
=========== myhostname = srvmail.postfix
mydomain = local.com.br myorigin =
$mydomain mydestination = $mydomain,
$transport_maps
#=====REDES
p/ Relay====== #
192.168.0.0/24=MINHA REDE # mynetworks = 127.0.0.0/8
192.168.0.0/24
#========
MYSQL ============== virtual_alias_maps =
mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /mailbox virtual_mailbox_maps =
mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_uid_maps
= static:108 virtual_gid_maps =
static:108 transport_maps =
mysql:/etc/postfix/mysql_transport_maps.cf
#======= Quota
============ virtual_mailbox_limit_inbox =
no virtual_mailbox_limit_maps =
mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override
= yes virtual_maildir_extended =
yes virtual_create_maildirsize =
yes virtual_mailbox_limit =
100000000 virtual_maildir_limit_message = Sorry, the
user's maildir has overdrawn his diskspace quota, please
try again later. virtual_overquota_bounce =
yes
#====== SASL
================ smtpd_sasl_auth_enable =
yes smtpd_sasl_security_options =
noanonymous broken_sasl_auth_clients =
yes smtpd_recipient_restrictions
= permit_sasl_authenticated, permit_mynetworks, check_relay_domains
# =======MAILDROP
========== fallback_transport =
maildrop maildrop_destination_recipient_limit =
1 unknown_local_recipient_reject_code =
450 | |
OBS:
- Essa é a configuração básica desse arquivo, fique à vontade
para incluir novas implementações.
- O parâmetro "maildrop_destination_recipient_limit" faz com que
o MAILDROP entregue os emails para mais de um destinatário, caso
contrario, apenas um irá receber a mensagem.
| Agora é hora de testar se o Postfix esta
se comunicando com o MySQL. |
# newaliases # postfix
start | |
Precisamos criar um domínio e um usuário
para teste. Vamos fazer primeiramente na "mão", fazendo passo
a passo para você visualizar todo o procedimento de criação de
um usuário virtual.
Logue-se como ROOT no MySQL:
| # mysql -D postfix -pxxxxx
| |
Criando o Dominio VIRTUAL e LOCAL:
mysql> INSERT INTO domain
(
domain,
description,
transport,
active) VALUES
(
'local.com.br',
'Dominio LOCAL da Máquina',
'local',
'1');
mysql> INSERT INTO domain
(
domain,
description,
transport,
active) VALUES
(
'dominio1.com.br',
'Dominio de Teste',
'maildrop',
'1');
mysql> SELECT domain, description,
transport, active FROM domain; +-----------------+--------------------------+-----------+--------+
| domain | description | transport | active |
+-----------------+--------------------------+-----------+--------+
| local.com.br | Dominio LOCAL da Máquina | local | 1 |
| dominio1.com.br | Dominio de Teste | maildrop | 1 |
+-----------------+--------------------------+-----------+--------+
| |
|
Criando o Usuário: ATENÇÃO: Não esqueça de escolher uma senha em
'xxxxx'
mysql> INSERT INTO mailbox
(
username, password, name, home, maildir, quota, domain,
active) VALUES
( 'jeffi@dominio1.com.br',
encrypt('xxxxx'), 'Jefferson',
'/mailbox/',
'dominio1.com.br/jeffi/Maildir/', '10000000S',
'dominio1.com.br',
'1');
mysql> SELECT username FROM mailbox; +-----------------------------+
| username |
+-----------------------------+
| jeffi@dominio1.com.br |
+-----------------------------+ | |
mysql> INSERT INTO alias
( address, goto, domain, active)
VALUES
( 'jeffi@dominio1.com.br',
'jeffi@dominio1.com.br', 'dominio1.com.br',
'1');
mysql>
SELECT address,goto,domain,active FROM alias; +-----------------------+-----------------------+-----------------+--------+
| address | goto | domain | active |
+-----------------------+-----------------------+-----------------+--------+
| jeffi@dominio1.com.br | jeffi@dominio1.com.br | dominio1.com.br | 1 |
+-----------------------+-----------------------+-----------------+--------+ | |
Criando o HOME do usuário:
# mkdir -p /mailbox/dominio1.com.br/jeffi #
maildirmake /mailbox/dominio1.com.br/jeffi/Maildir # chown -R
maildrop:www /mailbox/ # chmod -R 770 /mailbox/ | |
Testando o Maildrop:
Teste se o MAILDROP
consegue enviar o email para a caixa postal dos usuários.
# cat /etc/motd | maildrop -d jeffi@dominio1.com.br
# ls /mailbox/dominio1.com.br/jeffi/Maildir/new/
1165799733.M355026P663V0600FF01I00056406_0.srvmail.postfix,S=1114 | |
Beleza, funcionou.
Testando o Postfix:
Como usuário local:
| # echo "Funcionou..." | mail -s "TESTE do
POSTFIX" jeffi@local.com.br
| |
******************** LOG DO
POSTFIX *******************
|
Dec 10 15:12:46
srvmail.postfix postfix/pickup[23430]: BF3CC2E0A4: uid=0
from=<root> Dec 10 15:12:46 srvmail.postfix
postfix/cleanup[24196]: BF3CC2E0A4: message-id=<0_242 24_1088446366_1@srvmail.postfix> Dec 10 15:12:46
srvmail.postfix
postfix/qmgr[21233]: BF3CC2E0A4: from=<root@local.com.br>,
size=389, nrcpt=1 (queue active) Dec 10 15:12:46
srvmail.postfix postfix/local[24228]: BF3CC2E0A4: to=<jeffi@local.com.br>,
relay=local, delay=0, status=sent (delivered to maildir)
Dec 10 15:12:46 srvmail.postfix postfix/qmgr[21233]: BF3CC2E0A4:
removed
| |
# ls /home/jeffi/Maildir/new/
1165800996.V5aI1cc02M869709.srvmail.postfix | |
Beleza, funcionou.
Como usuário virtual:
| # echo "Funcionou..." | mailto -s "TESTE do
POSTFIX" jeffi@dominio1.com.br | |
******************** LOG DO POSTFIX
*******************
Dec 10 15:27:02
srvmail.postfix postfix/pickup[24309]: 245252E08F: uid=0 from=<root>
Dec 10 15:27:02 srvmail.postfix postfix/cleanup[24310]: 245252E08F:
message-id=<0_243 25_1088447222_1@srvmail.postfix > Dec
10 15:27:02
srvmail.postfix postfix/qmgr[21233]: 245252E08F: from=<root@local.com.br>,
size=388, nrcpt=1 (queue active) Dec 10 15:27:02
srvmail.postfix postfix/pipe[24299]: 245252E08F: to=<jeffi@dominio1.com.br>,
relay=maildrop, delay=0, status=sent (srvmail.postfix.com.br)
Dec 10 15:27:02 srvmail.postfix postfix/qmgr[21233]: 245252E08F: removed | |
# ls /mailbox/dominio1/jeffi/Maildir/new
1165799733.M355026P663V0600FF01I00056406_0.srvmail.postfix,S=1114 | |
Opa, acho que foi:
# cat /mailbox/dominio1/jeffi/Maildir/new/1088448788..postfix\,S\=443
Return-Path: <root@local.com.br> Delivered-To: jeffi@dominio1.com.br
Received: by postfix.com.br (Postfix, from userid 0) id
93AAC2E0A3; Mon, 28 Jun 2004 15:53:08 -0300 (BRT)
MIME-Version: 1.0 To: jeffi@dominio1.com.br Subject: Teste
do Postfix Message-ID: <0_24702_1088448788_1@postfix>
Content-ID: <0_24702_1088448788_2@postfix> Content-type:
text/plain Date: Mon, 28 Jun 2004 15:53:08 -0300 (BRT)
From: root@local.com.br | |
É, foi!!!!! :-)
Teste de Autenticação do
IMAP:
# telnet 0 143 Trying 0.0.0.0...
Connected to 0 (0.0.0.0). Escape character is '^]'. * OK
[CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT
THREAD=REFERENCES SORT QUOTA IDLE STARTTLS] Courier-IMAP ready.
Copyright 1998-2003 Double Precision, Inc. See COPYING for
distribution information.
0 login jeffi@dominio1.com.br
xxxxxx 0 OK LOGIN Ok.
0 select inbox * FLAGS (\Draft \Answered \Flagged
\Deleted \Seen \Recent) * OK [PERMANENTFLAGS (\* \Draft
\Answered \Flagged \Deleted \Seen)] Limited * 1 EXISTS * 1
RECENT * OK [UIDVALIDITY 1068222985] Ok 0 OK [READ-WRITE]
Ok
0
logout * BYE Courier-IMAP server shutting down 0
OK LOGOUT completed Connection closed by foreign host.
| |
Beleza, funcionou!!!
Teste de Autenticação
do POP3:
# telnet 0 110 Trying 0.0.0.0...
Connected to 0 (0.0.0.0). Escape character is '^]'. +OK
Hello there.
user jeffi@dominio1.com.br +OK
Password required.
pass xxxxx +OK logged in.
list +OK POP3 clients that break here, they violate
STD53. 1 351 .
quit +OK Bye-bye.
Connection closed by foreign host.
| |
Beleza, funcionou!!!
DICA: Em caso de
erro de autenticação, sempre dê uma olhada nos logs do MySQL e veja se
foi feito e como foi feito o SELECT do courier. Isso pode ser útil
para identificar erros no arquivo de configuração do courier.
Um outro problema pode ser no MySQL: ou o serviço não esta
funcionando ou o usuário não tem permissão de acesso ao banco de
dados.
Quem vai ser responsável pelo controle de QUOTA
de disco nesse ambiente é o Maildrop.
Os valores de QUOTAs
serão cadastrados no banco de dados, sendo independente para cada
usuário. O Maildrop irá ler as tabelas do MySQL e conforme o valor
especificado, ele irá fazer o controle de tal QUOTA.
Quando
você enviou um email para jeffi@dominio1.com.br, o Maildrop
criou o arquivo "maildirsize" dentro do ~/MAILDIR/ do usuário. Exemplo:
# ls /mailbox/dominio1.com.br/jeffi/Maildir
courierimapuiddb cur/ maildirsize new/ tmp/
# cat /mailbox/dominio1.com.br/jeffi/Maildir/maildirsize
10485760S 796 1
| |
Toda vez que o usuário recebe um email, o
Maildrop calcula o espaço utilizado e escreve nesse arquivo. Vamos
testar se a QUOTA esta funcionado:
Primeiro vamos alterar o
valor da QUOTA do usuário para um valor menor, 1MB é o suficiente.
Execute no shell:
# mysql -D postfix -pxxxx -e "SELECT username,quota FROM
mailbox WHERE username='jeffi@dominio1.com.br';" +------------------------------+-----------+
| username | quota |
+------------------------------+-----------+
| jeffi@dominio1.com.br | 10485760S |
+------------------------------+-----------+ | |
A QUOTA esta em 10MB, vamos altera-la para 1MB:
# mysql -D postfix -pxxxxx -e "UPDATE mailbox SET
quota='1000000S' WHERE username='jeffi@dominio1.com.br';"
# mysql -D postfix -pxxxxx
-e "SELECT username, quota FROM mailbox WHERE username='jeffi@dominio1.com.br';"+------------------------------+----------+
| username | quota |
+------------------------------+----------+
| jeffi@dominio1.com.br | 1000000S |
+------------------------------+----------+ | |
Vamos agora enviar email até a sua caixa chegue
no limite especificado. Para isso vou usar um programa que envia email
com anexo chamado "MAILM". Baixe-o em:
# tar -zxvf mailm-0-3.tar.gz -C /home/~/
# cd /home/~/
# ./configure --prefix=/usr
# make
# make install
|
|
Agora é necessário que você localize qualquer arquivo em seu
sistema que possua um tamanho maior que 1MB, para que possamos
realizar o teste com o sistema de quota. Veja no exemplo abaixo:
# ls -lh /tmp/arquivo.tar -rw-r--r-- 1
root root 1.2M Nov 7 15:06 /tmp/arquivo.tar
# mailm -t jeffi@dominio1.com.br -ad /tmp/arquivo.tar | |
******************** LOG DO POSTFIX
*******************
Nov 7 15:08:13
teste postfix/pipe[20706]:0CA0A14ECF: to=<jeffi@dominio1.com.br>,
relay=maildrop, delay=0, status=bounced (permission denied.
Command output: maildrop: maildir over quota. ) | |
Lembrando, que 1000000 não corresponde a 1MB
precisamente :-)
|
INSTALANDO O
POSTFIXADMIN !!! | |
O PostfixAdmin é um ambiente de
administração do Postfix + MySQL, feito totalmente em PHP. Com ele,
você pode:
- Criar domínio virtuais;
- Criar/Excluir contas virtuais;
- Criar/Excluir Aliases;
- Alteração de Senhas, etc.
Você também pode adaptá-lo às suas necessidades, bastando apenas
um conhecimento da linguagem PHP.
Para esse ambiente, foi
necessário fazer algumas alterações no código original para adequá-lo
ao Maildrop. Essas foram algumas das minhas alterações:
- Tradução do Ambiente para Português BR
- Desabilitei a criação automática de um ALIAS para cada
endereço de email criado, achei desnecessário para esse ambiente.
- Desabilitei a opção de DELETAR os dados do "mailbox" do
usuário, em caso de se apagar um ALIAS para essa caixa.
- Adaptação de 2 script para CRIAÇÃO e EXCLUSÃO de usuário. Isso
foi necessário, pois o MAILDROP nesse ambiente, não cria o MAILDIR/
do usuário caso ele não exista. Para a EXCLUSÃO, o Postfixadmin
não apaga o diretório dos usuários. Com esses 2 scripts, você
também pode realizar outras configurações, no meu caso por exemplo,
a configuração de um Webmail.
- Uso do SUDO para dar permissões de execução para esses dois
scripts.
- Inclusão do campo ATIVO na página de administração com a
possibilidade de ativar/desativar um conta de usuário.
- Mudança na forma de apresentação do valor da QUOTA de disco.
- Mudança na forma de apresentação da DATA de alteração da conta,
para um formato BR.
ATENÇÃO: Caso você não esteja utilizando o
Slackware, certamente a sua distribuição deve possuir o Apache e o
PHP nos CD's de instalação. Não entrarei em detalhes sobre
configuração do APACHE, pois o foco aqui é outro. Usarei a
configuração DEFAULT do servidor.
Instalação:
Se você for utilizar a versão do 'Marco Máximo' com essas
alterações, baixe-o nesse link:
Após o download, descompacte no diretório ROOT do servidor WEB ou
em algum outro, lembrando apenas de criar um ALIAS na configuração
do servidor.
No meu caso, foi criado o dir '/www/dominio1'. Utilizo também
o usuário e grupo "nobody" para rodar o Apache.
| # tar -jxvf postfixadmin-ALTERADO.tar.bz2 -C
/www | |
Copie os scripts para um outro diretório e mude
as permissões:
# mv /www/postfixadmin/*.sh /www/
# chmod 700 /www/*.sh # chown www:www /www/postfixadmin/
-R # chmod 755 /www/postfixadmin -R | |
Configuração do SUDO:
Como comentei antes
por causa do MAILDROP, nesse ambiente precisei criar 2 scripts:
adduser.sh e userdel.sh. Esses scripts devem possuir
permissão de ROOT para execução. A forma que achei para resolver esse
problema foi o uso do SUDO.
* Se alguém tiver alguma sugestão
melhor, por favor entre em contato.
Edite o arquivo /etc/sudoers
e adicione as seguintes linhas:
# POSTFIXADMIN www ALL=NOPASSWD:/www/adduser.sh
www ALL=NOPASSWD:/www/userdel.sh
| |
Edite o arquivo config.inc.php e configure
as variáveis conforme a sua configuração. As principais são:
// Login information for
the database $db_host = "localhost"; $db_name =
"postfix"; $db_user = "postfixadmin"; $db_pass = "xxxxx"; | |
Depois de configurado as variáveis, habilite o
acesso a página de administração de domínio do PostfixAdmin, no meu
caso usarei o usuário "admin".
# cd /www/ #
htpasswd htaccess admin New password: Re-type new
password: Updating password for user admin | |
|
CONFIGURAÇÃO BÁSICA DO VIRTUAL HOST NO APACHE | |
Devido aos muitos pedidos, aqui vai uma
configuração bem simples do apache para se ter um Webmail +
Postfixadmin funcional.
Estou levando em consideração que vocês
foram fieis ao tutorial e já tem o Apache+PHP instalados em seus
servidores.
Então vamos lá, primeiro vamos configurar o suporte para o PHP no
Apache editando o seu arquivo de configuração.
| # vi /usr/local/etc/apache/httpd.conf |
|
Insira as seguintes linhas no arquivo httpd.conf
LoadModule php4_module libexec/libphp4.so
AddType application/x-httpd-php .php
AddModule mod_php4.c
Ainda dentro do httpd.conf, procure as
linhas 'AllowOverride None' e
'AccessFileName .htaccess', troque por:
AllowOverride AuthConfig
AccessFileName htaccess
|
|
Obs: Para manter uma boa organização dentro do httpd.conf, sugiro
que você adicione essas linhas citadas acima juntos com os demais
módulos "default" do apache. para isso basta procurar pelas linhas
'LoadModule' dentro do arquivo. Bom, até aqui tudo bem, damos ao apache
o suporte ao PHP.
Vamos criar então um VirtualHost, para isto, insira as seguintes
linhas de acordo com as suas configurações dentro do httpd.conf, de
preferência nas últimas linhas do arquivo onde se encontram as
entradas de exemplo do VirtualHost.
Obs: No meu caso eu criei um "alias" no meu servidor DNS para
postfixadmin.dominio1.com.br para acessar o postfixadmin e outro para
webmail.dominio1.com.br para acessar o meu webmail. Caso você já tenha
um servidor DNS, poderá criar alias para facilitar o acesso via web.
EXEMPLO COM DNS:
<VirtualHost *:80>
ServerAdmin jeffi@dominio1.com.br
DocumentRoot /www/postfixadmin
DirectoryIndex index.php
ServerName
postfixadmin.dominio1.com.br
ErrorLog /var/log/www/postfixadmin/error_log
CustomLog /var/log/www/postfixadmin/access_log common
<Directory /www/postfixadmin>
AuthName "ACESSO RESTRITO APENAS PARA ADMINISTRADORES"
AuthUserFile /www/htaccess
AuthType Basic
require valid-user
</Directory>
</VirtualHost><VirtualHost *:80>
ServerAdmin jeffi@dominio1.com.br
DocumentRoot /www/dominio1/webmail
DirectoryIndex index.php
ServerName webmail.dominio1.com.br
ErrorLog /var/log/www/dominio1/webmail/error_log
CustomLog /var/log/www/dominio1/webmail/access_log common
</VirtualHost> |
|
Crie os diretórios de LOGs antes de reiniciar o servidor Apache:
# mkdir -p /var/log/www/postfixadmin
# mkdir -p /var/log/www/dominio1/webmail
# chown nobody:nobody /var/log/www/dominio1/webmail
# chown nobody:nobody /var/log/www/postfixadmin |
|
Reinicie o servidor apache:
Agora pelo BROWSER, acesse o endereço:
http://postfixadmin.dominio1.com.br/admin
Ele
irá lhe pedir o usuário e o password que você cadastrou no arquivo
.htpasswd.
No PostfixAdmin, você precisa cadastrar os
administradores correspondentes para cada domínio que você possui na
máquina.
Depois de cadastrado o administrador daquele domínio,
acesse pelo endereço
http://postfixadmin.dominio1.com.br, colocando o usuário e
senha cadastrados.
Não irei entrar em detalhes sobre o
funcionamento do PostfixAdmin, pois a sua interface é muito intuitiva.
DICA: Caso ocorra algum problema na criação do usuário, verifique a
configuração e permissão dos scripts de criação (USERDEL e ADDUSER).
Verifique também no
/var/log/messages se o comando sudo foi executado.
Segue abaixo um outro exemplo para configuração do Apache caso você
não possua um servidor DNS, e esteja montando este ambiente apenas
para estudos.
EXEMPLO SEM DNS:
<VirtualHost *:80>
ServerAdmin jeffi@dominio1.com.br
DocumentRoot /www
DirectoryIndex index.php
ServerName ip_do_servidor
ErrorLog /var/log/www/mailserver/error_log
CustomLog /var/log/www/mailserver/access_log common
<Directory /www/postfixadmin>
AuthName "ACESSO RESTRITO APENAS PARA ADMINISTRADORES"
AuthUserFile /www/htaccess
AuthType Basic
require valid-user
</Directory>
</VirtualHost> |
|
Crie o diretório de LOG:
# mkdir -p /var/log/www/mailserver
# chown www:www /var/log/www/dominio1 |
|
Restarte o Apache:
Com isto você poderá acessar tanto o postfixadmin como o webmail
digitando apenas:
http://ip_do_servidor/postixadmin e http://ip_do_servidor/webmail
Obs: No EXEMPLO SEM DNS, os diretórios do "webamail" e
"postfixadmin" devem estar em /www conforme a configuração do
httpd.conf acima, caso você opte por deixa-los em outro diretório,
você deverá mudar as configurações do httpd.conf de acordo com as suas
necessidades.
|
INTEGRANDO O
POSTFIX COM O CLAMAV !!! | |
Nesta versão do clamav, é necessário que você
tenha a zlib 1.2.2 instalada, então antes de iniciarmos a instalação
do clamav, atualize sua zlib, baixe a nova versão em:
http://www.gzip.org/zlib/zlib-1.2.2.tar.gz
Descompacte o arquivo e instale:
# tar -zxvf zlib-1.2.2.tar.gz -C /opt/
# cd zlib-1.2.2
# ./configure --prefix=/usr
# make
# make install
# ldconfig |
|
Bom, seu sistema está pronto para receber o clamav, e para isto
vamos seguir o tutorial de um grande amigo, o "gsoares" que permitiu a
inclusão de seu artigo neste tutorial sobre integração do clamav
direta no postfix.
Outro maravilhoso HOWTO feito por nosso amigo
Gleydson (gsoares) com a ajuda de outro grande amigo da comunidade
David (thefallen) da rede "FREENODE" de irc.
Howto Original:
http://www.nerdgroup.org/doc/postfix_clamav.html
Aumento de
Desempenho
Muitos admins sofreram ou ainda sofrem com o
aumento de virus na Internet, causando lentidao na entrega e
recebimento em seus MTAs. Tudo isso por falta de um filtro que
trabalhasse diretamente com o postfix sem precisar passar pelo
amavis ou mailscanner (os famosos consumidores de memoria e cpu
;)).
Quem não já teve a experiência de integrar o postfix com
expressões body_checks para rejeitar o email antes mesmo que
ele passe pelo amavis ou mailscanner e se surpreendeu com o
alto desempenho. Porem a solução ideal é integrar um antivirus
diretamente com o MTA. Nesse tutorial usaremos o postfix junto
com o clamav (antivirus livre).
Para isso baixe o clamav e o script do filtro:
ClamAv -
http://heanet.dl.sourceforge.net/sourceforge/clamav/clamav-0.84.tar.gz
Clamav Filter -
http://www.unitednerds.org/projects/mail/clamav-filter.sh.gz
Primeiramente, descompacte o tar.gz do ClamAV e crie os
usuarios padrao.
# tar -xvzf clamav-0.84.tar.gz # groupadd
clamav # useradd -g clamav -s /bin/false -c "ANTI-VIRUS
Clamav" clamav | |
Para compilarmos, vamos usar algumas opções no
./configure:
# ./configure --prefix=/usr --sysconfdir=/etc
# make # make install | |
Pronto, seu ClamAV está instalado, agora so falta
configurar o seu /etc/clamd.conf.
Apenas algumas linhas
precisam ser alteradas. Entre elas, precisamos comentar a linha
"Example" e descomentar as linhas "ScanMail" e "User clamav". Voce
pode querer tambem alterar algumas variaveis do ClamAV, como lugar em
que é gerado o unix socket. Segue abaixo um exemplo de clamav.conf:
# /etc/clamd.conf LogTime # Voce pode ter o log no syslog ou em um arquivo
de log, ou ambos. LogSyslog LogFile
/var/log/clam/clamd.log PidFile
/var/run/clam/clamd.pid LocalSocket
/var/run/clam/clamd.sock FixStaleSocket MaxThreads
50 ThreadTimeout 600 MaxDirectoryRecursion
15 FollowFileSymlinks SelfCheck 600 User
clamav ScanMail ScanArchive ArchiveMaxFileSize
10M ArchiveMaxRecursion 5 ArchiveMaxFiles
1000 | |
Crie agora o diretório
# mkdir /var/run/clam # mkdir
/var/log/clam # chown -R clamav:clamav /var/run/clam #
chown -R clamav:clamav
/var/log/clam | |
Nao se esqueça de colocar o /usr/sbin/clamd
para ser iniciado no boot. Note que é uma boa ideia inicia-lo ANTES
do Postfix (assim, quando o Postfix requisitar o antivirus, ele ja
esta la.)
Ex.:
#!/bin/sh # # /etc/rc.d/rc.local: Local
system initialization script. # # Put any local setup
commands in here: /etc/rc.d/imapd start /etc/rc.d/pop3d
start /usr/sbin/clamd
/usr/bin/freshclam postfix
start | |
Bem, aqui devemos dar nosso agradecimento ao
thefallen em ter aberto nossos olhos em relação a essa implementação
e pelo desenvolvimento desse filtro.
Baixe o filtro neste endereço e salve-o em /usr/libexec/postfix e
siga os passos:
# gunzip clamav-filter.sh.gz # chmod
0755 clamav-filter.sh # mkdir /var/spool/filter # chown
clamav:clamav
/var/spool/filter
# clamd & | |
Dentro do arquivo master.cf insira as seguintes
linhas:
smtp inet
n
-
n
-
-
smtpd -o
content_filter=clamav:clamav | |
clamav unix
-
n
n
-
-
pipe flags=Rq
user=clamav argv=/usr/libexec/postfix/clamav-filter.sh -f
${sender} --
${recipient} | |
- Obs: Se voce antes usava
amavis, nao se esqueca de comentar ou retirar as linhas referentes a
ele no master.cf "content_filter =
smtp-amavis:[127.0.0.1]:10024" dentro do
/etc/postfix/main.cf.
Acertando alguns
detalhes no Postfix Podemos acertar alguns detalhes no Postfix para evitar um
"timeout" sob carga pesada. No master.cf, você pode limitar a
quantidade de processos do filtro rodando ao mesmo tempo (para
evitar que o workload da maquina suba muito). No exemplo abaixo,
limitamos a 15 instâncias do filtro; aumente esse limite com calma e
veja até onde seu servidor aguenta sem "abrir o bico" :)
- Precisamos tambem ajustar a variavel "command_time_limit" no
main.cf.
- Essa variável diz quanto tempo um comando externo ao Postfix
pode rodar antes de ser "morto" pelo processo "master". O default
é de 1000s, esse valor deve ser suficiente para a maioria dos
ambientes. No entanto, em horários de pico de utilização da
máquina, ou sob ataque, esse limite pode causar erros de "Timeout
Exceeded" no Postfix.
- Pode aumenta-lo para um valor maior (talvez 1h) para evitar
isso. Basta colocar no main.cf uma linha assim:
#/etc/postfix/main.cf
command_time_limit =
1h | |
Restarte o postfix:
Mantendo o "banco
de dados" do ClamAV sempre
atualizado
- Nesta nova versão do clamav, como vocês perceberam, o arquivo
de configuração do clamav mudou de "clamav.conf" para
"clamd.conf", o que diferencia os dois arquivos, é realmente o
nome, as configurações são as mesmas.
- O freshclam vem com um arquivo de configuração. Então você
terá de editar o arquivo, e alterar apenas 2 linhas, siga o
exemplo abaixo:
Comente esta linha:
##
## Example config file for freshclam
## Please read the freshclam.conf(5) manual before editing
this file.
## This file may be optionally merged with clamd.conf.
##
# Comment or remove the line below.
#Example
|
|
Ainda no arquivo de configuração do freshclam, procure a linha:
# Uncomment the following line and
replace XY with your country
# code. See http://www.iana.org/cctld/cctld-whois.htm for
the full list.
# Default: There is no default, which results in an error
when running freshclam
# DatabaseMirror db.XY.clamav.net
DatabaseMirror db.br.clamav.net
|
|
- Pronto, já está configurado, fácil não ? Você pode alterar
mais campos no freshclam.conf de acordo com suas necessidades.
- Pode-se inicia-lo como um "daemon" no sistema, e
deixar que ele verifique se há atualizacões no "banco de dados" do
ClamAV com o comando:
# /usr/bin/freshclam --log-verbose
--daemon-notify --daemon --checks=50
--log=/var/log/clam/freshclam.log | |
Veja a saída do log:
# cat /var/log/clam/freshclam.log
freshclam daemon 0.84 (OS: linux-gnu, ARCH: i386, CPU:
i686)
ClamAV update process started at Mon May 9 13:36:56 2005
main.cvd is up to date (version: 31, sigs: 33079, f-level:
4, builder: tkojm)
daily.cvd is up to date (version: 873, sigs: 1184,
f-level: 4, builder: diego)
-------------------------------------- |
|
- Depois que se sentir "seguro" com o funcionamento do ClamAV
(depois que ja tiver mostrado pro seu chefe que o ClamAV se
atualiza sozinho mesmo :D), voce pode remover as opcoes de
"verbose" do clamav.conf e do freshclam. Isso economiza espaco em
disco, descartando logs desnecessarios.
Ah, nao se esqueca de
colocar o freshclam para rodar no boot tambem :)
Um pouquinho de Teoria
(para os nao tão apressados
:D)
O comando "clamdscan" conecta ao daemon (via
unix-domain ou tcp sockets) "clamd" e solicita que o daemon
verifique o arquivo. Manter o clamd rodando e apenas solicitar
verificacões pelo cliente agiliza bastante o processo de
verificacão. Dessa maneira, você evita o desperdício de recursos que
seria carregar todo o banco de dados de vírus apenas para scanear um
arquivo.
É por esse motivo que precisamos rodar o script com o mesmo
usuario que o "clamd" estará rodando, para que ele possa acessar as
mensagens na fila de filtragem.
Faça um teste rodando o clamdscan e rodando o clamscan (esse não
usa o clamd; ele carrega todas as definicões de virus e depois
scaneia). No último benchmarking que eu fiz, o clamscan levava em
media 80 segundos para fazer o que o clamdscan fazia em 5-7
segundos.
Para integrarmos o ClamAV Filter ao Postfix, usamos as opções de
content_filter do Postfix ligadas ao processo "pipe" do mesmo, que
permite que enviemos mensagens "para fora" do Postfix.
Há mais explicacões sobre isso na Palestra do evento LinuxChix-BR
de 2004, disponivel neste mesmo site (http://www.unitednerds.org/thefallen/docs/?area=Postfix).
|
INTEGRANDO
COM O SPAMASSASSIN
!!! | |
Precisamos então instalar o SpamAssassin,
execute o comando:
cpan> install
Mail::SpamAssassin cpan> quit #
spamd& | |
É provável que precise instalar algumas
dependências do SpamAssassin, mas não se preocupe, o MCPAN
cuidará disso pra você, apenas pressione ENTER quando for
solicitado a instalação das dependências.
É bastante simples integrarmos o SpamAssassin ao nosso
script do Clamav Filter. Supondo que você ja tenha instalado o
SpamAssassin, e o "spamd" rodando, basta editar o
clamav-filter.sh e mudar a linha:
De:
| SENDMAIL="/usr/sbin/sendmail -i
" | |
Para:
| SENDMAIL="/usr/bin/spamc -f -e
/usr/sbin/sendmail -i
" | |
Agradecimentos a David da Guia Carvalho pela dica :)
|
INSTALANDO O
MAIL VACATION
!!! | |
VACATION é um recurso que possibilita
configurar o servidor para enviar um email de resposta para o
remetente de um uma determinada conta, ou seja, quem envia um email
para uma conta configurada com esse recurso, recebe automaticamente
um email de resposta contendo um agradecimento ou algum aviso sobre
a localidade do mesmo. Esse recurso é mais utilizado em caso de
férias ou viagem de um funcionário.
Para isso, vamos iniciar a instalação de algumas dependencias do
vacation, digitando o comando abaixo:
cpan> install DBI:DBD
cpan> install DBD::mysql |
|
DICA: Normalmente, pode ocorrer alguns erro no
teste durante a instalação do módulo DBD::mysql. Caso ocorra esse
problema, force a instalação manualmente, exemplo:
# cd ~/.cpan/build/DBD-mysql-3.0008/ #
make install
| |
Instalação:
Faça o download do programa
em:
| # tar -zxvf vacation-2.1.3.tgz -C /opt/ | |
O Vacation utiliza o MySQL para guardar as
mensagens de resposta dos usuários, sendo assim, vamos criar as
tabelas. Crie um arquivo com o seguinte
conteúdo:
#==============
vacation_mysql.cf ======= USE postfix; CREATE
TABLE vacation ( email varchar(255)
NOT NULL default '', subject
varchar(255) NOT NULL default
'', body text NOT
NULL, cache text NOT NULL )
TYPE=MyISAM COMMENT='Virtual Vacation - Vacation Daemon
Table'; | |
E execute:
| # mysql -pxxxxx
<
vacation_mysql.cf | |
Crie um usuário no sistema para receber os
emails que forem enviados para as pessoas que estejam cadastradas no
banco de dados do VACATION. Depois copie os arquivos de configuração
para o $HOME do usuário criado (vacation).
# pw groupadd vacation
# pw useradd vacation -g vacation -s /bin/sh -d /home/vacation
# mkdir /home/vacation
# cd ~/vacation-2.1.3 # cp dot.forward
/home/vacation/.forward # cp dot.procmailrc
/home/vacation/.procmailrc # cp vacation.pl
/home/vacation/ # chown -R vacation:vacation /home/vacation | |
Configuração:
Edite o arquivo
/home/vacation/.forward e indique o caminho correto do
procmail. No Slackware é /usr/bin/procmail.
# cat /home/vacation/.forward "|
/usr/bin/procmail"
| |
Edite o arquivo
/home/vacation/vacation.pl e configure os valores para acesso
ao banco de dados. No meu caso, usei os mesmos dados do usuário do
postfixadmin.
$db_name = "postfix"; $db_user =
"postfixadmin"; $db_pass = "xxxxx"; $sendmail =
"/usr/libexec/sendmail"; | |
DICA: Você também pode editar o arquivo
/home/vacation/.procmailrc ou
/home/vacation/vacation.pl e habilitar as linhas de logs em
caso de erro.
Teste se o usuário do postfixadmin tem acessa
o banco:
| # mysql -D postfix -u postfixadmin -pxxxxxx
-e "desc
vacation;" | |
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| email | varchar(255) | | | | |
| subject | varchar(255) | | | | |
| body | text | | | | |
| cache | text | | | | |
+---------+--------------+------+-----+---------+-------+ | |
Edite o arquivo "config.inc.php" do
POSTFIXADMIN e habilite o suporte ao vacation:
// When you want to offer
the "vacation" daemon to your users, // set this to
"YES". // You need to install the vacation module
first! $use_vacation = "YES"; $vacation_text =
"Resposta automática, caso você esteja fora do
escritório."; $vacation_file =
"vacation.php"; $vacation_email =
"vacation@local.com.br"; | |
TESTE:
Depois de liberar o suporte a
Vacation do PostfixAdmin, acesse a página de login no PostfixAdmin e
clique no link referente ao Vacation, nesse caso "Resposta
automática, caso você esteja fora do escritório.
Na página
que se segue, coloque o email e senha do usuário e edite a mensagem
de resposta automática e clique em "Saindo".
Para testar,
envie um email para o usuário, você deve receber uma mensagem de
aviso do servidor como sendo do usuário.
Para retirar a
mensagem automática, coloque o usuário e senha e clique em
"Voltando".
Teste, enviando como usuário normal um email
para o usuário virtual cadastrado.
| $ echo "TESTE" | mailto -s "VACATION"
jeffi@dominio1.com.br | |
DICA: Caso ocorra algum erro de não validação
da senha do usuário, tente alterá-la usando o Postfixadmin. Uma
causa do erro, pode ser a forma com que o Postfixadmin lê e grava a
senha no MySQL.
|
WEBMAIL -
SQUIRRELMAIL
!!! | |
Desde o meu primeiro tutorial, muitas pessoas
me pediam sugestões de um webmail que se integrasse a esse ambiente,
esse também foi um dos meus problemas quando comecei a trabalhar com
essa solução.
Dos webmails que testei, o que mais me
surpreendeu foi o Squirrelmail. O Squirrelmail é um completo
webmail que se integra completamente nesse ambiente com domínios
virtuais. Ele é escrito em PHP, o que possibilita a sua total
personalização.
Um outro recurso muito interessante, é a
possibilidade de se aumentar as funcionalidades do Squirrelmail com
a instalação de plugins.
Vou demonstrar uma instalação
simples com suporte a MySQL e a instalação de um plugin para mudança
de senha.
Dependências:
Apache e PHP.
Instalando:
No site existem versões em RPM, mas aconselho
a utilizar as versão SOURCE devido a sua facilidade de
personalização.
Faça o download em:
# tar -jxvf squirrelmail-1.4.2.tar.bz2 -C /www/dominio1/ # cd /www/dominio1/ # mv
squirrelmail-1.4.2/ webmail # chown nobody:nobody webmail/
-R # cd webmail/
| |
Configurando:
A configuração do
Squirrelmail pode ser feita de duas formas:
- Por um script de configuração "configure".
- Editando diretamente o arquivo "webmail/config/config.php"
Irei mostrar a configuração do arquivo "config.php", pois a
utilização do script de configuração é bastante fácil.
Como
estamos utilizando o MySQL, nada mais cômodo como guardar as
configuração dos usuários e seus livros de endereços em tabelas SQL.
O Squirrelmail permite essa facilidade, sendo assim, vamos criar as
tabelas e as permissões de acesso a elas.
Crie um arquivo
para a criação das tabelas com o seguinte conteúdo:
#================
squirrelmail.db ============
# # Cria o banco do
Webmail #
CREATE DATABASE webmail; use
webmail;
# # Tabela de
preferência dos usuários 'userprefs' #
CREATE
TABLE userprefs ( user varchar(128) NOT NULL
default '', prefkey varchar(64) NOT NULL
default '', prefval blob NOT
NULL, PRIMARY
KEY (user,prefkey) ) TYPE=MyISAM;
# # Tabela do livro de endereço dos usuários
'address' #
CREATE TABLE address
( owner varchar(128) NOT NULL default
'', nickname varchar(16) NOT NULL default
'', firstname varchar(128) NOT NULL default
'', lastname varchar(128) NOT NULL default
'', email varchar(128) NOT NULL default
'', label varchar(255) default
NULL, PRIMARY
KEY (owner,nickname), KEY firstname
(firstname,lastname) ) TYPE=MyISAM;
# # Cria o usuário "squirreluser" e da
permissão de # acesso ao banco
"webmail" #
USE mysql INSERT INTO user
(Host, User, Password)
VALUES ('localhost
ou %','squirreluser', password('xxxxx'));
INSERT INTO db (Host, Db,
User, Select_priv, Insert_priv, Update_priv, Delete_priv)
VALUES ('localhost ou %',
'webmail', 'squirreluser', 'Y', 'Y', 'Y', 'Y');
FLUSH
PRIVILEGES; | |
Crie o banco e as tabelas:
| # mysql -pxxxxx
<
squirrelmail.db | |
Teste se foi
criado:
| # mysql -pxxxxx -D
webmail -e "show tables;"
| |
+-------------------+
| Tables_in_webmail |
+-------------------+
| address |
| userprefs |
+-------------------+ | |
Agora vamos configurar o Squirrelmail.
Dentro do diretório webmail/config/ existe um arquivo
chamado "config_default.php". Esse arquivo explica para que serve
cada parâmetro de configuração.
Crie um arquivo chamado
"config.php" com o conteúdo do arquivo "config_default.php",
exemplo:
| # cp config_default.php
config.php | |
Uma outra forma de gerar esse arquivo, é usando
o script de configuração:
Recomendo essa última forma, pois cria um
arquivo config.php mais "limpo".
Essas são as principais
linhas que devem ser alteradas no arquivo
"webmail/config/config.php" para a configuração do seu domínio com
suporte a MySQL e Courier-IMAP:
$org_name =
"Minha Empresa"; $org_title =
"TESTE"; $provider_name = 'Minha
Empresa'; $squirrelmail_default_language =
'pt_BR'; $domain
=
'dominio1.com.br'; $imapServerAddress =
'localhost'; $imapPort
=
143; $useSendmail =
false; $smtpServerAddress =
'localhost'; $smtpPort
=
25; $sendmail_path =
'/usr/sbin/sendmail'; $pop_before_smtp =
false; $imap_server_type
=
'courier'; $invert_time =
false; $optional_delimiter =
'detect';
$default_folder_prefix =
''; $trash_folder
=
'INBOX.Trash'; $sent_folder =
'INBOX.Sent'; $draft_folder
=
'INBOX.Drafts''; $default_move_to_trash =
true; $default_move_to_sent
=
true; $default_save_as_draft =
true; $show_prefix_option
= true; $list_special_folders_first
=
true; $use_special_folder_color
=
true; $auto_expunge
=
true; $default_sub_of_inbox
= true; $show_contain_subfolders_option =
true; $default_unseen_notify =
2; $default_unseen_type =
1; $auto_create_special =
true; $delete_folder =
true; $noselect_fix_enable =
true;
$default_charset =
'iso-8859-1'; $data_dir
= SM_PATH .
'data/'; $attachment_dir
=
$data_dir; $dir_hash_level
=
0; $default_left_size =
'150'; $force_username_lowercase =
true; $default_use_priority =
true; $hide_sm_attributions =
true; $default_use_mdn =
true; $edit_identity =
true; $edit_name =
true; $allow_thread_sort =
true; $allow_server_sort =
true; $allow_charset_search =
true; $uid_support =
true;
$default_use_javascript_addr_book =
true; $addrbook_dsn = 'mysql://squirreluser:xxxxx@localhost/webmail'; $addrbook_table
= 'address';
$prefs_dsn = 'mysql://squirreluser:xxxxx@localhost/webmail'; $prefs_table
= 'userprefs'; $prefs_user_field =
'user'; $prefs_key_field = 'prefkey'; $prefs_val_field =
'prefval';
|
|
DICA: Quase todos os plugins do Squirrelmail
vem desabilitados por default. Usando o script de configuração,
escolha a opção 8 e habilite-os digitando seus números
correspondentes.
Agora acesse o webmail pelo link:
http://webmail.dominio1.com.br ou http://ip_do_servidor/webmail/
Para logar no
webmail você precisa fornecer seu nome completo de usuário, ou seja,
usuario@dominio. Exemplo:
user:
jeffi@dominio1.com.br pass: xxxxxx
Instalando plugins:
Como eu havia falado, uma forma de você aumentar as
funcionalidades do Squirrelmail é instalando novos plugins. No site,
atualmente estão listados 174 plugins.
Vamos instalar um
plugin útil para a mudança de senha dos usuários VIRTUAIS, chamado
change_mysqlpass, para isso você precisa também de outro
plugin chamado de compatibility.
Baixe-os em:
Instalando:
# tar -zxvf compatibility-1.3.tar.gz -C /www/dominio1/webmail/plugins/ # tar -zxvf
chg_mysqlpass-3.2-1.2.8.tar.gz -C
/www/dominio1/webmail/plugins/ # cd /www/dominio1/webmail/plugins/change_mysqlpass/ # cp
config.php.sample config.php # chown root:nobody config.php
# chmod 640 config.php
| |
Edite o arquivo "config.php" e configure as
seguintes variáveis:
$mysql_server =
'localhost'; $mysql_database = 'postfix'; $mysql_table =
'mailbox'; $mysql_userid_field =
'username'; $mysql_password_field
='password'; $mysql_manager_id =
'postfixadmin'; $mysql_manager_pw = 'xxxxxx';
$mysql_saslcrypt =
0; $mysql_unixcrypt = 0; $mysql_MD5crypt =
1;
$use_ssl_for_password_change =
0;
$mysql_password_force =
1; $mysql_password_change_field =
'passwd_expire'; $mysql_password_change_field_delimiter =
'"'; $mysql_password_change_yes_value =
'Y'; $mysql_password_change_no_value =
'N'; | |
# cd /www/dominio1/webmail/ #
./configure
| |
Escolha a opção 8, habilite os dois plugins
(compatibility, change_mysqlpass) e faça um reload no seu browser.
Todo o usuário criado, ao se logar pela primeira vez no
webmail, receberá um pedido de mudança de senha. Isso é causado pelo
valor "Y" no campo "passwd_expire" da tabela "mailbox".
DICA: Caso ocorra algum erro, pode ser devido a variável
"$use_ssl_for_password_change = 1;". Se o seu servidor não estiver
com o suporte SSL ativo, altere para 0 para resolver o problema.
Plugins recomendados:
- msg_flags: ícones para as mensagens.
- smallcal: pequeno calendário na barra lateral.
- newuser_wiz: ajuda o usuário a configurar alguns dados
iniciais.
- vlogin: completa o login do usuário com o seu domínio
"@dominio.com.br".
- Bom galera, depois de quase 2 semanas trabalhando em
cima deste howto, acho que mereço um bom descanso não acham
? :)
- Agradeço a paciência e a compreensão de todos.
- Críticas, Elogios e Sugestões serão de grande valia para
a melhoria do Tutorial.
- Gostaria de agradecer e muito as pessoas que puderam
contribuir e me ajudar de forma direta e indireta neste
pequeno trabalho, e que puderam fazer deste tutorial uma
realidade, onde poucas pessoas conseguiam obter sucesso
através de outros tutoriais ditribuídos pela internet devido
á falta de documentação para essa maravilhosa distribuição
chamada Slackware:
- Agradecimentos Especiais:
| |
|
|
|
|
| Nome: |
|
Nickname |
Rede IRC |
Canais |
| |
|
|
|
|
| Gleydson Soares |
- |
gsoares |
freenode.org |
#nerdgroup |
| Michael |
- |
NoComments |
brasnet.org |
#linuxajuda |
Tutorial criado por Jeffierson - jeffi
Usuário
da rede brasnet e freenode de IRC, canais
frequentados:
#linuxajuda - irc.brasnet.org
Email: jeffi@uol.com.br
| freebsd@uol.com.br
Espero ter ajudado, Boa Sorte !!!
|