SSH-bangere

Jeg har fått et par henvendelser om jeg kan legge ut scriptet jeg bruker til å detektere brute-force angrep mot SSH på kvarteret.

Filen /usr/local/sbin/bangers.sh

#!/bin/bash

#Funksjon for å hente ut tvilsom
#aktivitet fra en logfil (/var/log/auth.log)
getbangers(){
cat $1 $1.0 |grep ".*sshd.*(Invalid|Illegal|Failed).*" |
sed -e 's/:[0-9][0-9] .*from//' |
sed -e 's/ port.*//' |
uniq -c |
sed -e 's/^[[:space:]]*[0-3] [A-Z][a-z]{2} [0-9]{2}.*//' |
sed -e 's/^.*:[0-9]{2} //' |
sort |
uniq
}

Dersom funkjsonen over ga output på mer enn to linjer
if [ $(getbangers $1|wc -l) -ge 2 ]
then
echo -n "Følgende IPer har forsøkt å logge seg inn"
echo " mer enn 4 ganger i minuttet:"

#for hver mistenkelig ip
getbangers $1|while read ip
do
#Hopp til neste IP dersom denne er en tom streng
[ "$ip" = "" ] && continue
#Henter ut antall forsøk fra denne IP'en
attempts="$(grep "$ip" $1|wc -l)"

#Hopp til neste dersom vi ikke finner IP'en i loggen
[ $attempts -eq 0 ] && continue

#Sjekk om det har blitt sendt mail om denne før
touch /var/log/bangerlog
grep $ip /var/log/bangerlog 2>&1 >/dev/null && continue
#Lagre ip'en
echo $ip >>/var/log/bangerlog
echo "============ $ip =============="
host $ip
echo -e "Attempts: $attemptsn"
echo "first:"
#Henter ut de første 2 forsøkene
grep "$ip" $1|head -n 2
echo "last:"
#Henter ut de siste 2 forsøkene
grep "$ip" $1|tail -n 2
#Forsøker å hente ut abuse-info om IPen
echo -e "nAbuse-info:n"
whois $ip|grep -i abuse|grep -v "^%"
done
fi

Filen /etc/cron.daily/bangers.sh

#!/bin/bash
/usr/local/sbin/bangers.sh /var/log/auth.log |
mail dinepostadresse@dinisp.no -s
"ssh-bangers `date +%Y-%m-%d`"