Страница 1 из 1

что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:00
Gen1us2k
В общем. Стояла задача мониторить коннекты, и если их больше какого-то числа, то банить ип.
Был найден какой-то скрипт, который был с конфигом и прочим не нужным бредом.
Чуть чуть работы напильником, и он готов.
Суть проста. Определяет сколько коннектов с ипа, и если их больше, то лочит его.

Код: Выделить всё

#!/bin/sh
# Needed variables and 
IPT="/sbin/iptables"	# Iptables
NO_OF_CONNECTIONS=2	# How many connections define a bad IP? Indicate that here.
BAN_PERIOD=300		# Number of seconds the banned ip should remain in blacklist.

# Function for unbanning blacklisted ip.

unbanip()
{
	UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX`
	TMP_FILE=`mktemp /tmp/unban.XXXXXXXX`
	UNBAN_IP_LIST=`mktemp /tmp/unban.XXXXXXXX`
	echo '#!/bin/sh' > $UNBAN_SCRIPT
	echo "sleep $BAN_PERIOD" >> $UNBAN_SCRIPT
	while read line; do
		echo "$IPT -D INPUT -s $line -j DROP" >> $UNBAN_SCRIPT
		echo $line >> $UNBAN_IP_LIST
	done < $BANNED_IP_LIST
	echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPT
	echo "rm -f $UNBAN_IP_LIST" >> $UNBAN_SCRIPT
	echo "rm -f $TMP_FILE" >> $UNBAN_SCRIPT
	. $UNBAN_SCRIPT &
}

TMP_PREFIX='/tmp/ddos'
TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"
BANNED_IP_LIST=`$TMP_FILE`
BAD_IP_LIST=`$TMP_FILE`
netstat -ntu | grep '^[AP]' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
cat $BAD_IP_LIST
IP_BAN_NOW=0
while read line; do
	CURR_LINE_CONN=$(echo $line | cut -d" " -f1)
	CURR_LINE_IP=$(echo $line | cut -d" " -f2)
	if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then
		break
	fi
	IP_BAN_NOW=1
	echo $CURR_LINE_IP >> $BANNED_IP_LIST
	$IPT -I INPUT -s $CURR_LINE_IP -j DROP
done < $BAD_IP_LIST
if [ $IP_BAN_NOW -eq 1 ]; then
	unbanip
fi
rm -f $TMP_PREFIX.*

Re: что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:08
Raven
Gen1us2k
*COOL*

Re: что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:08
Infernal Flame
Отлично! Примем на вооружение %)

Re: что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:10
Gen1us2k
ах да.
NO_OF_CONNECTIONS=2 # How many connections define a bad IP? Indicate that here.
BAN_PERIOD=300 # Number of seconds the banned ip should remain in blacklist.

тут выставьте %) когда тестил, то, где больше 2х коннектов он рубил

Re: что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:11
Infernal Flame
Gen1us2k
ну читать-то умеем ;) не переживай %)

Re: что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:21
Gen1us2k
Ну вы то да. а вот за других не особо уверен %)

Re: что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:35
Gen1us2k
ой. греп другой %) Старая не много вариация скрипта.
grep -v '^[AP]' вырезает первые 2 строки нетстата

Re: что то вроде AntiDDOS

Добавлено: 27 июл 2011, 14:39
Raven
Gen1us2k
Во! Чуть фуфел не впарил *LOL*