SSH ochrana před roboty
Z Wiki UnArt Slavičín
Aby se ve scriptu dalo dobře číst, tak jsem jej ještě trošku upravil. Stačí, když všechny bloky vložíte do jednoho skriptu a necháte jej provádět pomocí cronu třeba každých 15 minut. Taky jsem právě upravil takovou malou drobnost, aby script poslal e-mail, jen když blokuje nějakou IP adresu.
Ještě pro ty stroje, které používají Shorewall a nebo při každém restartu serveru načíst blokované IP ze souboru block_ip.
Nezapomeňte si vytvořit adresář /var/log/auth, který je potřeba pro běh skriptu.
#!/bin/bash
DIR="var/log"
DAY=`date |awk '{print $1}'`
FILE="auth_$DAY.log"
EMAIL="muj@mail.cz"
POKUS=10
# uklid na zacatek rm -f /$DIR/auth/$FILE touch /$DIR/auth/tmp
# zaloha auth.log cat /$DIR/auth.log >> /$DIR/auth/$FILE rm -f /$DIR/auth.log touch /$DIR/auth.log
# unikatni IP ze souboru + pridani do block_ip
grep "Invalid user" /$DIR/auth/$FILE |awk '{print $10}' |uniq > /$DIR/auth/tmp;
cat /$DIR/auth/tmp >> /$DIR/auth/block_ip
# blokovani nalezenych IP
SIZE=`wc -l /$DIR/auth/tmp |awk '{print $1}'`;
SIZE=`expr $SIZE + 1`;
I=1
while test $I -lt $SIZE
do
IP=`sed -n "$I"p /$DIR/auth/tmp`;
I=`expr $I + 1`;
POCET=`cat /$DIR/auth/$FILE |grep $IP |wc -l |awk '{print $1}'`;
if [ $POCET -gt $POKUS ] ; then
iptables -A INPUT -s $IP -j DROP
ATTACK=1
fi
done
#mail
if [ $ATTACK -eq 1 ] ; then
cat /$DIR/auth/tmp |mail -s "Blokovane IP" $EMAIL
fi