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.035 ]

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

Desbravando o mundo do Software Livre

Como desabilitar RAID 1

Como explicar o que é kernel para um leigo

Leitura recomendada

Backup em HDs da rede

KeepAlive para conexão discada (ou não)

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

Colocado o "Motion" na inicialização do Ubuntu 7.04

Redundância de links - Mon + Shell Script

  
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