Реклама на сайте Advertise with us

Как настроить bandwith per IP limit (daily/weekly) в апаче?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 14/06/09 в 15:07       Ответить с цитатойцитата 

Есть сайт с базой файлов "*.xuy" на пару сотен гигов. Хочу сделать так, что бы эту базу не слили у меня с пары айпишников пауком за пару часов или дней.

Короче - нужно как-то фильтровать программно (на уровне модулей апача) сколько с одного айпи было скачано *.xuy файлов за день и если лимит превышен - выдавать какую-то ошибку типа 509й.

Пытался юзать limitipconn, но он лимитирует только количество одновременных коннектов. Хорошо, но нужно лучше.

Пытался юзать модуль cband - он ограничивает скорость для одного айпи (и то как-то криво), можно зашейвить какой-то конкретный адрес или сеть, но вот для каждого айпишника такого делать не умеет.

Я понимаю, что эта фича будет пригружать сервер, так как нужно будет где-то хранить всю инфу о скачиваниях, но к этому я готов..

Кто-то сталкивался? Посоветуйте, как реализовать. Обгуглился уже.

нету у меня подписи...

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 14/06/09 в 15:21       Ответить с цитатойцитата 

mod_cband в помощь

0
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 14/06/09 в 15:22       Ответить с цитатойцитата 

читай выше icon_smile.gif

я уточню, в первом посте это не явно видно, нужно лимитировать объем данных. К примеру - "не более 100М этих файлов за день".

Последний раз редактировалось: Еugene (14/06/09 в 15:36), всего редактировалось 1 раз

нету у меня подписи...

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 14/06/09 в 15:35       Ответить с цитатойцитата 

Да, чет хуево прочитал )

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 14/06/09 в 19:18       Ответить с цитатойцитата 

Тут вариантов три
1) ставишь mod_perl и на perl пишешь свой модуль. Не rocket science.
2) пишешь свой модуль на C
3) кого-то просишь написать свой модуль - а там на чем, уже на месте решается.

В принципе, могу написать, для апача модули делаю быстро. По розничной цене, поскольку копирайты оставлю за собой, чтобы можно было развивать и еще кому-то продать, по идее штука нужная. Предоплату не беру в принципе, оплата по факту релиза. Если есть jabber - стучись, обсудим конкретный случай, у меня контакты в профайле. Асю стараюсь не пользовать, сорри - в последнее время что-то мессаги теряются.

0
 



С нами с 15.08.07
Сообщения: 203
Рейтинг: 321

Ссылка на сообщениеДобавлено: 14/06/09 в 21:43       Ответить с цитатойцитата 

как вариант,
написать скрипт, который будет парсить логи апача (настроить их, что бы писались только для этой папки и нужного формата) и смотреть кто-то сколько скачал и соответсвенно считать всё это дело

и при достижение предела добавлять в .htaccess, и раз в день можно обнулять .htaccess и ротейтить логи


соответсвенно и апач не будет нагружен сильно в таком случае

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 14/06/09 в 22:02       Ответить с цитатойцитата 

Ога. Типа .htaccess с десятками (а то и сотнями) строк в нем совсем не тормозит апач icon_confused.gif
И парсер огромных апачевских логов совсем не будет нагружать сервер icon_confused.gif (запускал awstats когда-нибудь? на P4 он не успевает за час пропарсить логи даже не сильно нагруженного апача).

Я никому ничего не навязываю, упаси боже. Но решения, которые на мастере порой предлагаются как "высокопроизводительные" (типа базы в текстовом файле или .htaccess размером с эту базу, цепочки вызовов array_diff/array_unique...) .. в общем, ты немножко неправ. Nothing personal.

0
 



С нами с 15.08.07
Сообщения: 203
Рейтинг: 321

Ссылка на сообщениеДобавлено: 14/06/09 в 23:49       Ответить с цитатойцитата 

Dr.Syshalt: если ты не умеешь читать, то тебя скорее всего уже не научить

по поводу логов я писал, что их можно настроить, что бы они писали только то что надо,а крон раз в пять минут написанный на с, не создаст особой нагрузки, или демон который читает фаил по tail -f особо не сожрёт памяти. Я тестил и тот и тот вариант, они не нагружают сервер.

а с ИПами можно делать всё что угодно, хоть засунуть в фаервол и резать скорость, резать конекты и т.д.

