Antispam em Shell Script

O funcionamento do esquema proposto neste artigo não pretende ser a melhor forma de bloquear emails indesejáveis, existem melhores opções para isto. Serve para exemplificar o poder do shell script junto com ferramentas do sistema normalmente encontradas na maioria das distribuições Linux.

[ Hits: 20.630 ]

Por: Jorge Alberto Corso em 02/02/2009


Bloqueando automaticamente remetentes dos emails



Preparação dos arquivos emails_bloqueados.txt e emails_permitidos.txt.

Estes arquivos serão lidos pelos shell scripts linha a linha, então para bloquear ou permitir um determinado email edite o arquivo e acrescente em uma linha o email completo ou parte dele para o fim desejado, basta uma parte pois essa informação servirá como fonte de pesquisa para as regras do procmail que funcionam como expressão regulares.

Exemplos:

Arquivo: emails_bloqueados.txt

alice@propaganda.com.br
best@bestsell.com
modelo@modelo.com.au
@viagra
com.jp
microsoft

Com os dados acima o destinatário não receberá os emails enviados pelos remetentes: alice@propaganda.com.br, best@bestsell.com, modelo@modelo.com.au. Também não receberá nenhum email que possua "@viagra", "com.jp" ou "microsoft" em sua composição.

Arquivo: emails_permitidos.txt

vivaolinux.com.br
@brlinux.org.br
amigo@amigo.com.br
familia@uol.com.br

Com os dados acima o destinatário receberá os emails enviados pelos remetentes: amigo@amigo.com.br e familia@uol.com.br, também receberá emails que possuam na sua composição "vivaolinux.com.br" ou "@brlinux.org.br".

Após a execução dos shell scripts estas listas serão ordenadas em ordem alfabética.

O shell script gera_emails_bloqueados.sh (os números no começo das linhas servem apenas como referência):

1  #!/bin/bash
2  #
3  # remover o arquivo atual de emails bloqueados
4  rm -f ./bloqueados.rc
5  #
6  # comando for para ler linha a linha o arquivo emails_bloqueados.txt
7  # e para cada linha lida acrescentar 4 novas linhas no arquivo
8  # bloqueados.rc
9  # Atenção para as crases que envolvem o comando cat
10  # não confundir com aspas simples.
11  for i in `cat ./emails_bloqueados.txt`
12  do
13          echo ":0" >> ./bloqueados.rc
14          echo "* ^FROM.*$i" >> ./bloqueados.rc
15          echo "/dev/null" >> ./bloqueados.rc
16          echo "" >> ./bloqueados.rc
17  done
18  # Apos todas as regras de emails bloqueados se a analise chegar
19  # nas linhas abaixo indica que o destinatário do email não se
20  # encontra nas listas de emails_permitidos e emails_bloqueados
21  # então
22  # um email de aviso de bloqueio para próximos
23  # emails sera enviado para o remetente e o email atual ira para o seu
24  # destino.
25  #
26  # Faz uma copia do email para o arquivo temporário
27  # email_bloqueado.tmp para poder extrair o email do remetente
28  # com o comando formail no shell script gera_emails_bloqueados.sh
29  echo "" >> ./bloqueados.rc
30  echo ":0 wc" >> ./bloqueados.rc
31  echo "*" >> ./bloqueados.rc
32  echo "./email_bloqueado.tmp" >> ./bloqueados.rc
33  echo "" >> ./bloqueados.rc
34  #
35  # Envia o email atual para a caixa postal do seu destino
36  echo ":0 wc" >> ./bloqueados.rc
37  echo "*" >> ./bloqueados.rc
38  echo "/var/mail/destino" >> ./bloqueados.rc
39  echo "" >> ./bloqueados.rc
40  #
41  # Executa o shell script gera_email_retorno.sh para enviar o email
42  # de aviso para o remetente que o email dele esta bloqueado
43  # para este destinatário.
44  echo ":0 fwc" >> ./bloqueados.rc
45  echo "*" >> ./bloqueados.rc
46  echo "|~/gera_email_retorno.sh" >> ./bloqueados.rc
47  echo "" >> ./bloqueados.rc
48  #
49  # Como ultima regra deixa preparado para executar esse próprio
50  # shell script (gera_emails_bloqueados.sh) para o próximo email em
51  # que o remetente não se encontrar nas listas de emails permitidos
52  # e bloqueados.
53  echo ":0 fw" >> ./bloqueados.rc
54  echo "*" >> ./bloqueados.rc
55  echo "|~/gera_emails_bloqueados.sh" >> ./bloqueados.rc

Na linha 38 deve-se trocar o local "/var/mail/destino" para o local e nome de arquivo onde está a caixa postal do destinatário, por exemplo, os emails que recebo ficam armazenados no arquivo de nome "jorge" no diretório "/var/mail", então deveria ficar "/var/mail/jorge".

O shell script gera_email_retorno.sh (os números no começo das linhas servem apenas como referência):

