Archive

Archive for the ‘postfix’ Category

Masoquismo virtual 101 : mantendo lixo fora de sua caixa-postal (the cheap way)

October 28th, 2007 11 comments

Com exceção das pessoas que não estão ligadas a área de tecnlogia e, por isso, para as quais não consigo explicar o que faço, a maioria absoluta das pessoas com as quais comento sobre o fato de eu gostar de lidar com implantação e configuração de servidores de e-mail me acham no mínimo ligeiramente lesado mentalmente.

Eu posso entender o que elas sentem. Hoje em dia, com serviços de múltiplos gigabytes de espaço sendo oferecidos gratuitamente (caramba, mais de 4GB no Gmail é um bom espaço só para mensagens), a utilização cada vez maior de webmails e a complexidade de se manter um servidor de e-mail próprio saudável devido as inúmeras pragas virtuais que se propagam como, bem … pragas, ninguém em sã consciência optaria por manter seu próprio servidor de e-mails.

Isso pode ser material para análise futura, quando quiserem identificar quando meus problemas mentais começaram a me afetar de forma mais intensa, mas eu tenho que dizer : eu mantenho meu próprio servidor de e-mails. E, pasmem, eu me divirto fazendo isso. Na verdade, estava dias desses mesmo pensando sobre como diminuir meus gastos com hospedagem de meu servidor virtual, mas quando cheguei a conclusão de que teria que abrir mão de ter meu próprio servidor de e-mails, tive que adiar a decisão para um futuro distante, lá para perto da época em que eu tiver que fazer a renovação de meu plano de hospedagem, só no próximo ano.

Uma das coisas mais interessantes em manter servidores de e-mails (eu mantenho alguns além do meu próprio, principalmente servidores de diversos clientes) é ter que sempre se atualizar para estar por dentro das técnicas e ferramentas que podem ser utilizadas para combater a sempre crescente mania de malucos que acham que você está interessado em adquirir viagra diariamente tem de tentar lhe convencer a comprar alguma coisa inútil.

Uma das formais mais fáceis e eficientes (por enquanto, isso pode mudar rápido) de se evitar receber muito lixo virtual é usando alguma solução de greylisting, em adição a outras técnicas de combate a lixo eletrônico circulando via e-mail.

A técnica de greylisting se aproveita do fato de que uma grande parcela dos spammers não tentam reenviar as mensagens após a primeira tentativa de envio ter gerado uma falha de entrega. Logicamente, eles vão aprender a fazer isso mais cedo ou mais tarde e alguns com menor índice de dislexia mental já aprenderam. Mas, até que a maioria aprenda, é um boa técnica que, em meu caso, chega a evitar que eu sequer repasse spam legítimo para meu sistema antispam checar, o que também auxilia na economia de recursos de processamento e memória.

Como utilizo o famoso MTA Postfix, utilizo também uma solução que se integra facilmente ao mesmo : o Postgrey, sendo executado como um servidor de políticas.

A teoria é simples : o Postgrey fica em execução constantemente como um daemon, ouvindo em uma porta TCP local específica, através da qual o Postfix irá se comunicar com o mesmo. Sempre que uma mensagem nova chegar, antes de decidir entregá-la, o Postfix irá consultar o Postgrey, que irá checar se a mensagem pode ou não ser entregue. Para isso, ele pode checar sua whitelist própria (o que lhe permite excluir servidores ou endereços de destinatários dessa checagem) ou verificar se o destinatário já recebeu alguma mensagem do remetente ou do servidor remoto em questão.

Caso o mesmo já tenho recebido, o Postgrey não rejeita a mensagem e a devolve para o Postfix, para que o mesmo possa fazer o que for necessário com a mesma : geralmente entregá-la ao usuário final, mas, dependendo de como seu servidor está configurado, também seria possível repassá-la a qualquer outro sistema antispam que você possua já configurado (o meu caso).

Caso seja a primeira vez que a mensagem em questão esteja sendo recebida do remetente ou do servidor remoto em questão, a mensagem é temporariamente rejeitada. Mas a rejeição se dá devido ao Postfix responder com um código de retorno do protocolo SMTP que indica que a mensagem foi rejeitada temporariamente e não permanemtemente.

Para qualquer MTA minimamente bem configurado, isso signifca : ok, o servidor na outra ponta parece estar impossibilitado de receber minhas mensagens neste exato momento, então depois tento novamente. E, logicamente, quando a nova tentativa é feita, a mensagem é aceita. Lógico, você pode configurar o tempo necessário para aceitar uma nova tentativa, de forma que somente após esse tempo passado a mensagem seja aceita. Geralmente, são utilizados apenas alguns minutos (5 minutos, por exemplo), o que não implica em um atraso tão grande na entrega das mensagens e, mesmo assim, esse atraso só acontece no primeiro envio.

Ok, explicada a utilidade, vamos botar a mão na massa. Antes de mais nada, instale o Postgrey em seu servidor de e-mails baseado no Postfix. Não vou citar aqui como fazê-lo porque cada Unix ou mesmo cada distribuição Linux possui sua própria forma de instalação de software, mas posso citar que, usando Debian, o software está apenas a um aptitude de distância.

Software instalado e o daemon em execução (o que é o padrão após a instalação do pacote Debian), nos resta apenas configurar a integração do Postfix com o mesmo. Para isso, simplesmente vamos inserir a chamada ao uso do Postgrey como um servidor de políticas como um dos valores do parâmetro smtpd_recipient_restrictions no arquivo de configuração principal do Postfix, o main.cf (em Debian, ficam em /etc/postfix/main.cf).

Mnha configuração básica para esse parâmetro era a seguinte :

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Após a inserção do parâmetro para a integração com o Postgrey, esse parâmetro ficou da seguinte forma :

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_policy_service inet:127.0.0.1:60000, reject_unauth_destination

Por último, simplesmente fiz um reload no Postfix para que a nova configuração passasse a ser válida :

# postfix reload

Pronto! Deste ponto em diante, todas as mensagens que chegaram em seu servidor passaram pela checagem feita pelo Postgrey, a solucáo de greylisting pela qual eu optei. Venho usando o Postgrey há mais de um ano e meio com sucesso e posso dizer que, empiricamente falando, algo entre 80% e 90% dos spam legítimos são parados por esse sistema antes mesmo de meu servidor ter que gastar ciclos de processador e memória tentando checar esse lixo todo para classificá-lo como spam.

O que vocês acharam deste post ? Devo começar a postar conteúdo mais técnico como esse ou devo me ater estritamente ao formato anterior do blog, com análise de diversos acontecimentos ocorridos na cena de software livre mundial e expressar minha opinião sobre os mesmos ? Você, leitor, é o chefe. O que manda ?

Categories: DebianBR, postfix, postgrey, tips Tags: