SSH ochrana před roboty: Porovnání verzí
Bez shrnutí editace |
Bez shrnutí editace |
||
| Řádek 44: | Řádek 44: | ||
fi | fi | ||
done | done | ||
#mail | #mail | ||
if [ $ATTACK -eq 1 ] ; then | if [ $ATTACK -eq 1 ] ; then | ||
Verze z 11. 5. 2008, 06:52
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.
Dneska jsem zjistil, že skript není až tak dobrý, jak se zdálo. Selhala funkce uniq, který má vyfiltrovat duplicitní položky. Zdá se, že uniq funguje pouze tehdy, když jsou ty IP adresy za sebou. Dneska na mé servery útočily 2 roboti zároveň a tím pádem se po vykonání skriptu přidalo do firewallu asi 20 pravidel (stejných). Dále musí skript ještě testovat, zda adresáře a soubory existují a když ne, tak je musí vytvořit. Takže zatím počkejte s aplikací na Vaše stroje, skript se bude ještě upravovat.
#!/bin/bash
DIR="var/log"
DAY=`date |awk '{print $1}'`
FILE="auth_$DAY.log"
EMAIL="info@lepsiweb.cz"
MAXLOG=10
# testovani na zacatek
if [ ! -e /$DIR/auth ] ; then
mkdir /$DIR/auth
fi
if [ -e /$DIR/auth/tmp ] ; then
touch /$DIR/auth/tmp
fi
# unikatni IP ze souboru + pridani do block_ip (jen pokud jsou nove zaznamy)
if [ -s /$DIR/auth.log ] ; then
grep "Invalid user" /$DIR/auth.log |awk '{print $10}' |uniq > /$DIR/auth/tmp;
cat /$DIR/auth.log >> /$DIR/auth/$FILE
rm -f /$DIR/auth.log
touch /$DIR/auth.log
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
ATTACK=0
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 $MAXLOG ] ; 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
rm - /$DIR/auth/tmp
fi