Доброго времени суток, помогите реализовать скрипт который выдергивал бы нужные IP адреса из nginx.
Суть скрипта такова, есть модуль у nginx который пишет в логи превышенное число соединений сообщением к примеру:
[error] 19025#0: *4209513 access forbidden by rule, client: 123.123.13.13, server: example.org, request: "GET / HTTP/1.1", host: "example.org"
На одном из ресурсов я нашел скрипт который создает правила блокировки Ip из логов, ниже его содержимое:# ищем ботов
cat /var/log/nginx/error.log | grep "limiting connections by zone" | grep "request: \"GET / HTTP/1.1"| awk '{print $12}'| awk -F"," '{print $
1}'| sort | uniq -c | sort -nr > /tmp/botnet.blacklist
# очищаем скрипт бана
cat /dev/null > /tmp/iptables_ban.sh
# создаем DROP правила для 50 самых агрессивных ботов
awk '{print "iptables -A INPUT -p tcp --dport 80 -s " $2 " -j DROP" }' botnet.blacklist | head -n 50 >> /tmp/iptables_ban.sh
# загружаем blacklist
bash /tmp/iptables_ban.sh
# делаем ротацию лога
cat /dev/null > /home/www/nginx_log/error.log
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
Проблема в том что с сменой версии nginx этот скрипт уже не работает для меня. Я пробовал банально подставить access forbidden by rule вместо limiting connections by zone но это не помогло, что и не удивило меня.
Кто-то может помочь подправить этот скрипт чтобы он работал на основе моих логов? Я пока что в sh скриптах не силен, особенно где речь идет о регулярных выражениях - там совсем глухо.