TCPDump или как защиться от DDoSа

Автор: wmd Дата: 22.03.2010 01:03 Уважаемые, помогите пожалуйста ...
Задача: каждые 15 мин анализировать активность на 21 порту сетевого интерфейса (карты)
и автоматически банить все ip, активность которых слишком высока ...

берём tcpdump
анализируем 1000 пакетов

tcpdump -v -n -w /var/log/tcpdump.log dst port 21 -c 1000

потом анализируем дамп

tcpdump -nr /var/log/tcpdump.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn

получаем список в котором количество подключений и ip ...

94 94.41.154.251
54 109.167.128.15
51 109.194.238.124
48 85.141.73.158
42 79.139.255.104
38 95.175.237.51
38 93.125.17.141
36 95.131.212.86
36 93.157.148.44
36 90.151.159.210
35 109.194.90.31
33 95.28.190.127
32 95.221.44.199
32 93.85.26.132
32 87.119.232.176

этот запрос можно перенаправить в файл, ну тупо дописав в конце > /var/log/123.txt

а потом убить все скриптом

#!/bin/bash
BLOCKDB="/var/log/123.txt"
IPS=$(grep -Ev "^#" $BLOCKDB-)
for i in $IPS
do
iptables -A INPUT -s $i -j DROP

так ... а теперь вот это всё нужно автоматизировать ... т.е. написать скрипт, который будет запускать дамп,
потом его анализировать и баннить сам ... каждые 15 мин ...
+ в 123.txt нужно записывать не все ip, а только те с которых число подключений привышает ну 10 скажем ...

помогите пожалуйста реализовать эту задачу в виде скрипта!)
заранее, спасибо!
Re: TCPDump или как защиться от DDoSа 22.03.2010 06:27Eraserus #crontab -e
*/15 * * * * /usr/sbin/script_log.sh
script_log.sh:
!#/bin/bash
/usr/sbin/tcpdump -v -n -w /var/log/tcpdump.log dst port 21 -c 1000
/usr/sbin/tcpdump -nr /var/log/tcpdump.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn  > /var/log/123.txt
BLOCKDB="/var/log/123.txt" 
IPS=$(grep -Ev "^#" $BLOCKD 
for i in $IPS 
do 
iptables -A INPUT -s $i -j DROP


не вижу проблем
Re: TCPDump или как защиться от DDoSа 22.03.2010 07:30wmd спасибо!
может я что-то упустил,
но проблема заключается в том, что
нужно записывать в 123.txt не все ip, а только те с которых число
подключений привышает некоторое значение ...
таким скриптом мы убиваем всё, что попало в список ...

но эти вот убить надо (первое число, до пробела - число подключений)
94 94.41.154.251
54 109.167.128.15
51 109.194.238.124
48 85.141.73.158
42 79.139.255.104
38 95.175.237.51

а вот такие, которые меньше 10 раз пытались подключиться, не надо

1 95.175.237.57
5 85.141.73.160

и как банить с помощью iptables не совсем, а именно подключения на 21 порт,
т.е. чтобы на фтп человек не мог стучаться, а на сайт зайти мог всё же)
Re: TCPDump или как защиться от DDoSа 22.03.2010 15:11Eraserus здесь очевидно необходима вторичная обработка еще одним скриптом который уберет из списка то что пыталось подключится менее 10 раз... самый легкий вариант на мой взгляд php скрипт, конкретно сейчас мне лень этим заняться, но если в ближайшее время желание появится, то могу накидать примерный вид скрипта...
Re: TCPDump или как защиться от DDoSа 22.03.2010 15:16Eraserus > и как банить с помощью iptables не совсем, а
> именно подключения на 21 порт,

do 
iptables -A INPUT -s $i -p tcp -m tcp --dport 21 -j DROP


странно, что еще не вылез большой анди не послал в ман ))) хотя для порядку наверно надо было бы )
Re: TCPDump или как защиться от DDoSа 22.03.2010 15:27wmd не, ну с php я справлюсь и сам)
я думал просто можно это сделать именно bash-скриптом без участия чего-то стороннего)
всё равно, спасибо большое!)
Re: TCPDump или как защиться от DDoSа 23.03.2010 03:19wmd если кому интересно, ничего лишнего не надо)) достаточно почитать про awk ))

/usr/sbin/tcpdump -nr /var/log/tcpdump.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn |awk '$1>10 {print $2}' > /var/log/123.txt
Re: TCPDump или как защиться от DDoSа 24.03.2010 02:54wmd хех, продолжение темы)) не работает почему-то, не понимаю Мозги набекрень

crontab -e
*/15 * * * * /usr/sbin/antihammer.sh

antihammer.sh

!#/bin/bash
/usr/sbin/tcpdump -v -n -w /var/log/tcpdump.log dst port 21 -c 1000
/usr/sbin/tcpdump -nr /var/log/tcpdump.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn |awk '$1>50 {print $2}' > /var/log/ipban.txt
BLOCKDB="/var/log/ipban.txt"
IPS=$( grep -Ev "^#" $BLOCKDB )
for i in $IPS
do
iptables -A INPUT -s $i -p tcp -m tcp --dport 21 -j DROP
done
iptables -nL > /path/to/http/dir/ipban.txt

вот скрипт, если просто запустить всё работает нормально, ip с которых более 50 подключений заносятся в бан
но, если этот же скрипт запускается из cron'a вот эта часть не выполняется((
BLOCKDB="/var/log/ipban.txt" 
IPS=$( grep -Ev "^#" $BLOCKDB )
for i in $IPS 
do 
iptables -A INPUT -s $i -p tcp -m tcp --dport 21 -j DROP
done
iptables -nL > /path/to/http/dir/ipban.txt


пробовал запускать из cron'a в отдельном screen'е ...

*/15 * * * * screen -d -m /usr/sbin/antihammer.sh

результат тот же, вторая часть скрипта не выполняется(

в чём может быть проблема, подскажите пожалуйста! )
Re: TCPDump или как защиться от DDoSа 24.03.2010 09:28god1986 Подскажите плиз, не могу понять как использовать в tcpdump ключ -C.
Пишу tcpdump -i eth0 -C 10 | tee /root/a , все должно было ограничиться 10 байтами а оно фигачет до бесконечности.Может кто модет подсказать синтаксис.
Re: TCPDump или как защиться от DDoSа 24.03.2010 12:08god1986 вопрос снят,проблему решил
Re: TCPDump или как защиться от DDoSа 24.03.2010 14:36wmd Господа, ну подскажите, в чём же дело у меня может быть, почему из крона не выполяется скрипт полностью?
Я уже не знаю даже куда копать Грустный
Re: TCPDump или как защиться от DDoSа 24.03.2010 16:06aboris IMHO, дело может быть в правах на файлы/каталоги. Под кем запускаете руками и под кем скрипт работает из-под cron'а?
Re: TCPDump или как защиться от DDoSа 24.03.2010 16:14wmd под рутом руками
из под крона вроде тоже

*/15 * * * * root /usr/sbin/antihammer.sh
Re: TCPDump или как защиться от DDoSа 25.03.2010 11:11Eraserus
iptables


в скриптах запускаемых по крону крайне рекомендую писать полный путь до исполняемых файлов...
RSS-материал