Помогите отпарсить лог от син флуда

12
mower
На сайте с 01.12.2009
Offline
63
1712

здравствуйте. В общем такая ситуация: син флуд не переставая. Раньше серв клался моментально, мод евейзив не спасал.

Поставил nginx - не помогло вообще никак, также клался с одного ип. Потом ограничил количество коннектов в нжинксе - тоже самое. потом еще что-то изменил, вроде количество воркеров с 1 до 4, в общем серв держит. Ложиться перестал. Проблема в том что моде евейзив все равно не банит. Т.е. он работает - если отключить сайт (переименовать индекс пхп в индекс пхп1) - моментально все флудящие ип в бане. Если сайт работает - моде евейзив не банит их. Раньше я связывал это с тем что серв сразу клался и вместе с ним модевейзив. Но теперь то серв выдерживает, причем даже заметных лагов нету. В общем не понятно.

Поэтому нужно следующее. Дело в том что в логах нжинкса те ип, которым он ограничивает коннекты (правило не больше 4 коннектов с ип) получают статус "499" вот пример во время атаки:

# tail -100 /tmp/nginx_access.log | grep " 499 " > /tmp2/parsitlog
# cat /tmp2/parsitlog
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:16 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
93.80.183.233 - - [01/Dec/2009:11:32:17 +0300] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" "-"
и тд

Т.е. нужно составить правило обработки этого лога, которое потом поставить в крон допустим на каждые 4 минуты, которое допустим проверяет 100 последних строк, выбирает все где есть " 499 " (это уже выполнено, а вот как дальше не знаю), дальше:

очистить от всего, оставить только айпишники, дальше все айпи которые встречаются больше 20 раз идут в бан через iptables

Буду благодарен если кто-нибудь поможет.

CentOS

M
На сайте с 16.09.2009
Offline
278
#1

tail -100 access.log | fgrep "GET / " | fgrep "499" | cut -f1 -d " " |

sort | uniq -c | awk '{ if ($1 >= 20) print $2 }' |

xargs -n1 -I _ iptables -A BAN -s _ -j DROP

вместо прямого чтения access.log - лучше logtail использовать.

PS: к син-флуду эта тема не имеет отношения.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
O
На сайте с 13.08.2008
Offline
26
#2

1. Каким боком nginx связан с syn-flood?

2. Не надо ничего нигде банить - настройте limit_zone в nginx.

Outsourcenow.ru: оттюним ваш веб-сервер. 100 млн. запросов в сутки - наш размерчик!
mower
На сайте с 01.12.2009
Offline
63
#3

C одного ип по 100 запросов в секунду шлют, что это тогда?

# logtail
-bash: logtail: command not found
# tail -100 /tmp/nginx_access.log | fgrep " 200 " | fgrep "GET /"| cut -f1 -d " " | sort | uniq -c
3 188.92.74.27
26 85.25.134.149
3 89.251.107.25
3 93.158.148.31
20 95.134.197.104
1 95.135.82.240
4 95.28.213.79

awk '{ if ($1 >= 20) print $2 }'

Дальше я так понимаю xargs под меня так:

xargs -n1 -I _ /sbin/iptables -I ddos -s _ -j DROP

xargs -n1 -I _ echo _ >> /tmp/499_ban

Т.е. нужно чтоб логировал кого он банит

дальше в кроне нужно добавить:

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
26 * * * * root run-parts /etc/cron.hourly
25 0 * * * root run-parts /etc/cron.daily
16 4 * * 0 root run-parts /etc/cron.weekly
37 1 3 * * root run-parts /etc/cron.monthly
1-59 * * * * root test -f /tmp/ddoslist && sh /tmp/ddoslist && rm -f /tmp/ddoslist
*/4 * * * * root tail -100 /tmp/nginx_access.log | fgrep " 499 " | fgrep "GET /"| cut -f1 -d " " | sort | uniq -c | awk '{ if ($1 >= 20) print $2 }' | xargs -n1 -I _ /sbin/iptables -I ddos -s _ -j DROP [как сюда логирование добавить?]

Что будет если ничего не нашлось (нет атаки) строчка бана будет запускаться ?

myhand вы мне уже много помогли киньте свой wmz в ЛС я вам $5 хотя бы переведу в качестве спасиба

O
На сайте с 13.08.2008
Offline
26
#4
mower:
C одного ип по 100 запросов в секунду шлют, что это тогда?

Есть большая разница между syn-flood, DoS и DDoS.

Вобщем, неважно уже.

M
На сайте с 16.09.2009
Offline
278
#5
mower:
C одного ип по 100 запросов в секунду шлют, что это тогда?

детская ддос-атака

сколько IP всего-то?

mower:

Т.е. нужно чтоб логировал кого он банит

после бана в crontab:

смотрим iptables -L BAN - видим, кого забанили. плохой лог?

mower:

myhand вы мне уже много помогли киньте свой wmz в ЛС я вам $5 хотя бы переведу в качестве спасиба

ЛС прикрыто у вас

Andreyka
На сайте с 19.02.2005
Offline
822
#6

Я вижу тупой флуд с 1 ip

Снимается двумя строками iptables

Не стоит плодить сущности без необходимости
zexis
На сайте с 09.08.2005
Offline
388
#7

mower, есть анализатор логов, который атаки типа вашей(и некоторые другие) находит и автоматом заносит в iptables.

Если нужно, могу поставить.

Моя аська 169-9три86-79

mower
На сайте с 01.12.2009
Offline
63
#8
myhand:
детская ддос-атака
сколько IP всего-то?

детсткая не детская но впску 700 мегагерц 384 оперативы на которой 1 сайт кладет. сколько - хз, баню их вручную уже месяц или больше, новые ип каждые полчаса появляются, кучу подсетей уже забанил и все равно постоянно появляются новые

можете написать как логирование тех ип которые в бан идут сделать, + если ничего ненаходит команда - то команда бана выполняться будет? можно как-то вставить проверку, типа если ничего не найдено - то команду бана не выполнять

fagediba ya.ru туда пошлите

M
На сайте с 16.09.2009
Offline
278
#9
mower:
можете написать как логирование тех ип которые в бан идут сделать, + если ничего ненаходит команда - то команда бана выполняться будет? можно как-то вставить проверку, типа если ничего не найдено - то команду бана не выполнять

могу, контакты ниже в подписи.

mower
На сайте с 01.12.2009
Offline
63
#10
myhand:
могу, контакты ниже в подписи.

вышлите свой wmz

fagediba@ya.ru

или асю дайте

mower добавил 01.12.2009 в 13:29

набил 10 сообщений все равно ЛС нету...

mower добавил 01.12.2009 в 13:49

wmz получил, как обещал за помощь 5 долларов перевел

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий