O objetivo deste documento é apresentar uma maneira simples e rápida de instalar um sistema anti-spam em um servidor rodando SUSE 10.0. Pressupõe-se que o leitor:
A configuração descrita abaixo foi implantada em uma empresa para qual presto consultoria, e faz parte de uma configuração mais geral documentada em "Anti-Spam em SUSE 10.0". No primeiro documento é demonstrado o processo de configuração do servidor Linux com Postfix que recebe as mensagens externas e encaminha para o servidor Exchange 5.5 na rede interna.
O resultado deste trabalho está em operação desde Janeiro/2006.
Para reduzir a quantidade de e-mail indesejados entrantes, criamos uma tabela no Postfix que lista os usuários permitidos para receber. Ou seja, quando o servidor de e-mail remoto envia o comando "RCPT TO", o Postfix automaticamente consulta a tabela relay_recipients. Se o destinatário não existir na tabela, é retornado um erro imediatamente negando a mensagem.
O processo de criação da tabela consiste na extração da lista de usuários no Exchange, exportação do arquivo via SCP para o servidor do Postfix, e execução do comando de geração da tabela de usuários. Caso um determinado e-mail exista no Exchange, mas não desejamos que este receba e-mails externos, basta adicionar este endereço no arquivo /home/exchupdate/exclude-users.txt no servidor Linux.
Precisamos criar alguns arquivos e scripts para coletar a lista de e-mails cadastrados no Exchange e enviá-la para o Linux.
Obj-Class <tab> E-mail Addresses <tab> Secondary-Proxy-Addresses
[Export] DirectoryService=EXCHSRV Basepoint=/o=My Fake Company ExportObject=Recipients InformationLevel=Minimal BasepointOnly=No RawMode=No HiddenObjects=Yes Subcontainers=No CodePage=0 ; 09 = TAB ColumnSeparator=09 ; 37 = % MVSeparator=37 ; 34 = " QuoteCharacter=34
@echo off c: cd \postfix del exchusers.* copy exportfields.txt exchusers.txt \exchsrvr\bin\admin /e exchusers.txt /n /o userexport.ini pscp -P 1044 -2 -i exchupdate.ppk exchusers.txt exchupdate@spamsrv:/home/exchupdate plink -P 1044 -2 -i exchupdate.ppk echupdate@spamsrv "sudo /home/exchupdate/rebuild-relay-recips %USERNAME%"
Não execute nada agora. O script runexport.bat irá gerar o arquivo exchusers.txt que deverá ser exportado para o servidor através de cópia via SSH. Para isso começamos criando a chave de encriptação, de forma a não precisarmos autenticar na hora da conexão.
puttygen.exe -> SSH2 RSA Key -> Generate -> (mova o mouse) -> (comentário) "Exchange User Update Key" -> (SEM SENHA) -> Save Public Key -> exchupdate.pub -> Save Private Key -> exchangeupdate.ppk
No servidor com Postfix, começamos criando um usuário exchupdate (com uma senha ALEATÓRIA), que, por segurança será utilizado somente para a cópia da base de usuários. Copiamos o arquivo exchupdate.pub do Windows para o Linux em /home/exchupdate, executamos os seguintes comandos:
cd /home/exchupdate mkdir .ssh chmod 700 .ssh ssh-keygen -i -f exchupdate.pub > .ssh/authorized_keys2 chmod 400 .ssh/authorized_keys2 chown -R exchupdate.users .ssh rm -f exchupdate.pub
Para permitir a execução remota do comando de atualização, precisamos instalar o sudo, e adicionar a linha exchupdate ALL=NOPASSWD:/home/exchupdate/rebuild-relay-recips ao arquivo /etc/sudoers. Não esqueça de adicionar o usuário ao AllowUsers do arquivo /etc/ssh/sshd_config.
Agora, no diretório /home/exchupdate criamos os arquivos necessários para rodar o script de conversão do formato importado para o utilizável.
ALL = relay_recipients.db all: $(ALL) OPTS=--domain=myfakedomain.fake --exclude=exclude-users.txt relay_recipients : exchusers.txt exclude-users.txt <tab> ./parse-exchange-users $< exchusers.txt > $@ <tab> ./notify-sync $(REMOTE_USER) %.db : % <tab> postmap $*
cd /home/exchupdate REMOTE_USER=$1 make relay_recipients.db
#!/bin/bash
recips="postmaster@myfakedomain.fake
for r in $recips; do
echo "Exchange users sync at $(date) by $REMOTE_USER" | mail -s "** Exchange sync **" $r
done
Por fim, asseguramos que nada estranho possa acontecer com eles, e preparamos os arquivos necessários:
cd /home/exchupdate touch exclude-users.txt chown root.root Makefile exclude-users.txt parse-exchange-users rebuild-relay-recips chmod 600 Makefile exclude-users.txt chmod 711 parse-exchange-users rebuild-relay-recips notify-sync touch /etc/postfix/relay_recipients touch /etc/postfix/relay_recipients.db ln -sf /etc/postfix/relay_recipients ln -sf /etc/postfix/relay_recipients.db
Voltado ao servidor Windows, executamos então o script runexport.bat. Na primeira vez que fizermos isso, é perguntado se queremos salvar a chave do servidor, e dizemos sim (para não perguntar novamente).
Execute a primeira vez e cheque se tudo ocorreu sem problemas.
Para que o script runexport.bat execute regularmente, agendamos uma tarefa para ele no "Scheduled Tasks" do próprio Windows. No nosso caso, a tarefa foi agendada para executar todos os dias às 02:00. Confira! Se não as bases não sincronizam, e alguns usuários poderão não receber e-mail.
O Postfix já sabe que estamos restringindo os usuários apenas aos conhecidos, mas não custa nada confirmar.
POSTFIX_ADD_RELAY_RECIPIENT_MAPS="hash:/etc/postfix/relay_recipients"
Após a concluir a configuração do Postfix e garantir que a lista está sendo corretamente atualizada, basta reiniciar o Postfix e tentar enviar uma mensagem.
Não esqueça de agendar o script de sincronização no Task Scheduler do Windows, se não você vai precisar executá-lo manualmente de tempos em tempos.
Mauricio Teixeira <mteixeira:at:webset:dot:net>
Início... - Mauricio Teixeira - Atualizado em: Thu Apr 20 15:20:06 2006