bash, perl, python и прочие интерпретируемые скрипты
Модератор: Gen1us2k
-
Gen1us2k
- Модератор
- Сообщения: 771
- Зарегистрирован: 02 мар 2010, 16:13
Сообщение
Gen1us2k » 27 июл 2011, 14:00
В общем. Стояла задача мониторить коннекты, и если их больше какого-то числа, то банить ип.
Был найден какой-то скрипт, который был с конфигом и прочим не нужным бредом.
Чуть чуть работы напильником, и он готов.
Суть проста. Определяет сколько коннектов с ипа, и если их больше, то лочит его.
Код: Выделить всё
#!/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.*
Home: Windows Heaven
Home: Debian 6
For Servers: Debian || RHEL Based || Gentoo || FreeBSD
Gen1us2k
-
Raven
- Бородатый сис
- Сообщения: 2800
- Зарегистрирован: 03 мар 2010, 15:12
- ОС: RHEL 8
- Откуда: Из серверной
Сообщение
Raven » 27 июл 2011, 14:08
Gen1us2k
Я не злопамятный, я просто часто ковыряю логи
Raven
-
Infernal Flame
- Злой Модер
- Сообщения: 1796
- Зарегистрирован: 03 мар 2010, 11:25
- ОС: Centos 7
-
Контактная информация:
Сообщение
Infernal Flame » 27 июл 2011, 14:08
Отлично! Примем на вооружение
Work: Centos 7 х 'all Servers'
Infernal Flame
-
Gen1us2k
- Модератор
- Сообщения: 771
- Зарегистрирован: 02 мар 2010, 16:13
Сообщение
Gen1us2k » 27 июл 2011, 14:10
ах да.
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х коннектов он рубил
Home: Windows Heaven
Home: Debian 6
For Servers: Debian || RHEL Based || Gentoo || FreeBSD
Gen1us2k
-
Infernal Flame
- Злой Модер
- Сообщения: 1796
- Зарегистрирован: 03 мар 2010, 11:25
- ОС: Centos 7
-
Контактная информация:
Сообщение
Infernal Flame » 27 июл 2011, 14:11
Gen1us2k
ну читать-то умеем
не переживай
Work: Centos 7 х 'all Servers'
Infernal Flame
-
Gen1us2k
- Модератор
- Сообщения: 771
- Зарегистрирован: 02 мар 2010, 16:13
Сообщение
Gen1us2k » 27 июл 2011, 14:21
Ну вы то да. а вот за других не особо уверен
Home: Windows Heaven
Home: Debian 6
For Servers: Debian || RHEL Based || Gentoo || FreeBSD
Gen1us2k
-
Gen1us2k
- Модератор
- Сообщения: 771
- Зарегистрирован: 02 мар 2010, 16:13
Сообщение
Gen1us2k » 27 июл 2011, 14:35
ой. греп другой
Старая не много вариация скрипта.
grep -v '^[AP]' вырезает первые 2 строки нетстата
Home: Windows Heaven
Home: Debian 6
For Servers: Debian || RHEL Based || Gentoo || FreeBSD
Gen1us2k
-
Raven
- Бородатый сис
- Сообщения: 2800
- Зарегистрирован: 03 мар 2010, 15:12
- ОС: RHEL 8
- Откуда: Из серверной
Сообщение
Raven » 27 июл 2011, 14:39
Gen1us2k
Во! Чуть фуфел не впарил
Я не злопамятный, я просто часто ковыряю логи
Raven