если ты пиаришь свои мега-супер модули к апачу, то пиарь себе спокойно, а не с пеной из-за рта.

0
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 15/06/09 в 00:02       Ответить с цитатойцитата 

2geCTP:
поддерживаю тебя. сам хотел то же самое написать, но начинать спор - дурное дело.
в любом случае за идеи всем спасибо, уверен, что эта фича уже реализована, буду искать дальше.

ps: сам когда-то писал модули под 1.3, всё можно сделать, но в этом случае, чем проще - тем лучше.

нету у меня подписи...

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 15/06/09 в 00:54       Ответить с цитатойцитата 

geCTP, не хотел тебя обидеть, извини - но ты все равно написал, скажем так, не самое простое и уж тем более, не самое оптимальное решение. И дело даже не в пиаре. Я тоже пробовал подобные вещи, когда искал, как отлавливать тех, кто в мемберку пароли раздает еще давно. И тоже пробовал и через пайп демону логи скармливать (апач умеет писать на stdin процесса) и - первым делом - парсить эти самые логи. Проблема в том, что в этом случае уходит (и не так мало, как кажется) времени на парсинг того, что в модуле вы получаете "бесплатно", в структуре запроса. И под большими нагрузками оно ведет себя уже совсем не так хорошо. Про .htaccess как написал, так и прочитал, файрволл не опция, когда надо всего лишь HTTP-ошибку выдать. Написание сишного парсера логов же - уже вполне сравнимо по вложениям времени с тем, чтобы написать простой модуль для mod_perl, там особо писать-то нечего, если по-минимуму, любой справится - тем более, если опыт есть, как TC говорит. Если есть желание - можно, конечно, идти "своим путем", создавая всю эту длинную и заведомо медленную цепочку парсера-поддержки htaccess и пр. TC, а за идею спасибо по-любому.

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 15/06/09 в 11:11       Ответить с цитатойцитата 

Если речь идёт о выдаче определённых файлов, то я бы сделал всё на PHP или на Perl. Можно конечно специально модуль для апача замутить. Но я бы не стал.

0
 



С нами с 15.12.08
Сообщения: 221
Рейтинг: 347

Ссылка на сообщениеДобавлено: 15/06/09 в 12:31       Ответить с цитатойцитата 

По-моему, какая-то не правильная постановка задачи.
Если захотят слить базу, то возьмут пачку прокси и сольют. И ограничение на объем скачивания для ип тут не поможет.
Имхо, надо думать в сторону правильного антилича. Т.е., например, чтобы скачивать могли только зареганные и аппрувленные юзеры.

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 15/06/09 в 13:20       Ответить с цитатойцитата 

PistoGanza: с прокси бороться не так сложно. Можно разрешать даунлоад только тем, кому выдана сессия, а сессия выставляется только после прохождения страницы с капчей - то есть на манер того, что на рапидшаре сделано, только без задержек. И считать потом трафик не на IP, а на сессию.

А вообще согласен с тем моментом, что все выложенное в инет будет все равно слито, как ни борись, поскольку оно по определению доступно ) Все, что можно сделать - просто затруднить задачу настолько, чтобы большинству было лень бороться.

Sha: Слово "модуль" страшнее того, что оно означает. Вот пример модуля на перле из книжки "Practical mod_perl":

Код:

package Apache::PrintEnv2;

use strict;
use warnings;

use Apache::RequestRec (); # for $r->content_type
use Apache::RequestIO ();  # for $r->print

use Apache::Const -compile => 'OK';

sub handler {
    my $r = shift;

    $r->content_type('text/plain');
    $r->subprocess_env;
    for (sort keys %ENV){
        $r->print("$_ => $ENV{$_}\n");
    }

    return Apache::OK;
}

1;


Тут вам и обращение к реквесту, и работа с хедером. Ничем не сложнее CGI.

0
 



С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144

Ссылка на сообщениеДобавлено: 15/06/09 в 15:28       Ответить с цитатойцитата 

Если надо считать просто по IP, то можно считать по фаерволу, и отключать им же. Апач вообще не надо при этом трогать. Если надо парсить лог, то пишется небольшая программа прокладка, куда по конвейеру отдается лог. Ну и после этого опять фаерволом резать излишки. При этом нет особой нагрузки на систему.

Моя подпись.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »