Мощный сервер спокойно падает от ДДоса

Андрей
На сайте с 30.09.2009
Offline
482
#101

По стандартному лог-файлу nginx так:

awk '{if($9 == "404")print $1}'
дальше без изменений.
EuroHoster.org ( https://eurohoster.org/ru/ ) - территория быстрых серверов. Выделенные серверы, VPS, SSL, домены и VPN.
Den73
На сайте с 26.06.2010
Offline
523
#102

/tmp/ban_location.log

откуда там вообще берутся записи.

если это лог локейшена который отдает 444 то проверять код ответа вообще не нужно.

можно вообще сразу скармливать на бан.

вот пример, с рабочей системы, банит почти реалтайм


tail -f /var/log/nginx/badrequest.log | grep --line-buffered -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | xargs -n1 -Iip lp-banned-ban ip badrequest_null_null > /dev/null
G2
На сайте с 16.02.2013
Offline
35
#103

В кроне где-то ошибка была, один человек помог вынести в bash скрипт и запускать раз в 5 секунд


#!/bin/bash
SLEEP_TIME=5
while true; do
awk -F '|' '{if($8 == " 444 ")print $1}' /tmp/ban_location.log | awk '{print $1}' | sort -u | awk '{print "ipset -A dropip " $1}' | sh;
cat /dev/null > /tmp/ban_location.log
sleep $SLEEP_TIME;
done


---------- Добавлено 09.03.2014 в 11:23 ----------

Den73:
/tmp/ban_location.log

откуда там вообще берутся записи.

если это лог локейшена который отдает 444 то проверять код ответа вообще не нужно.
можно вообще сразу скармливать на бан.

Да я же вам вроде говорил. Это access_log из локейшена.

Андрей
На сайте с 30.09.2009
Offline
482
#104
grisha2217:
Да я же вам вроде говорил. Это access_log из локейшена.

Вы не поняли вероятно вопроса.

Вариант 1.

location / {
access_log /tmp/ban_location.log;
..
}

Вариант 2.

if ($bad_request) {
access_log /tmp/ban_location.log;
return 444;
}
G2
На сайте с 16.02.2013
Offline
35
#105

Первый вариант.

Андрей
На сайте с 30.09.2009
Offline
482
#106

Ну так сделайте второй и не нужно тогда искать коды ответа 444, а лочить всех. Просто чтение файла и лок.

G2
На сайте с 16.02.2013
Offline
35
#107
WapGraf:
Ну так сделайте второй и не нужно тогда искать коды ответа 444, а лочить всех. Просто чтение файла и лок.

Хорошо.

Тогда как будет выглядеть новый скрипт без поиска 444?

Андрей
На сайте с 30.09.2009
Offline
482
#108

Ну например так:

awk '{print "ipset -A dropip " $1}' /tmp/ban_location.log | sort -u | sh;
G2
На сайте с 16.02.2013
Offline
35
#109
WapGraf:
Ну например так:
awk '{print "ipset -A dropip " $1}' /tmp/ban_location.log | sort -u | sh;

Спасибо вам, разжевываете мне)

Den73
На сайте с 26.06.2010
Offline
523
#110

еще можно же без крона обойтись, максимально быстро будут улетать в бан


tail -f /tmp/ban_location.log | grep --line-buffered -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | xargs -n1 -Iip ipset -A dropip ip > /dev/null

делаете скрипт и в авт. запуск.

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