Ensinando seu servidor a ler emails e liberar acesso SSH
Esta solução baseia-se em um programa que recebe emails via console e os armazena em forma de arquivos de texto, um programa que envia emails via console e um script shell que trata os emails com base em algumas instruções pré-estabelecidas, sendo executado a cada 5 minutos.
Parte 4: Configurando o servidor para "LER" os emails
Agora vem a parte insana, colocar o servidor para interpretar os e-mails.
# vim /bin/cmdemail.sh
Importante: um usuário não conseguira executar o iptables, por isso é preciso adicionar a seguinte linha ao arquivo "sudoers":
# echo usuario ALL = NOPASSWD: /usr/sbin/iptables >> /etc/sudoers
# vim /bin/cmdemail.sh
#!/bin/bash
# Script cmdemail.sh v 1.0
# Por Kernel Panic <kernelpanic@hush.com>
#
# Palavra chave que será checada no campo Assunto(Subject):
# Muita Atenção nesta etapa porque deverá ser exatamente
# igual para funcionar.
##################################################
MAGICSUBJECT="IN A WORLD NO FENCES WHO NEED GATES"
##################################################
# Local onde estão os e-mails recebidos
EMAILDIR="/home/usuário/.getmail"
# Caminho do iptables
IPTABLES="/usr/sbin/iptables"
# Interface externa (internet)
IFNET="eth1"
# Palavra que estará no corpo do e-mail para
# indicar o ip a ser liberado.
IPLIB="ABRIR"
# Arquivo de log
LOG="/home/usuario/.getmail/log"
# chama o programa Getmail para receber os e-mails
/usr/bin/getmail --quiet
# Inicio do Processamento
for i in $EMAILDIR/new/*;
do
# Verifica os arquivos de e-mail em busca do Assunto "MAGICSUBJECT" para processar os comandos.
if grep -qs "$MAGICSUBJECT" $i;
# Apos encontrar o e-mail com o assunto "MAGICSUBJECT" inicia o processamento.
then
# Extrai o e-mail do remetente do campo "From"
EMAILREM=$(cat $i | grep From: | sed -e 's/.\+<//' -e 's/>.*//')
# Extrai o IP a ser liberado para acesso remoto
# o corpo do e-mail devera conter ABRIR: 201.202.203.204
# ou o que for definido na variável IPLIB.
IP=$(cat $i | awk '/'$IPLIB':/ {print $2}' | egrep "(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))$" | tail -n 1)
# Libera o ip para acessar via SSH
sudo $IPTABLES -A INPUT -s $IP -i $IFNET -p tcp -m tcp --dport 22 -j ACCEPT
# Log
echo "cmdemail: IP: $IP | REMETENTE: $EMAILREM | Data: `date `" >> $LOG
# Envia e-mail para o remetente
echo -e "Comando efetuado com sucesso.\nIP $IP liberado para acesso" > $EMAILTMP/email.txt
email -q -s "Comando Processado Com Sucesso" $EMAILREM < $EMAILDIR/tmp/email.txt
# Move os e-mails já processados
ARQ=$(basename $i)
mv $i $EMAILDIR/cur/$ARQ.PROCESSADO
# Todo arquivo de e-mail que não apresentar o Assunto "MAGICSUBJECT" sera movido.
else
if [ -f "$i" ]; then mv $i $EMAILDIR/tmp/$ARQ.RECUSADO ; fi
fi
done
# Script cmdemail.sh v 1.0
# Por Kernel Panic <kernelpanic@hush.com>
#
# Palavra chave que será checada no campo Assunto(Subject):
# Muita Atenção nesta etapa porque deverá ser exatamente
# igual para funcionar.
##################################################
MAGICSUBJECT="IN A WORLD NO FENCES WHO NEED GATES"
##################################################
# Local onde estão os e-mails recebidos
EMAILDIR="/home/usuário/.getmail"
# Caminho do iptables
IPTABLES="/usr/sbin/iptables"
# Interface externa (internet)
IFNET="eth1"
# Palavra que estará no corpo do e-mail para
# indicar o ip a ser liberado.
IPLIB="ABRIR"
# Arquivo de log
LOG="/home/usuario/.getmail/log"
# chama o programa Getmail para receber os e-mails
/usr/bin/getmail --quiet
# Inicio do Processamento
for i in $EMAILDIR/new/*;
do
# Verifica os arquivos de e-mail em busca do Assunto "MAGICSUBJECT" para processar os comandos.
if grep -qs "$MAGICSUBJECT" $i;
# Apos encontrar o e-mail com o assunto "MAGICSUBJECT" inicia o processamento.
then
# Extrai o e-mail do remetente do campo "From"
EMAILREM=$(cat $i | grep From: | sed -e 's/.\+<//' -e 's/>.*//')
# Extrai o IP a ser liberado para acesso remoto
# o corpo do e-mail devera conter ABRIR: 201.202.203.204
# ou o que for definido na variável IPLIB.
IP=$(cat $i | awk '/'$IPLIB':/ {print $2}' | egrep "(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))$" | tail -n 1)
# Libera o ip para acessar via SSH
sudo $IPTABLES -A INPUT -s $IP -i $IFNET -p tcp -m tcp --dport 22 -j ACCEPT
# Log
echo "cmdemail: IP: $IP | REMETENTE: $EMAILREM | Data: `date `" >> $LOG
# Envia e-mail para o remetente
echo -e "Comando efetuado com sucesso.\nIP $IP liberado para acesso" > $EMAILTMP/email.txt
email -q -s "Comando Processado Com Sucesso" $EMAILREM < $EMAILDIR/tmp/email.txt
# Move os e-mails já processados
ARQ=$(basename $i)
mv $i $EMAILDIR/cur/$ARQ.PROCESSADO
# Todo arquivo de e-mail que não apresentar o Assunto "MAGICSUBJECT" sera movido.
else
if [ -f "$i" ]; then mv $i $EMAILDIR/tmp/$ARQ.RECUSADO ; fi
fi
done
Importante: um usuário não conseguira executar o iptables, por isso é preciso adicionar a seguinte linha ao arquivo "sudoers":
# echo usuario ALL = NOPASSWD: /usr/sbin/iptables >> /etc/sudoers
Só fiquei preocupado em dar os direitos a todos os usuários a rodar o iptables no /etc/sudoers... mas dá-se um jeito ;)
Abraços e parabéns!