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.
Parte 3: Desbloqueando email
O shell script gera_emails_permitidos.sh (os números no começo das linhas servem apenas como referência):
Na linha 75 altere o "seu_mail@seudominio.com.br" para o seu email.
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
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.
Abraços