RSFDrive.com

Разное => Архив форума => Тема начата: Hattak от Марта 21, 2010, 21:52:05

Название: Нужна помощь знатаков linux )))
Отправлено: Hattak от Марта 21, 2010, 21:52:05
Уважаемые, помогите пожалуйста ...
Задача: каждые 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 скажем ...

Помогайте, нароооод!!!  
Название: Нужна помощь знатаков linux )))
Отправлено: Hattak от Марта 21, 2010, 22:05:45
банить желательно не совсем, а только на 21 порт)))
Название: Нужна помощь знатаков linux )))
Отправлено: Glider от Марта 22, 2010, 01:07:26
Ммм, что-то вроде анти-хаммеринга в виндовом фтп сервере  интересно, что ответят на linuxforum.ru, там линуксоиды водятся
Название: Нужна помощь знатаков linux )))
Отправлено: Hattak от Марта 22, 2010, 01:11:45
ну да, именно ... потому как убевают эти ***** vsftpd этими запросами
Название: Нужна помощь знатаков linux )))
Отправлено: Capitan от Марта 22, 2010, 13:57:01
 Ну можно например так:
все это в один скрипт и засунуть и запускать по крону
#!/bin/sh - тут первая команда,тут вторая,тут содержимое того скрипта
обозвать всё это ну например:kill_pidorases.sh
положить куда нибудь, например в /usr/local/bin
и прописать в кроне в то есть в /etc/crontab
скрипт конечно сделать исполняемым. chmod +x kill_pidorases.sh
после того как прописали в кроне, перестартовать его. /etc/init.d/cron restart
чтобы он обновленный конфиг подцепил



А вообще меня тут небыло я белый и пушистый и ничего не советовал ,   а то те на кого его напустят на меня напустят толстого северного зверька  Мнето всёравно но эфир засоряет однако.
Название: Нужна помощь знатаков linux )))
Отправлено: Hattak от Марта 22, 2010, 15:36:01
#crontab -e
*/15 * * * * /usr/sbin/anti_hammering.sh

anti_hammering.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 -p tcp -m tcp --dport 21 -j DROP

это понятно))
тут проблема в том, чтобы именно на языке bash-скрипта
выделить из общего списка - 123.txt
тех, чья активность очень высокая ...
т.е.

этих вот убить надо (первое число, до пробела - число подключений)
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

вот вопрос в чём ... очень не хочется ещё отдельный скрипт писать на perl или php
для обработки этого 123.txt файла)
Название: Нужна помощь знатаков linux )))
Отправлено: Capitan от Марта 22, 2010, 19:27:03
Это опять таки я со своими глупыми предложениями

sed или awk не пробовал?
это такие проги в униксах, можно использовать в скриптах,а может и на шелле справится там надо выделять первое число, сравнить с 10, мне писал один товарищь эт когда прога выводила список треков на двд, и чтобы стал воспроизводиться самый длинный.Но эт так к слову пришлось может кто и поумнее посоветует что.  
Название: Нужна помощь знатаков linux )))
Отправлено: Hattak от Марта 22, 2010, 20:11:52
Цитата: Capitan
Это опять таки я со своими глупыми предложениями

sed или awk не пробовал?
это такие проги в униксах, можно использовать в скриптах,а может и на шелле справится там надо выделять первое число, сравнить с 10, мне писал один товарищь эт когда прога выводила список треков на двд, и чтобы стал воспроизводиться самый длинный.Но эт так к слову пришлось может кто и поумнее посоветует что.

ну как ты видишь, я awk и так использую)) ... awk '{print $3}' ... но я не сильно в этом шарю)) если подскажешь как имено выделить и сравнить с её помощью, буду очень благодарен)
Название: Нужна помощь знатаков linux )))
Отправлено: Capitan от Марта 22, 2010, 20:26:17
выделить с помощью sed я так думаю, а сравнить вроде бы можно и в баше обрезать строку по первый пробел с помощью sed в общем если скрипту скормить вот эти строки типа 54 109.167.128.15 то в скрипте сделать скажем echo $1 то выдаст на stdout только число соединений то есть найти как в баше сравнить числа. и сравнивать $1 с нужным номером а вообще имхо на перле все это пишут понимаешь руками я это всё на автомате а вот объяснить  

ладно вот скрипту даем строку типа 54 109.167.128.15 заметь после номера соединений - пробел так что скрипт будет считать что первое число это аргумент 1 а второе - два вот как сравнение на баше

if [ $1 = 10] ; then
делаем что-то
else
а то вот так
fi

хотя не уверен это с цифрами или строками....в общем man bash

например echo $(2+3)) даст на stdout цифру 5
вот.
if (($1<100)) ; then
убиваем_юзера
fi

в общем скармливаеш скрипту весь список по одной строке ну который ты приводишь а дальше

or i in $ляляля
do то_что_я_написал $1


ну даже не знаю как объяснить

надо отрезать от строки только то что до пробела и пусть это будет переменная например $numba, а далее if (($numba<100); then как отрезать глянь sed а то получится что скрипт будет для каждой строки вызываться
Название: Нужна помощь знатаков linux )))
Отправлено: Hattak от Марта 23, 2010, 08:29:18
почитал, всё оказалось щё проще)))

/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  
Название: Нужна помощь знатаков linux )))
Отправлено: Capitan от Марта 23, 2010, 09:51:52
Цитата: Hattak
почитал, всё оказалось щё проще)))

/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  


Ну можно и так в конце концов как поётся в одной немецкой комедии ; Важнее всего результат.Работает и ладно.
Только нафиг нужен этот временный файл ?Не print $2 а сразу прибить $2.или print $2 && прибить $2 - для отладки, чтобы на экран выводило список смертников.Вобщем я в таких случаях пользуюсь правилом противодиверсионного спецназа ,как говорится:Мы народ простой. Предупредительный выстрел в голову и шесть контрольных в затылок и желательно переодически откапывать труп для проверки не ожил ли.  Короче лучше перебдеть чем недобдеть.
Название: Нужна помощь знатаков linux )))
Отправлено: Hattak от Марта 23, 2010, 11:02:43
список мне на экране не нужен, т.к. это будет автоматически работать в кроне без меня))
тут просто рогатая задумка, этот список будет общедоступным, чтобы народ мог зайти на сайт, так как баниться будет только ftp и посмотреть не стали ли они счастливчиками) чтоб можно было провести напутственную беседу на тему, как нехорошо досить сервак и потом разбанить)))
хотя может просто отдельный список выводить по iptables -nL и всё)))
Название: Нужна помощь знатаков linux )))
Отправлено: Capitan от Марта 23, 2010, 11:22:09
Цитата: Hattak
список мне на экране не нужен, т.к. это будет автоматически работать в кроне без меня))
тут просто рогатая задумка, этот список будет общедоступным, чтобы народ мог зайти на сайт, так как баниться будет только ftp и посмотреть не стали ли они счастливчиками) чтоб можно было провести напутственную беседу на тему, как нехорошо досить сервак и потом разбанить)))
хотя может просто отдельный список выводить по iptables -nL и всё)))

ок тогда гаси тему раз решена