Caso de Estudo: E-mail Server ISP (25/10/2010)
LDAP + Postfix Virtual + Dovecot (Quotas) + Phamm + Mailwatch + Mailscanner + SpamAssassin + Clamav + Horde IMP Webmail + Gnarwl Auto-reply
Implementação: Fedora 12
Descrição das funcionalidades:
- Full Multi Domínio Hosting (Suporte a contas e sistema de entrega sem a necessidade de conta POSIX no sistema para cada usuário)
- Autenticação LDAP
- Gereciamento de Contas via Web do LDAP, função onde cada domínio hospedado terá um administrador específico protegido por senha (Phamm)
- Web-mail em Português Completo (Horde,IMP)
- Função de troca de Senha de Usuarios Web
- Função de auto-resposta e encaminhamento automáticos para férias Web-ldap
- Função de quota de caixa postal (Tamanho máximo para caixa postal individual dos usuários configurável via web (Ajustável por usuário))
- Relatórios Administrativos separados por domínio hospedado, estatítiscas com gráficos de envio , recebimento, spam e virus via Web (MailWatch)
- Anti-Spam Completo (Checagens de Servidor,Rede,Envelope,Corpo e databases públicas) (Postfix-Anti-UCE Restrictions+MailScanner+SpamAssassin)
- Whitelist e Blacklist Gerais do Domínio e por Usuário administradas via WEB (Mailwatch+Mailscanner)
- Whitelist do filtro de restrições UCE-POSTFIX
- Anti-virus de Email com atualizações Gratuitas (ClamAV)
- Função POP/IMAP/IMAPs (Seguro/Criptografado) (Dovecot)
- Função SMTP Autenticado (SASL Dovecot, POSTFIX MailDir) - Função de armazenamento em Quarentena separadas por domínio hospedado para Spam e Virus (MailScanner+MailWatch)
-Função de Alias no LDAP
-Função de encaminhamento (Forward) no LDAP
Baixar todos os arquivos de configuração (.conf):
confs.zip
Instalando e configurando o sistema operacional:
# Instale o fedora 12 e selecione os pacotes de desenvolvimento e Web-Server.
# Atenção: O MailScanner necessita de pelo menos 2GB de memoria RAM para rodar razoavelmente (processar 10.000 mails dia).
# Desligue o SElinux
# Insira no arquivo selinux a palavra disabled onde esta enabled.
sestatus
cd /etc/sysconfig
vi selinux
# Ajuste a hora do sistema. Ajustar data e hora sao fundamentais para o funcionamento do sub-sistema de mail
date -s 16:40
# Desligue qualquer Firewall ou filtro
chkconfig iptables off ; iptables -L ; iptables -F
# Desligue o Network Manager
chkconfig NetworkManager off
chkconfig network on
# Configure a Interface de rede e IP estatico para o Servidor
system-config-network-tui
cd /etc
cd sysconfig
cd network-scripts
vi ifcfg-eth0
service network restart
# Configure uma entrada no /etc/hosts adequada para seu nome de maquina e IP
vi /etc/hosts
192.168.1.34 mailserver.zapt.com.br mailserver
# Coloque em runlevel 3 (Inicializacao em modo texto)
vi /etc/inittab
# Verifique se o IP esta correto
ip addr list
# Verifique se existe um servidor de DNS valido no /etc/resolv.conf
# Teste usando: host www.google.com.br ou a ferramenta dig
# Para o envio e recebimento de emails a resolução de nomes do servidor deve estar 100% funcional.
# Ajuste a linguagem do sistema.
system-config-language
# Atualize todo o sistema
yum update
# Instale ou atualize alguns pacotes necessarios
# Instalando grupo devel necessario
yum grouplist |grep Devel
yum groupinstall "Legacy Software Development"
# Instale todos os grupos de desenvolvimento
yum install openldap-servers
yum install phpldapadmin
yum install postfix
yum install dovecot
yum install php
# Troca no alternatives o sendmail (default do fedora 12) para o postfix
alternatives --config mta
chkconfig sendmail off
# Gera Backup da configuracao original de alguns pacotes
cp /etc/openldap/slapd.conf slapd.conf.original
cp /etc/postfix/main.cf main.cf.original
cp /etc/postfix/master.cf master.cf.original
cp /etc/dovecot.conf dovecot.conf.original
LDAP e Phamm:
# Baixe o pacote phamm-0.5.18.tar.gz de www.phamm.org
# Descompacte: tar xvzf phpamm-0.5.18.tar.gz
# Copie todos os schemas do diretorio /schema após ter descompactado para /etc/openldap/schema
# Copie alguns schemas adicionais de http://open.rhx.it/phamm/schema/ para /etc/openldap/schema
# Voce ira precisar dos seguintes schemas:
phamm.schema, perversia.net.schema, ISPEnv2.schema, amavis.schema, pureftpd.schema,samba.schema,dnsdomain2.schema
# Copie o conteudo descompactado para o diretorio raiz do webserver (Ex. /var/www/html/phamm) (Eu sugiro /var/www/html/admin)
# Construa seu arquivo de configuraçao do openldap (slapd.conf) parecido com o exemplo fornecido.
# Para gerar um novo hash de password do rootdn use, copiando e colando a saida para o slapd.conf.
slappasswd
# Configuração inicial da database
cp /usr/share/doc/openldap-servers-2.4.15/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
chmod 600 /var/lib/ldap/DB_CONFIG
# Copie o arquivo config.inc.example.php para config.inc.php, ele deve se parecer com o exemplo abaixo, esta localizado no diretório root do phamm.
# Inicie o ldap (service ldap start) ou (service slapd start)
# Para o Fedora 12 em diante, você deve fazer o backward compatibility (mv /etc/openldap/slapd.d /etc/openldap/disabled)
# Popule as base conforme os ldifs fornecidos nos exemplos do phamm.
ldapadd -v -x -D "cn=admin,dc=example,dc=tld" -W -h localhost -f examples/ldif/sample-main.ldif
ldapadd -v -x -D "cn=admin,dc=example,dc=tld" -W -h localhost -f examples/ldif/sample-mail.ldif
# Tente acessar atraves de um browser o phamm no servidor acessando o diretorio /phamm no diretorio root do apache.
# Tente logar-se usando usuário admin com a senha que você criou.
# Neste momento você já deve poder criar dominios e contas de emails através do phamm, se não puder, comece tudo novamente pois existe algo de errado.
# OPCIONAL - Você pode instalar o phpldapadmin para visualizar seu diretorio ldap (yum install phpldapadmin) Atenção! Use o phpldapadmin somente para debug, ou seja, visualizar em detalhes sua base ldap. Nunca use o phpldapadmin para gerenciar as contas e dominíos de seu mail server, para isso, deixe o phamm fazer seu trabalho.
Postfix e Dovecot:
# Abaixo você encontra todos os arquivos de configuração que estão em produção em meu servidor, seus arquivos devem se parecer com os meus.
# Substitua seus arquivos originais pelos arquivos modelos, recomendo fazer download nos links abaixo ao invés de copiar e colar. Guarde sempre um backup de seus arquivos originais.
useradd vmail
cd /etc/postfix
postalias transport
postalias virtual
touch /var/log/dovecot-deliver-errors.log
touch /var/log/dovecot-deliver.log
chmod o+w /var/log/dovecot-deliver-errors.log
chmod o+w /var/log/dovecot-deliver.log
yum install dovecot-ldap
yum install dovecot-sieve
mkdir /home/vmail/bin
vi /home/vmail/bin/quota-warning.sh
chmod o+r /home/vmail/bin/quota-warning.sh
# No arquivo /etc/dovecot-ldap.conf Substitua os valores de DN e Senha para o dovecot ter acesso de leitura em sua base ldap
# No arquivo /etc/postfix/main.cf Substitua os valores para o postfix ter acesso de leitura em sua base ldap também.
# IMPORTANTE! - Ajuste o UID do usuario vmail de acordo com o seu sistema.
cp /etc/dovecot.conf /etc/dovecot-nowarning.conf
# Remova as seguintes linhas de /etc/dovecot-nowarning.conf
quota_warning = storage=80%% /home/vmail/bin/quota-warning.sh 80
quota_warning2 = storage=90%% /home/vmail/bin/quota-warning.sh 90
quota_warning3 = storage=100%% /home/vmail/bin/quota-warning.sh 100
Fazendo o Phamm deletar contas do disco e LDAP:
# Edite o arquivo /var/www/html/phamm/tools/cleaner.sh e ajuste as seguintes variáveis:
LDAP_BASE="o=hosting,dc=example,dc=tld"
admin="cn=admin"
SUFFIX="dc=example,dc=tld"
ROOTPW="sua-senha-aqui"
BINDDN="cn=admin,dc=example,dc=tld"
BINDPW="sua-senha-aqui"
# Em meu caso, tive que visualizar no phpldapadmin o atributo mailbox de meus usuários e editar/ajustar o script cleaner.sh manualmente. Veja abaixo meu exemplo:
{ print "rm -rf /home/vmail/" $2 > "'$OUTPUT'" }
# Você precisa ajustar o valor correto do atributo para o script conseguir apagar os arquivos nos paths corretos, se precisar edite também o arquivo: /var/www/html/admin/(ou phamm)/plugins/mail.xml. Esse é o arquivo chave que gera todos os atributos da conta quando criada no ldap.
# Agora copie esse script para /etc/cron.hourly
# O phamm apenas marca as contas, esse script que irá rodar a cada hora pelo cron ira efetivamente deletar as contas e arquivos do disco.
Ajustando os valores das Quotas:
# Substitua no arquivo /var/www/html/phamm/plugins/mail.xml o trecho, conforme o exemplo abaixo:
# Isso irá ajustar o valor de tamanho de quota default (Inicial) para 500MB de cada usuario novo criado.
# Observe que foi também deletado o caracter ( S ) do atributo suffix, e mudado o valor do multiplicador.
<attribute name="quota">
<prettyName>Quota</prettyName>
<table>1</table>
<default>500</default>
<multiplier>1024</multiplier>
<suffix></suffix>
<minAuthLevel>4</minAuthLevel>
</attribute>
# Ajuste também no arquivo mail.xml o diretorio default home dos seus usuarios corretamenta para seu sistema. (Procure a tag vdHome).
Mailscanner e SpamAssassin:
# Fazer o download em: http://www.mailscanner.info/downloads.html dos arquivos:
# MailScanner-4.79.11-1.rpm.tar
# install-Clam-SA-latest.tar
# Descompactar e executar o install.sh para o MailScanner e após realizar o
# mesmo procedimento para o pacote do install-Clam-SA.
# A instalação é bastante demorada, tenha paciência.
# Baixe o pacote unrar-3.7.8-2.fc9.i386.rpm e instale usando rpm -ivh unrar-3.7.8-2.fc9.i386.rpm. (Para o Fedora 12 existe outra versão do rar). Use o RPM pbone para encontrar seus pacotes rpm.
# Execute:
yum install perl-Mail-DKIM (satisfazendo todas as dependencias...)
chkconfig sendmail off
chkconfig postfix off
chkconfig MailScanner on
# Altere no arquivo /etc/postfix/main.cf a seguinte linha:
header_checks = regexp:/etc/postfix/header_checks
# Adicione no arquivo /etc/postfix/header_checks a seguinte linha: (Se você baixou meu arquivo, isso já existe, não faça duplicado)
/^Received:/ HOLD
# Altere no arquivo /etc/MailScanner/MailScanner.conf
Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix
# Crie a estrutura de diretorios abaixo obedecendo as permissões:
chown postfix.postfix /var/spool/MailScanner/incoming
chown postfix.postfix /var/spool/MailScanner/quarantine
chown postfix.postfix /var/spool/MailScanner/spamassassin
#As Permissoes e owners dos sub-diretorios /var/spool/MailScanner devem ser as abaixo:
drwxr-xr-x 9 postfix postfix 4096 Ago 10 18:09 incoming
drwxr-xr-x 4 postfix apache 4096 Ago 10 18:08 quarantine
drwxr-xr-x 2 postfix postfix 4096 Jul 28 17:55 spamassassin
# Ajuste o parametro no arquivo /etc/MailScanner/spam.assassin.prefs.conf
envelope_sender_header X-yoursite-MailScanner-From
# Execule: MailScanner --lint
# Execute em: /var/spool/MailScanner/incoming
chown -R postfix.postfix *
# Execule novamente: MailScanner --lint
# Observe que não podem haver erros, se observar erros, tente corrigir-los isoladamente.
# A atualização das definições de virus ocorrem automaticamente, observe que da primeira vez que rodar o comando MailScanner --lint ainda tera definições de virus antigas, isso deve ser corrigido automaticamente em 24h.
# Novamente, é hora de ajustar a hora e data do sistema com o comando date, caso esteja ainda errada.
Faça o download periodicamente de:
/usr/bin/wget -N http://www.peregrinehw.com/downloads/SpamAssassin/contrib/KAM.cf
# Instalando o arquivo baixadado em: (KAM.cf são rules adicionais, recomendo usar elas.)
/etc/mail/spamassassin/
# Atualizando o SpamAssassin:
sa-update -D
cp /usr/local/bin/sa-update /etc/cron.daily/
# Instalando o RAZOR:
# O Razor transforma um e-mail em um codigo, uma especie de md5sum, desta forma pode verificar se a mesma mensagem esta chegando em diversos servidores ao redor do planeta. Um mesmo e-mail chegando a diversos servidores ao mesmo tempo, certamente é um e-mail de spam de massa circulando pela internet.
# Para instalar o plugin do razor siga os passos:
# Efetue o download dos seguintes pacotes e descompacte:
# http://razor.sourceforge.net/
# razor-agents-sdk-2.07.tar.bz2
# razor-agents-2.84.tar.bz2
# tar xjvf razor*
# Primeiro para o razor-agents-sdk execute:
perl Makefile.PL
make
make test
make install
# Agora para o razor-agents execute:
perl Makefile.PL
make
make test
make install
# Agora execute:
razor-admin -create
# Note que o razor irá criar sua configuração em /root/.razor
# Tenha cuidado para não apagar esse diretorio nunca.
# Para testar faça:
touch /tmp/spam
spamassassin -t -D razor2 < /tmp/spam
# Confira atentamente se o razor esta ou nao sendo usado.
# Instalando o DCC
# Efetue o download de http://www.rhyolite.com/anti-spam/dcc/
# Descompacte e execute:
./configure e após make install.
# Agora, voce precisa rebootar o sistema para ver se a inicializacao dos daemons ocorre normalmente, e também verificar se tudo esta correndo bem até aqui. Envie e receba mensagens locais, teste seu sistema. Observe os logs de /var/mail/maillog para certificar-se que tudo esta funcionando corretamente.
ClamAV Daemon:
# Instale todos os pacotes, clamav, clamav-server e etc.
yum install clamav*
# Copie o arquivo e comente a linha: Example
cp /usr/share/doc/clamav-server-0.95.3/clamd.conf /etc
vi /etc/clamd.d/scan.conf
# Edite o arquivo, comente a linha: Example e adicione as seguintes configurações:
LocalSocket /tmp/clamd.socket
User root
# Inicie a daemom:
service clamd.scan start
# Coloque o clamav para inicialização automatica no boot:
chkconfig clamd.scan on
Mailwatch:
yum install mysql
yum install mysql-server (Fedora 12)
yum install php-gd
yum install php-mysql
chkconfig mysqld on
service mysqld start
/usr/bin/mysqladmin -u root password 'sua-senha-aqui'
# Baixe e Descompacte o mailwatch:
tar xvf mailwatch-1.0.5.tar
mysql -p < create.sql
mysql -p
GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY 'mail';
GRANT FILE ON *.* TO mailwatch@localhost IDENTIFIED BY 'mail';
FLUSH PRIVILEGES;
quit
# Edite o arquivo MailWatch.pm e mude:
my($db_user) = 'mailwatch';
my($db_pass) = 'mail';
# Copie o MailWatch.pm para /usr/lib/MailScanner/MailScanner/CustomFunctions/ Veja abaixo:
cp MailWatch.pm /usr/lib/MailScanner/MailScanner/CustomFunctions/
mysql mailscanner -u mailwatch -p
INSERT INTO users VALUES ('admin',md5('sua-senha-aqui'),'admin','A','0','0','0','0','0');
quit
# Mova o diretorio mailscanner para o root do httpd
mv mailscanner /var/www/html
cd /var/www/html
chown root:apache images
chmod ug+rwx images
chown root:apache images/cache
chmod ug+rwx images/cache
cp conf.php.example conf.php
# No arquivo conf.php:
# Ajuste a senha do mysql e usuário nos parametros DB_USER E DB_PASS
# Ajuste para True a opcao QUARANTINE_USE_FLAG
mv /root/mailwatch-1.0.5 /opt/
echo "/opt/mailwatch-1.0.5/tools/quarantine_maint.php --clean" > /etc/cron.daily/quarantine_maint.sh
chmod +x /etc/cron.daily/quarantine_maint.sh
# Modifique a primeira linha do script db_clean.php para:
# #!/usr/bin/php -q
cp /tools/db_clean.php /etc/cron.daily/
# Ajuste o parametro Virus Scanner = clamavmodule no arquivo MailScanner.conf (Use clamd para quando estiver usando a versao daemon do clamav conforme voce instalou/configurou acima.)
# Ajuste esses parametros no arquivo MailScanner.conf
Always Looked Up Last = &MailWatchLogging
Detailed Spam Report = yes
Quarantine Whole Message = yes
Quarantine Whole Message As Queue Files = no
Include Scores In SpamAssassin Report = yes
Quarantine User = root
Quarantine Group = apache (this should be the same group as your web server)
Quarantine Permissions = 0660
Detailed Spam Report = yes
Include Scores In SpamAssassin Report = yes
Always Include SpamAssassin Report = yes
Spam Actions = store header "X-Spam-Status: Yes" forward spamquarentena@meudominio.org.br
High Scoring Spam Actions = store header "X-Spam-Status: Yes" forward spamquarentena@meudominios.org.br
# Verifique novamente as permissoes do diretório /var/spool/MailScanner:
drwxr-xr-x 9 postfix postfix 4096 Ago 10 18:09 incoming
drwxr-xr-x 4 postfix apache 4096 Ago 10 18:08 quarantine
drwxr-xr-x 2 postfix postfix 4096 Jul 28 17:55 spamassassin
# Integrando a Whitelist e Blacklist do Mailscanner com o MailWatch:
Edite o arquivo: SQLBlackWhiteList.pm
Configure os seguintes valores:
my($db_user) = '<username>';
my($db_pass) = '<password>';
cp SQLBlackWhiteList.pm /usr/lib/MailScanner/MailScanner/CustomFunctions/
# Edite o MailScanner.conf e configure os valores abaixo:
Is Definitely Not Spam = &SQLWhitelist
Is Definitely Spam = &SQLBlacklist
Horde IMP Webmail:
# Baixe o horde de ftp://ftp.horde.org/pub/horde/
# Descompacte o tar xvf horde_lastest.tar
# Mova para /var/www/html/horde
cd /var/www/html
chown -R apache:apache horde
cd ./horde/config
for f in *.dist; do cp $f `basename $f .dist`; done
cd ../scripts/sql
vi create.mysql.sql (Altere somente o password)
mysql -u root -p < create.mysql.sql
# Instale os seguintes pacotes e suas dependencias
yum install php-imap
yum install php-domxml
yum install php-gettext
yum install php-xml
yum install php-pecl-imagick
yum install php-pear*
yum install php-pecl*
# Gere o conf.php a partir do horde, acese o horde com um browser:
http://your-server/horde/
Go to Adminstration => Setup => Horde
# Caso deseje testar sua instalação use a página de testes do horde abaixo:
http://your-server/horde/test.php
# Ajustando o PHP:
# vi /etc/php.ini
display_errors = On
file_uploads = On
upload_max_filesize = 5M (or your choice)
memory_limit = 128M or more to be able to send large email attachments
# Instalando o IMP (Webmail do Horde):
# Baixe o IMP, e descompacte.
# Mova o conteudo para: /var/www/html/horde/imp
# Dentro de /horde :
chown -R apache:apache imp
cd ./imp/config/
for foo in *.dist; do cp $foo `basename $foo .dist`; done
# Crie as databases
mysql -u root -p horde < imp.sql
yum install uw*
yum install php-tidy
yum install php-idn
# Para terminar a instalação você precisa gerar o arquivo de configuração do IMP.
# Gere o conf.php a partir do horde, acese o horde com um browser:
http://your-server/horde/
Go to Adminstration => Setup => Horde => IMP
#Configure em: /var/www/html/horde/imp/config/servers.php conforme o exemplo abaixo:
$servers['_prompt'] = array(
'name' => _("imap")
);
/* Example configurations: */
$servers['imap'] = array(
'name' => 'IMAP Server',
'server' => 'localhost',
'hordeauth' => false,
'protocol' => 'imap/notls',
'port' => 143,
'maildomain' => 'example.com',
'smtphost' => 'smtp.example.com',
'smtpport' => 25,
'realm' => '',
'preferred' => '',
);
#
# Para nãoo precisar autenticar-se 02 vezes (uma no horde e outra no IMP, leia atentamente abaixo e siga os passos:)
#
If you would prefer that your users authenticate directly with IMP,
without having to authenticate through Horde first, load the
``Administration/Setup/Authentication`` page and from the ``What backend
should we use for authenticating users to Horde`` pulldown menu select
``Let a Horde application handle authentication``. (Please see the
second note below.) Select ``imp`` from the ``The application which is
providing authentication`` pulldown menu.
Gnarwl LDAP Auto-reply para Férias:
Baixe o pacote de:
http://www.onyxbits.de/gnarwl
Descompacte: tar xvf gnarwl-3.6.tar
./configure
make
make install
make perm
# Edite o arquivo /etc/postfix/transport adicionando (Observe que em meus exemplos já existe essa entrada, não faça duplicado):
.autoreply gnarwl:
# Após:
postalias transport
# Edite o arquivo /etc/postfix/master.cf adicionando no final: (Observe que em meus exemplos já existe essa entrada, não faça duplicado):
gnarwl unix - n n - - pipe
flags=F user=vmail argv=/usr/local/bin/gnarwl -a ${user}@${nexthop} -s ${sender}
# Edite o arquivo: /usr/local/etc/gnarwl.cfg conforme o modelo:
map_sender $sender
map_receiver $recepient
map_subject $subject
map_field $begin vacationStart
map_field $end vacationEnd
map_field $fullname cn
map_field $deputy vacationForward
map_field $reply mail
server localhost
port 389
scope sub
login cn=phamm,o=hosting,dc=example,dc=tld
password sua-senha-aqui
protocol 0
base dc=example,dc=tld
queryfilter (&(mailAutoreply=$recepient)(vacationActive=TRUE))
result vacationInfo
mta /usr/sbin/sendmail -F $recepient -t $sender
blockfiles /usr/local/var/lib/gnarwl/block/
umask 0644
blockexpire 48
# mta /usr/sbin/sendmail -F $recepient
maxreceivers 64
maxheader 512
charset ISO8859-1
badheaders /usr/local/var/lib/gnarwl/badheaders.db
blacklist /usr/local/var/lib/gnarwl/blacklist.db
forceheader /usr/local/var/lib/gnarwl/header.txt
forcefooter /usr/local/var/lib/gnarwl/footer.txt
recvheader To Cc
loglevel 3
# Agora voce precisa ajustar corretamente as permissões de alguns arquivos e diretorios conforme abaixo:
/usr/local/etc
-rw------- 1 vmail vmail 848 Ago 19 17:55 gnarwl.cfg
/usr/local/bin
-rwxr-xr-x 1 vmail vmail 24040 Ago 19 16:31 gnarwl
**(Ajuste o Owner e Grupo vmail recursivo a todos os arquivos e sub-diretorios abaixo)
/usr/local/var/lib
drwxr-xr-x 4 vmail vmail 4096 Ago 19 16:31 gnarwl
# Dica de Teste:
Quando testar, observe que o gnarwl mantem uma database, e somente será enviada uma auto-resposta de férias para cada solicitação. Por exemplo, se chegarem varios email de uma mesma origem, somente será enviado apenas 01 email de auto-respota para aquele email de origem. |