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: 19.990 ]

Por: Jorge Alberto Corso em 02/02/2009


Desbloqueando email



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

1  #!/bin/bash
2  #
3  # Prepara a variável LOCAL com o local e o nome do arquivo onde sao
4  # armazenados os emails
5  #DIRET=`pwd`
6  #LOCAL="/var/mail/"
7  #LOCAL=$LOCAL`echo $DIRET | cut -f3 -d"/"`
8  #
9  # Se preferir pode indicar diretamente a variável.
10  LOCAL="/var/mail/seuemail"
11  #
12  # Coloca na variável NE linha que contem o email enviado pelo programa PHP
13  NE=`formail -xSubject: < ./novo_email.tmp`
14  #
15  # Variável NOVOEMAIL terá apenas o email que devera sair do arquivo
16  # emails_bloqueados.txt e ser acrescentado no arquivo
17  # emails_permitidos.txt. Atenção apos o sinal de igual e o ultimo caractere
18  # são crases e não aspas simples.
19  NOVOEMAIL=`echo $NE | cut -f2 -d"-"`
20  #
21  # Acrescenta o email que sera desbloqueado no arquivo emails_bloqueados.txt
22  # duplicando o mesmo neste arquivo, visto que no shell script
23  # gera_email_retorno.sh ele já havia sido acrescentado. Isto e necessário
24  # pois iremos usar o comando uniq dentro do arquivo.
25  echo $NOVOEMAIL | sed -e "s/]//"  >> ./emails_bloqueados.txt
26  #
27  # Acrescente o email no arquivo de emails_permitidos.txt
28  echo $NOVOEMAIL | sed -e "s/]//"  >> ./emails_permitidos.txt
29  #
30  # Cria o arquivo temporário emails_bloqueados.tmp com o conteúdo do arquivo
31  # emails_bloqueados.txt em ordem alfabética.
32  sort ./emails_bloqueados.txt > ./emails_bloqueados.tmp
33  #
34  # O comando uniq com a opção -u seleciona apenas as linhas não repetidas no
35  # arquivo. Observe que a saída do comando eh direcionada para um novo arquivo
36  # emails_bloqueados.txt, visto que utilizados o redirecionador > (apenas um)
37  # e não o duplo (>>).
38  uniq -u ./emails_bloqueados.tmp > ./emails_bloqueados.txt
39  #
40  # Em seguida apagamos o arquivo temporário.
41  rm ./emails_bloqueados.tmp
42  #
43  # Fazemos o mesmo como arquivo emails_permitidos
44  sort ./emails_permitidos.txt > ./emails_permitidos.tmp
45  uniq -u ./emails_permitidos.tmp > ./emails_permitidos.txt
46  #
47  # Apagamos os arquivo temporários.
48  rm -f ./emails_permitidos.tmp
49  rm -f ./novo_email.tmp
50  #
51  # Abaixo as regras que permitirão acrescentar o email no arquivo
52  # emails_permitidos.txt.
53  #
54  # Ao receber um email gerado pelo programa PHP o destinatário deve encaminhar
55  # o email para ele mesmo, deste modo a regra abaixo procura pelo assunto do
56  # email "Acrescentar este mail na lista de permitidos" com as letras Fwd:
57  # antes, o que difere este email do original enviado pelo programa PHP.
58  # Observe a letra c da regra do procmail ":0 fwc" ela faz com que seja
59  # gerada uma copia do email e que continue verificando as regras seguintes.
60  echo ":0 fwc" > ./permitidos.rc
61  echo "* Subject.*Fwd: Acrescentar este mail na lista de permitidos" >> ./permitidos.rc
62  echo "./novo_email.tmp" >> ./permitidos.rc
63  echo "" >> ./permitidos.rc
64  #
65  # A regra abaixo, se atendida, executa o shell script gera_emails_permitidos.sh
66  echo ":0 fw" >> ./permitidos.rc
67  echo "* Subject.*Fwd: Acrescentar este mail na lista de permitidos" >> ./permitidos.rc
68  echo "| gera_emails_permitidos.sh" >> ./permitidos.rc
69  echo "" >> ./permitidos.rc
70  echo ":0" >> ./permitidos.rc
71  #
72  # A regra abaixo elimina emails que possuem o remetente igual ao seu
73  # destinatário. Serve para os spammers que mascaram o remetente do seu spam
74  # para ser o mesmo do destinatário.
75  echo "* ^FROM.*seu_mail@seudominio.com.br" >> ./permitidos.rc
76  echo "/dev/null" >> ./permitidos.rc
77  echo "" >> ./permitidos.rc
78  #
79  # Abaixo rotina de loop (comando for) que ira criar uma regra para cada linha
80  # do arquivo emails_permitidos.txt
81  for i in `cat ./emails_permitidos.txt`
82  do
83          echo ":0" >> ./permitidos.rc
84          echo "* ^FROM.*$i" >> ./permitidos.rc
85          echo "$LOCAL" >> ./permitidos.rc
86          echo "" >> ./permitidos.rc
87  done

Na linha 75 altere o "seu_mail@seudominio.com.br" para o seu email.

Conclusão

Espero que estas informações sirvam de exemplo para a utilização do shell script, bem como as outras ferramentas utilizadas, nada de opções avançadas foram utilizadas, demonstrando que com simples comandos é possível criar sistemas com funcionalidades adequadas para cada um.

Página anterior    

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

Como desabilitar RAID 1

Desbravando o mundo do Software Livre

Como explicar o que é kernel para um leigo

Leitura recomendada

Redundância de links - Mon + Shell Script

Incrementando seus scripts com dialog

XML de NF-e ou CT-e ou MDF-e - Como validar usando os pacotes de esquemas do Governo

Terminal Didático - Shell Script via WEB (PHP + Bootstrap)

Enviando mensagens para usuários da rede

  
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