прошу помощи в доработке скрипта.

valsha
На сайте с 07.09.2008
Offline
107
1056

Что делает скрипт?

Скрипт парсит логи nginx, берем IP адреса, у которых нет Useg-Agent'а, сортируем и сохраняем в black_list.

Сам скрипт:

#!/bin/bash
#echo '' > /root/black_list
cat /var/log/nginx/access.log | awk ' match($0, /(\d*.\d*.\d*.\d*).*"-" "-"/) {print $1}' | sort | uniq >> /root/black_list
#echo '' > /var/log/nginx/access.log

Что необходимо доработать?

Необходимо из black_list брать ip адреса добавлять для ipset ( для iptables), что бы эти ip были заблокированы.

Скрипт будет запускатся по крону, каждые N минут.

Если у вас есть идеи как еще добавить дополнительно проверку для cookies, то был бы рад услышать.

Спасибо.

M
На сайте с 16.09.2009
Offline
278
#1

господибожемой

ну начните с выделения отдельного формата лога для такого случая

для отдельного if в каком-то локейшене

просто тупо туда пишите список IP.

по тому, как блокировать на iptables пачки ip - смотрите форум (поиск)

в том же if можно и проверку cookies сделать

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
D
На сайте с 05.06.2007
Offline
155
#2

всё не так просто, для начала стоит ли читать весь фаил логов?

cat /var/log/nginx/access.log

или лучше прочесть последних 1000 строк

tail -n 1000 /var/log/nginx/access.log

А вообще зачем это? Может просто на самом сайте проверить и куки и юзер агента и вывести 404 при несоответствии?

Написал не мало шедевров ;)
valsha
На сайте с 07.09.2008
Offline
107
#3
myhand:


ну начните с выделения отдельного формата лога для такого случая
для отдельного if в каком-то локейшене
просто тупо туда пишите список IP.

на сервере не один веб сайт (разные домены и т.п), хотелось бы более простого решения.

по тому, как блокировать на iptables пачки ip - смотрите форум (поиск)

если разговор о том что iptables будет тормозить от большого кол-ва ip забаненых.

так для этого я и хочу использовать ipset.

в том же if можно и проверку cookies сделать

можно тут подробней?

M
На сайте с 16.09.2009
Offline
278
#4

Dimanych, если уж вообще парсить лог-файл - использовать что-то

типа logtail сразу. чтобы не читать несколько раз одно и тоже.

а уж потом на вывод logtail натравить tail -n XXX

но направление - верное. начать с конфига вебсервера.

valsha
На сайте с 07.09.2008
Offline
107
#5
Dimanych:

А вообще зачем это? Может просто на самом сайте проверить и куки и юзер агента и вывести 404 при несоответствии?

наверно да, можно.

но хотелось бы от таких "посетителей" избавлятся и что бы на них уже ресурсы не уходили.

M
На сайте с 16.09.2009
Offline
278
#6
valsha:
на сервере не один веб сайт (разные домены и т.п), хотелось бы более простого решения.

а в чем именно проблема?

valsha:

если разговор о том что iptables будет тормозить от большого кол-ва ip забаненых.
так для этого я и хочу использовать ipset.

вы делаете exec на каждый ip. iptables-restore -n может подгружать это гораздо быстрее.

с другой стороны - скорость добавления новых ip обычно не критична.

а добавить по одному можно просто - man xargs, man iptables/ipset (примеры есть в форуме)

valsha:

можно тут подробней?

как-то так:

if ($http_cookie ~* "id=([^;]+)(?:;|$)" ) {

}

valsha
На сайте с 07.09.2008
Offline
107
#7
myhand:
а в чем именно проблема?

в отсутствии знаний как сделать правильно "формата лога для такого случая, что бы туда писало сразу IP"


вы делаете exec на каждый ip. iptables-restore -n может подгружать это гораздо быстрее.
с другой стороны - скорость добавления новых ip обычно не критична.
а добавить по одному можно просто - man xargs, man iptables/ipset (примеры есть в форуме)

ну добавлять надо не по одному ip, а наверно "пачками", так как скрипт к примеру запускатся будет каждые 5 минут, ну и наверно там (в black_list) не один ip будет.


как-то так:
if ($http_cookie ~* "id=([^;]+)(?:;|$)" ) {
}

если проверка по if ($http_cookie ~* "id=([^;]+)(?:;|$)" ) {

} не проходит то юзер получает - ошибку 504? как то так?

valsha добавил 08.12.2009 в 17:15

можно пример как сразу в nginx лог писать ip адреса тех у которых нет Useg-Agent'а ?

M
На сайте с 16.09.2009
Offline
278
#8
valsha:
ну добавлять надо не по одному ip, а наверно "пачками", так как скрипт к примеру запускатся будет каждые 5 минут, ну и наверно там (в black_list) не один ip будет.

iptables/ipset все-равно запускается по одному на добавляемый IP. iptables-restore -n умеет "пачками". ищите в форуме.

valsha:

если проверка по if ($http_cookie ~* "id=([^;]+)(?:;|$)" ) {
} не проходит то юзер получает - ошибку 504? как то так?

что настроите - то и получит

valsha:

можно пример как сразу в nginx лог писать ip адреса тех у которых нет Useg-Agent'а ?

if ($http_user_agent = "") {

access_log /path/to/log ip;

}

логформат как-то так:

log_format ip "$request_address"

D
На сайте с 05.06.2007
Offline
155
#9

и действительно, зачем мучиться с iptables? достаточно условий nginx'a

сразу не подумал об этом))

Himiko
На сайте с 28.08.2008
Offline
560
#10
Dimanych:
и действительно, зачем мучиться с iptables? достаточно условий nginx'a
сразу не подумал об этом))

Умная мысля приходит опосля :)

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.

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