RSFDrive.com
Разное => Архив форума => Тема начата: 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 скажем ...
Помогайте, нароооод!!!
-
банить желательно не совсем, а только на 21 порт)))
-
Ммм, что-то вроде анти-хаммеринга в виндовом фтп сервере интересно, что ответят на linuxforum.ru, там линуксоиды водятся
-
ну да, именно ... потому как убевают эти ***** vsftpd этими запросами
-
Ну можно например так:
все это в один скрипт и засунуть и запускать по крону
#!/bin/sh - тут первая команда,тут вторая,тут содержимое того скрипта
обозвать всё это ну например:kill_pidorases.sh
положить куда нибудь, например в /usr/local/bin
и прописать в кроне в то есть в /etc/crontab
скрипт конечно сделать исполняемым. chmod +x kill_pidorases.sh
после того как прописали в кроне, перестартовать его. /etc/init.d/cron restart
чтобы он обновленный конфиг подцепил
А вообще меня тут небыло я белый и пушистый и ничего не советовал , а то те на кого его напустят на меня напустят толстого северного зверька Мнето всёравно но эфир засоряет однако.
-
#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 файла)
-
Это опять таки я со своими глупыми предложениями
sed или awk не пробовал?
это такие проги в униксах, можно использовать в скриптах,а может и на шелле справится там надо выделять первое число, сравнить с 10, мне писал один товарищь эт когда прога выводила список треков на двд, и чтобы стал воспроизводиться самый длинный.Но эт так к слову пришлось может кто и поумнее посоветует что.
-
Это опять таки я со своими глупыми предложениями
sed или awk не пробовал?
это такие проги в униксах, можно использовать в скриптах,а может и на шелле справится там надо выделять первое число, сравнить с 10, мне писал один товарищь эт когда прога выводила список треков на двд, и чтобы стал воспроизводиться самый длинный.Но эт так к слову пришлось может кто и поумнее посоветует что.
ну как ты видишь, я awk и так использую)) ... awk '{print $3}' ... но я не сильно в этом шарю)) если подскажешь как имено выделить и сравнить с её помощью, буду очень благодарен)
-
выделить с помощью 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 а то получится что скрипт будет для каждой строки вызываться
-
почитал, всё оказалось щё проще)))
/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
-
почитал, всё оказалось щё проще)))
/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 - для отладки, чтобы на экран выводило список смертников.Вобщем я в таких случаях пользуюсь правилом противодиверсионного спецназа ,как говорится:Мы народ простой. Предупредительный выстрел в голову и шесть контрольных в затылок и желательно переодически откапывать труп для проверки не ожил ли. Короче лучше перебдеть чем недобдеть.
-
список мне на экране не нужен, т.к. это будет автоматически работать в кроне без меня))
тут просто рогатая задумка, этот список будет общедоступным, чтобы народ мог зайти на сайт, так как баниться будет только ftp и посмотреть не стали ли они счастливчиками) чтоб можно было провести напутственную беседу на тему, как нехорошо досить сервак и потом разбанить)))
хотя может просто отдельный список выводить по iptables -nL и всё)))
-
список мне на экране не нужен, т.к. это будет автоматически работать в кроне без меня))
тут просто рогатая задумка, этот список будет общедоступным, чтобы народ мог зайти на сайт, так как баниться будет только ftp и посмотреть не стали ли они счастливчиками) чтоб можно было провести напутственную беседу на тему, как нехорошо досить сервак и потом разбанить)))
хотя может просто отдельный список выводить по iptables -nL и всё)))
ок тогда гаси тему раз решена