1  #!/bin/bash
2  #
3  # Extrai o remetente do email armazenando na variável DE do arquivo temporário
4  # email_bloqueado.tmp criado pelo shell script gera_emails_bloqueados.sh com o
5  # conteúdo do email enviado. Atenção que o comando formail esta envolvido
6  # com crase e não com aspas simples (apostrofo).
7  DE=`formail -rt -zxTo: < ./email_bloqueado.tmp`
8  #
9  # Faz o mesmo que o comando acima, extraindo o destinatário ao invés do
10  # remetente.
11  PARA=`formail -xTo: < ./email_bloqueado.tmp`
12  #
13  # O mesmo que o comando acima, extraindo o assunto.
14  ASSUNTO=`formail -xSubject: < ./email_bloqueado.tmp`
15  #
16  # Armazena na variável TEXTO o corpo do email que sera enviado
17  TEXTO="O email enviado para $PARA com o assunto $ASSUNTO, foi entregue ao seu destino, porem "
18  #
19  # Continua montando o corpo do email acrescentando o conteúdo do arquivo
20  # msg.txt, para isto utilizo o comando cat. Atenção são crases que envolvem
21  # o comando cat e não ha espaço apos $TEXTO.
22  TEXTO=$TEXTO`cat msg.txt`
23  #
24  # O & (e comercial) eh a preparação para a formatação da URL que estará como
25  # link no corpo do email. A mensagem deste email solicita o acesso a um site
26  # que ao ser acessado envia automaticamente solicitando o desbloqueio deste
27  # remetente do arquivo de emails_bloqueados.txt
28  TEXTO=$TEXTO$DE'&i_dest=seu_email@dominio'
29  #
30  # O comando abaixo inclui o email do remetente no arquivo de emails_bloqueados.txt
31  echo $DE >> ./emails_bloqueados.txt
32  #
33  # Envia o email para o remetente.
34  echo $TEXTO | mail -s "Email bloqueado !" $DE
35  #
36  # Exclui o arquivo temporário.
37  rm -f ./email_bloqueado.tmp

Na linha 28 deve-se trocar para o seu email após o sinal de igual, esta informação é básica para o programa PHP enviar novo email para você decidir se irá desbloquear o remetente do email bloqueado ou não.

O conteúdo do arquivo "msg.txt" citado na linha 22 é:

Seu email foi bloqueado para as próximas mensagens.
Favor acessar o link indicado e siga as Instruções para desbloqueá-lo em definitivo.
http://www.seusite.com.br/email_desbloqueio.php?i_email=

A URL na última linha do arquivo msg.txt será completada dentro do shell script gera_email_retorno.sh, por isto ela termina com o sinal de igual. O programa em PHP que estará na site utilizará das variáveis i_email e i_dest para enviar o email.

O programa PHP (os números no começo das linhas servem apenas como referência):

1  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2  <html>
3  <head>
4  <title>Desbloqueio de Emails</title>
5  </head>
6  
7  <?php
8  $form["dest"] = $HTTP_GET_VARS["i_dest"];
9  $form["novo_email"] = $HTTP_GET_VARS["i_email"];
10  ?>
11       <table align='center'>
12                          <tr>
13                                  <td colspan=2>Para evitar os emails indesejaveis criamos uma lista com os emails permitidos e outra com os emails bloqueados.
14                                  </td>
15                          </tr>
16                          <tr colspan=2>
17                                  <td>Os emails que nao estao nas listas sao enviados aos seus respectivos destinatarios, porem sao incluidos na lista de emails bloqueados.
18                                  </td>
19                          </tr>
20                          <tr>
21                                  <td>Com o acesso a esta pagina foi solicitado que o email <?=$form["novo_email"]?> seja incluido na lista de emails permitidos.
22                                  </td>
23                          </tr>
24                          <tr>
25                                  <td>Cabera ao destinatario que receber essa solicitacao incluir o remetente na lista de emails permitidos,
26                                  </td>
27                          </tr>
28                          <tr>
29                                  <td>enquanto isto nao for feito o email estara automaticamente bloqueado.
30                                  </td>
31                          </tr>
32       </table>
33  <?php
34          /* recipients */
35  //        $to  = "desbloqueio@tum.com.br";
36          $to  = $form["dest"];
37
38          /* subject */
39          $subject = "Acrescentar este mail na lista de permitidos -".$form["novo_email"];
40          /* message */
41          $message = $form["novo_email"]; //.$novoarq;
42  //        $mensagem = str_replace(";",",",$message);
43          /* To send HTML mail, you can set the Content-type header. */
44          $headers  = "MIME-Version: 1.0\n";
45          $headers .= "Content-type: text/html; charset=iso-8859-1\n";
46          /* additional headers */
47          $headers .= "From: TUM - CPD  <cpd.uniao@tum.com.br>\n";
48          /*
49          $headers .= "Cc: birthdayarchive@example.com\r\n";
50          $headers .= "Bcc: birthdaycheck@example.com\r\n";
51          */
52          /* and now mail it */
53          mail($to, $subject, $message, $headers);
54  ?>
55  </body>
56  </html>

Feito isto, estão prontas as atividades para incluir automaticamente um email no arquivo de emails_bloqueados.txt.

Na próxima seção veremos como desbloquear um email, eliminando-o do arquivo de emails_bloqueados.txt e acrescentando-o no arquivo emails_permitidos.txt.

Página anterior     Próxima página

Páginas do artigo
   1. Funcionamento
   2. Bloqueando automaticamente remetentes dos emails
   3. Desbloqueando email
Outros artigos deste autor

Como desabilitar RAID 1

Como explicar o que é kernel para um leigo

Desbravando o mundo do Software Livre

Leitura recomendada

Impressora PDF via Samba para estações Windows

Fazendo backup do seu MySQL com API do Dropbox

Como Configurar seu Lucent Winmodem

Configurando OpenSSH no Windows Server 2003 para autenticação por chave (sem senha)

NetProfiler - Um solução para quem passeia por várias redes

  
Comentários
[1] Comentário enviado por robsonsbrasil em 16/09/2009 - 13:46h

Amigo no caso dos usuários que fazem uso do outlook como seria esse bloqueio e inclusão?
Abraços


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts