С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 14/06/09 в 15:07 |
Есть сайт с базой файлов "*.xuy" на пару сотен гигов. Хочу сделать так, что бы эту базу не слили у меня с пары айпишников пауком за пару часов или дней.
Короче - нужно как-то фильтровать программно (на уровне модулей апача) сколько с одного айпи было скачано *.xuy файлов за день и если лимит превышен - выдавать какую-то ошибку типа 509й.
Пытался юзать limitipconn, но он лимитирует только количество одновременных коннектов. Хорошо, но нужно лучше.
Пытался юзать модуль cband - он ограничивает скорость для одного айпи (и то как-то криво), можно зашейвить какой-то конкретный адрес или сеть, но вот для каждого айпишника такого делать не умеет.
Я понимаю, что эта фича будет пригружать сервер, так как нужно будет где-то хранить всю инфу о скачиваниях, но к этому я готов..
Кто-то сталкивался? Посоветуйте, как реализовать. Обгуглился уже.
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 14/06/09 в 15:21 |
mod_cband в помощь
|
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 14/06/09 в 15:22 |
читай выше
я уточню, в первом посте это не явно видно, нужно лимитировать объем данных. К примеру - "не более 100М этих файлов за день".
Последний раз редактировалось: Еugene (14/06/09 в 15:36), всего редактировалось 1 раз
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 14/06/09 в 15:35 |
Да, чет хуево прочитал )
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 14/06/09 в 19:18 |
Тут вариантов три
1) ставишь mod_perl и на perl пишешь свой модуль. Не rocket science.
2) пишешь свой модуль на C
3) кого-то просишь написать свой модуль - а там на чем, уже на месте решается.
В принципе, могу написать, для апача модули делаю быстро. По розничной цене, поскольку копирайты оставлю за собой, чтобы можно было развивать и еще кому-то продать, по идее штука нужная. Предоплату не беру в принципе, оплата по факту релиза. Если есть jabber - стучись, обсудим конкретный случай, у меня контакты в профайле. Асю стараюсь не пользовать, сорри - в последнее время что-то мессаги теряются.
|
|
|
|
С нами с 15.08.07
Сообщения: 203
Рейтинг: 321
|
Добавлено: 14/06/09 в 21:43 |
как вариант,
написать скрипт, который будет парсить логи апача (настроить их, что бы писались только для этой папки и нужного формата) и смотреть кто-то сколько скачал и соответсвенно считать всё это дело
и при достижение предела добавлять в .htaccess, и раз в день можно обнулять .htaccess и ротейтить логи
соответсвенно и апач не будет нагружен сильно в таком случае
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 14/06/09 в 22:02 |
Ога. Типа .htaccess с десятками (а то и сотнями) строк в нем совсем не тормозит апач
И парсер огромных апачевских логов совсем не будет нагружать сервер (запускал awstats когда-нибудь? на P4 он не успевает за час пропарсить логи даже не сильно нагруженного апача).
Я никому ничего не навязываю, упаси боже. Но решения, которые на мастере порой предлагаются как "высокопроизводительные" (типа базы в текстовом файле или .htaccess размером с эту базу, цепочки вызовов array_diff/array_unique...) .. в общем, ты немножко неправ. Nothing personal.
|
|
|
|
С нами с 15.08.07
Сообщения: 203
Рейтинг: 321
|
Добавлено: 14/06/09 в 23:49 |
Dr.Syshalt: если ты не умеешь читать, то тебя скорее всего уже не научить
по поводу логов я писал, что их можно настроить, что бы они писали только то что надо,а крон раз в пять минут написанный на с, не создаст особой нагрузки, или демон который читает фаил по tail -f особо не сожрёт памяти. Я тестил и тот и тот вариант, они не нагружают сервер.
а с ИПами можно делать всё что угодно, хоть засунуть в фаервол и резать скорость, резать конекты и т.д.
если ты пиаришь свои мега-супер модули к апачу, то пиарь себе спокойно, а не с пеной из-за рта.
|
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 15/06/09 в 00:02 |
2geCTP:
поддерживаю тебя. сам хотел то же самое написать, но начинать спор - дурное дело.
в любом случае за идеи всем спасибо, уверен, что эта фича уже реализована, буду искать дальше.
ps: сам когда-то писал модули под 1.3, всё можно сделать, но в этом случае, чем проще - тем лучше.
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 15/06/09 в 00:54 |
geCTP, не хотел тебя обидеть, извини - но ты все равно написал, скажем так, не самое простое и уж тем более, не самое оптимальное решение. И дело даже не в пиаре. Я тоже пробовал подобные вещи, когда искал, как отлавливать тех, кто в мемберку пароли раздает еще давно. И тоже пробовал и через пайп демону логи скармливать (апач умеет писать на stdin процесса) и - первым делом - парсить эти самые логи. Проблема в том, что в этом случае уходит (и не так мало, как кажется) времени на парсинг того, что в модуле вы получаете "бесплатно", в структуре запроса. И под большими нагрузками оно ведет себя уже совсем не так хорошо. Про .htaccess как написал, так и прочитал, файрволл не опция, когда надо всего лишь HTTP-ошибку выдать. Написание сишного парсера логов же - уже вполне сравнимо по вложениям времени с тем, чтобы написать простой модуль для mod_perl, там особо писать-то нечего, если по-минимуму, любой справится - тем более, если опыт есть, как TC говорит. Если есть желание - можно, конечно, идти "своим путем", создавая всю эту длинную и заведомо медленную цепочку парсера-поддержки htaccess и пр. TC, а за идею спасибо по-любому.
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 15/06/09 в 11:11 |
Если речь идёт о выдаче определённых файлов, то я бы сделал всё на PHP или на Perl. Можно конечно специально модуль для апача замутить. Но я бы не стал.
|
|
|
|
С нами с 15.12.08
Сообщения: 221
Рейтинг: 347
|
Добавлено: 15/06/09 в 12:31 |
По-моему, какая-то не правильная постановка задачи.
Если захотят слить базу, то возьмут пачку прокси и сольют. И ограничение на объем скачивания для ип тут не поможет.
Имхо, надо думать в сторону правильного антилича. Т.е., например, чтобы скачивать могли только зареганные и аппрувленные юзеры.
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 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.
|
|
|
|
С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144
|
Добавлено: 15/06/09 в 15:28 |
Если надо считать просто по IP, то можно считать по фаерволу, и отключать им же. Апач вообще не надо при этом трогать. Если надо парсить лог, то пишется небольшая программа прокладка, куда по конвейеру отдается лог. Ну и после этого опять фаерволом резать излишки. При этом нет особой нагрузки на систему.
|
|
|
|