The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Фильтрация логов nginx посредством sh скрипта, !*! Bugster, 25-Июн-10, 19:16  [смотреть все]
Доброго времени суток, помогите реализовать скрипт который выдергивал бы нужные 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 скриптах не силен, особенно где речь идет о регулярных выражениях - там совсем глухо.

  • Фильтрация логов nginx посредством sh скрипта, !*! Michael, 19:23 , 25-Июн-10 (1)
    >[оверквотинг удален]
    >"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

    а тут пытаетесь его запустить
    где логика?

    >[оверквотинг удален]
    >[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    >
    >Проблема в том что с сменой версии nginx этот скрипт уже не
    >работает для меня. Я пробовал банально подставить access forbidden by rule
    >вместо limiting connections by zone но это не помогло, что и
    >не удивило меня.
    >
    >Кто-то может помочь подправить этот скрипт чтобы он работал на основе моих
    >логов? Я пока что в sh скриптах не силен, особенно где
    >речь идет о регулярных выражениях - там совсем глухо.

    • Фильтрация логов nginx посредством sh скрипта, !*! Michael, 19:23 , 25-Июн-10 (2)
      >[оверквотинг удален]
      >>[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
      >>
      >>Проблема в том что с сменой версии nginx этот скрипт уже не
      >>работает для меня. Я пробовал банально подставить access forbidden by rule
      >>вместо limiting connections by zone но это не помогло, что и
      >>не удивило меня.
      >>
      >>Кто-то может помочь подправить этот скрипт чтобы он работал на основе моих
      >>логов? Я пока что в sh скриптах не силен, особенно где
      >>речь идет о регулярных выражениях - там совсем глухо.

      пардон.. невнимательно прочитал

      • Фильтрация логов nginx посредством sh скрипта, !*! Bugster, 13:34 , 26-Июн-10 (3)
        >[оверквотинг удален]
        >>>Проблема в том что с сменой версии nginx этот скрипт уже не
        >>>работает для меня. Я пробовал банально подставить access forbidden by rule
        >>>вместо limiting connections by zone но это не помогло, что и
        >>>не удивило меня.
        >>>
        >>>Кто-то может помочь подправить этот скрипт чтобы он работал на основе моих
        >>>логов? Я пока что в sh скриптах не силен, особенно где
        >>>речь идет о регулярных выражениях - там совсем глухо.
        >
        >пардон.. невнимательно прочитал

        Это все хорошо, только помочь некому пока. Читаю о регуялрных, надеюсь голова сама доварит как выделить.

  • Фильтрация логов nginx посредством sh скрипта, !*! anonymous, 14:54 , 03-Июл-10 (4)
    >Доброго времени суток, помогите реализовать скрипт который выдергивал бы нужные IP адреса
    >из nginx.
    >Суть скрипта такова, есть модуль у nginx который пишет в логи превышенное
    >число соединений сообщением к примеру:
    >[error] 19025#0: *4209513 access forbidden by rule, client: 123.123.13.13, server: example.org, request:
    ># ищем ботов
    >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

    gawk '/access forbidden by rule/ { match($0, /client: ([^,]+),/, a); print a[1] }' /var/log/nginx/error.log | sort | uniq -c | sort -nr > /tmp/botnet.blacklist

    можно и sort|uniq|sort переписать на awk, но лениво :-)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру