sasha2002 Blog's

Just another blog from admin's

Скрипт на bash против http флуда —

Скрипт на bash против http флуда контент-граберами, loic …

Создаем в /root два файла:

1) ban.sh с правами 755:

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/etc/apf
LOG="/root/ban.log"
WHITE_IP="/root/white.IP"
LIMIT=$1
cp -f $WHITE_IP /tmp/~ban.white
echo $2 | tr ',' '\n' >> /tmp/~ban.white
netstat -nt | grep tcp | grep -v ffff | grep ":80" | awk {'print $5'} | cut -d: -f 1 | sort | uniq -c | sort -rk 1 > /tmp/~ban.con
for ip in `cat /tmp/~ban.con | awk '{print $2}'` ; do
if [ `grep "$ip" /tmp/~ban.con | awk '{print $1}'` "-gt" "$LIMIT" ]
then
if [ ! `grep $ip /tmp/~ban.white` ] then
iptables -I INPUT -s $ip -j DROP
/etc/init.d/iptables save
echo "`date +%s` `grep $ip /tmp/~ban.con | awk '{print $1}'` $ip" >> $LOG
echo "`date +%s` `grep $ip /tmp/~ban.con | awk '{print $1}'` $ip"
fi
fi
done
rm -f /tmp/~ban.*

2) white.IP куда пишем 127.0.0.1 и адреса, которые не надо проверять. По одному в строку

Проверить, что iptables запущен и имеет цепочку INPUT:

iptables -nL

Если цепочку нету, то создаем:

iptables -N INPUT

Запуск кроном:
(crontab -e, из под рута)
*/5 * * * * sh /root/ban.sh 10

Каждые 5 минут проверка на не больше 10 коннектов

Посмотреть забаненые:

iptables -nL

Посмотреть количество текущих соединений с каждого IP можно командой:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Общее количество текущих подключений к серверу:

netstat -nt|grep ESTAB|wc -l


Categorised as: Linux

Comments are disabled on this post


Comments are closed.