Ajuda a escrever script de servidor para banir IP's de uma lista

0

Eu tenho um VPS que uso como um servidor openvpn e web. Por algum motivo, meus arquivos de log do Apache são preenchidos com milhares dessas tentativas de invasão:

"POST /xmlrpc.php HTTP / 1.0" 404 395

Essas tentativas de ataque ocupam 90% dos meus registros. Eu acho que é uma vulnerabilidade do WordPress que eles estão procurando. Obviamente, eles não são bem sucedidos (eu nem tenho Wordpress no meu servidor), mas é chato e, provavelmente, o consumo de recursos também. Eu estou tentando escrever um script bash que fará o seguinte:

  1. Pesquise os logs do apache e capture os IPs ofensivos (mesmo que eles tentem uma vez),
  2. classificá-los em uma lista com cada IP exclusivo em uma linha separada,
  3. E, em seguida, bloqueie-os usando as regras da tabela IP.

Eu sou um newb bash, e até agora meu script faz tudo, exceto o passo 3. Eu posso bloquear manualmente o IP, mas isso é tedioso e, além disso, este é o Linux e é perfeitamente capaz de fazer isso por mim. Eu também quero que o script seja personalizável para que eu (ou qualquer outra pessoa que queira usá-lo) possa alterar as variáveis de acordo com qualquer situação com a qual eu possa lidar no futuro. Aqui está o script até agora:

#!/bin/bash
##IP LIST GENERATOR
##Author Chev Young
##Script to search Apache logs and list IP's based on custom filters
##
##Define our variables:
DIRECT=~/Script ##Location of script&where to put results/temp files
LOGFILE=/var/log/apache2/access.log ## Logfile to search for offenders
TEMPLIST=xml_temp ## Temporary file name
IP_LIST=ipstoban ## Name of results file
FILTER1=xmlrpc ## What are we looking for? (Requests we want to ban)
cd $DIRECT
if [ ! -f $TEMPLIST ];then touch $TEMPLIST ##Create temp file
fi
cat $LOGFILE | grep $FILTER1 >> $DIRECT/$TEMPLIST ## Only interested in the IP's, so:
sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$//' -e t -e d $DIRECT/$TEMPLIST | sort | uniq > $DIRECT/$IP_LIST
rm $TEMPLIST ## Clean temp file
echo "Done. Results located at $DIRECT/$IP_LIST"

Então, eu preciso de ajuda com a próxima parte do script, que deve proibir o IP (entrada e talvez saída também) do arquivo $ IP_LIST resultante. Eu não me importo se ele utiliza UFW ou IPTables diretamente, desde que bane os IP's. Eu provavelmente iria executá-lo como uma tarefa cron. O que estou tendo problemas é entender como usar a linha do arquivo de resultado como uma variável separada para fazer algo como:

ufw nega $ IP1 $ IP2 $ IP3, ect

Alguma ideia? Obrigado.

    
por Chev_603 02.06.2014 / 20:39

1 resposta

0

Se você instalar corretamente o fail2ban, não há necessidade do script acima. Assim que o atacante tentar n vezes, eles serão banidos durante o tempo que você definir na configuração.

    
por brad sanders 02.06.2014 / 22:47