Да, всё ок. Когда я баню в ручную, т.е. ввожу 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?
А как тогда парсить код ошибки?---------- Добавлено 08.03.2014 в 13:28 ----------Я помню, вы мне скрипт кидали. Но это не спасало при бане через iptables. Позже попробую банить через 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
Записать в 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
Будут ли эти команды выполняться по порядку? Или же они будут выполняться одновременно? Если второе, то как сделать выполнение этих команд по порядку?
time команда
А как сделать, чтобы большой лог записывался в архив, ну а дальше по крону?