All pastes #507390 Raw Edit

Untitled

public text v1 · immutable
·published 2007-05-24 15:03 UTC
rendered paste body
#!/bin/bash
# Script para filtrar hosts que realizan continuos
# intentos fallidos de conexion SSH
# Autor: Genghis Rios
# Fecha: 17/07/2005
## Adaptacion para Debian/Ubuntu: Gonzalo Alvarez Flores
## Fecha: 22/05/2007

# Numero maximo de logins fallidos
nmax=5
# Email de reporte
email="grios@pucp.edu.pe mcsalced@pucp.edu.pe gonzalo.alvarez@pucp.edu.pe"

# Analizando intentos de conexion ilegales en /var/log/secure
grep "Failed password" /var/log/auth.log > /tmp/tempo_ids_ssh_$$.1

if [ $? -ne 0 ]
then
 # Nada por hacer
  rm -f /tmp/tempo_ids_ssh_$$.1
  exit
fi

# Palabra clave a buscar en el archivo
palabra="invalid user"
# Direcciones IP con logeos invalidos de usuarios inexistentes
cat /tmp/tempo_ids_ssh_$$.1 | grep "${palabra}" | tr -s " " | cut -f 13 -d " " > /tmp/tempo_ids_ssh_$$.2
# Direcciones IP con logeos invalidos de usuarios existentes
cat /tmp/tempo_ids_ssh_$$.1 | grep -v "${palabra}" | tr -s " " | cut -f 11 -d" " >> /tmp/tempo_ids_ssh_$$.2

# Analizando direcciones IP con logeos invalidos
# Primera columna: Numero de intentos
# Segunda columna: Direccion IP
while read x
do
 # Direccion IP
 host=$(echo $x | awk -F" " '{ print $2}' | cut -f4 -d:)
 # Direccion IP formateada para ser usada con el comando grep
 hostgrep=$(echo $host | sed "s/\./\\\./g")
 # Numero de intentos
 ntry=$(echo $x | awk -F" " '{ print $1}')

 # Verificando que no haya sido previamente filtrado
 /sbin/iptables -nL | grep -w $hostgrep > /dev/null
 test=$?
 # Filtrar si no ha sido filtrado y si ha superado el limite de intentos
 if [ $test -ne 0  -a  $ntry -ge $nmax ]
 then
  # Filtrando IP
  /sbin/iptables -A INPUT -s $host -j DROP
  # Salvando la regla de filtrado
  /sbin/iptables-save > /root/iptables_rules
  # Enviando notificacion
                                                                                                                                           1,1        cat << EOFX | mail -s "$(hostname): Ataque SSH desde $host !!!" ${email}

En el servidor $(hostname) se detecto un ataque de
intento de ingreso SSH desde el host ${host}.
El host ${host} ha sido filtrado automaticamente.
Se anexa informacion del ISP asociado para la denuncia:

-------------------------------------------------------
$(/usr/bin/whois ${host})
-------------------------------------------------------
EOFX
 fi
done << EOFY
$(cat /tmp/tempo_ids_ssh_$$.2 | sort -rn | uniq -c)
EOFY

# Borrando temporales
rm -f /tmp/tempo_ids_ssh_$$.*