grisha2217

Рейтинг
35
Регистрация
16.02.2013
WapGraf:
В iptables подключили ipset?

Да, всё ок. Когда я баню в ручную, т.е. ввожу ipset -A dropip ТУТ_ИП , то прекрасно банит и высвечивает айпишник в ipset -L

Где-то в скрипте ошибка:

awk -F '|' '{if($7 == " 444 ")print $1}' /tmp/ban_location.log | awk '{print $1}' | sort -u | awk '{print "ipset -A dropip " $0}'  | sh; cat /dev/null > /tmp/ban_location.log

Ввел команду:

ipset -N dropip iphash

Потом изменил скрипт:

awk '{if($8 == '444')print $1}' /tmp/ban_location.log | sort -u | awk '{print ipset -A dropip $1}' | sh; cat /dev/null > /tmp/ban_location.log

почему не банит?

Парни, будет ли скрипт выполняться каждые 15 секунд?


* * * * * sleep 15;awk '{if($8 == '444')print $1}' /tmp/ban_location.log | sort -u | awk '{print iptables -A INPUT -s $i -j DROP}' | sh; cat /dev/null > /tmp/ban_location.log

Как просмотреть список заблокированных ip?

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


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

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

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

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

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?

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

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

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

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

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

Сделал "по-китайски" выполнение неких скриптов в crontab:


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

Будут ли эти команды выполняться по порядку? Или же они будут выполняться одновременно? Если второе, то как сделать выполнение этих команд по порядку?

Den73:
о ротации логов не забывайте, нагрузка зависит от кол. записей в логе и от текущего состояния системы в целом.
вы можете провести тестирование например распарсив лог с 1млн записей.

время выполнения можно узнать так


time команда

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

Всего: 94