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

[Удален]
#81

Создайте bash скрипт, впишите туда все эти команды и запускайте его из крона. Или же соедените все эти команды с помощью &&, но не думаю что такой вариант будет удобен для использования.

G2
На сайте с 16.02.2013
Offline
35
#82
WapGraf:
Создайте bash скрипт, впишите туда все эти команды и запускайте его из крона. Или же соедените все эти команды с помощью &&, но не думаю что такой вариант будет удобен для использования.

Записать в bash скрипт без изменения синтаксиса команд? В bash вроде другой синтаксис.

[Удален]
#83

block.sh

#!/bin/bash


tail -n 10000 /tmp/ban_location.log | grep '444' | awk '{print $1}' | sort -u > /tmp/ips
for i in `cat /tmp/ips | sort -u`; do iptables -A INPUT -s $i -j DROP; done
rm /tmp/ips
rm /tmp/ban_location.log

cron

* * * * * ./block.sh


---------- Добавлено 08.03.2014 в 10:54 ----------

Но у вашего варианта есть минусы.

1. вы будете добавлять дубли в iptables;

2. скрипт парсит только последние строки и тем самым может не захватить все. Хотя с другой стороны при ежеминутном выполнении и при чтении 10 тыс строк это очень маловроятно, т.е. корректнее писать так:

grep 444 /tmp/ban_location.log

3. откуда берется сам файл? Парсер лога nginx? Парсим один файл, после второй... Многовато операций.

G2
На сайте с 16.02.2013
Offline
35
#84

access_log ban_location.log прописан в конфиге nginx.

Увидел, что на форумах люди советуют банить через nullroute. Как это сделать?

И как же дописать скрипт, чтобы из /tmp/ips парсились айпишники в другой файл, например, в /tmp/uniq_ips. А дальше уже бан через nullroute

[Удален]
#85
grisha2217:
Увидел, что на форумах люди советуют банить через nullroute. Как это сделать?

Я бы советовал ipset.

grisha2217:
И как же дописать скрипт, чтобы из /tmp/ips парсились айпишники в другой файл, например, в /tmp/uniq_ips. А дальше уже бан через nullroute

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

cat /tmp/ips | egrep -v "^$|`cat /tmp/uniq_ips`" >> /tmp/uniq_ips
G2
На сайте с 16.02.2013
Offline
35
#86
WapGraf:
Я бы советовал ipset.

Как это сделать? Я в ipset вообще не шарю.

Вот нашел скрипт для удаления дубликатов:

sort /tmp/ips  | uniq > /tmp/uniq_ips

Будет работать?

---------- Добавлено 08.03.2014 в 13:19 ----------

Вот нашел:

while true; do tail -n 10000 /tmp/ban_location.log | grep "444" | cut -d " " -f1 | sort | uniq -c | awk '{if($1>2){print $2}}' | xargs -tl -I _ ipset -A blacklist _; sleep 60; done

Парсит айпишники, которые получили ошибку 444 более двух раз, и заносит в бан.

Будет работать на CentOS?

Den73
На сайте с 26.06.2010
Offline
523
#87
grep '444'

нельзя так делать, вы так забаните всех подряд у кого будет вхождение 444 например в строке запроса или referer.

зачем все эти лишние действия со скидованием в /tmp/ips, все это одной строкой можно делать

ipset не пускает дубли. iptables пускает

#81 это жесть 😮

G2
На сайте с 16.02.2013
Offline
35
#88
Den73:
нельзя так делать, вы так забаните всех подряд у кого будет вхождение 444 например в строке запроса или referer.
зачем все эти лишние действия со скидованием в /tmp/ips, все это одной строкой можно делать


ipset не пускает дубли. iptables пускает

А как тогда парсить код ошибки?

---------- Добавлено 08.03.2014 в 13:28 ----------

Я помню, вы мне скрипт кидали. Но это не спасало при бане через iptables. Позже попробую банить через ipset

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

я уже писал смотрите внимательнее

/ru/forum/comment/12657935

например так


awk '{if($8 == '444')print $1}' /var/log/nginx/access.log | sort -u | awk '{print "iptables -A INPUT -s "$1" -j DROP "}' | sh; cat /dev/null > /var/log/nginx/access.log
[Удален]
#90

Вариантов решения может быть масса.

По грепу корректнее grep '" 444'.

И в #74 действительно довольно культурный вариант, только бери и используй.

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