Лимит трафика для пользователей

Привет!

Есть готовые решения для отслеживания того, насколько пользователь использовал свой лимит трафика через прокси и автоматическое отключение в случае превышения лимита?
А с возможностью просмотреть пользователем свою "выработку" через http?

Натыкался

Натыкался както на разработку российских пыонеров. Они столько наворотов потребовали, что у меня возникло сомнение по поводу их компетентности. Недавно поставил ограничение (дневное). Все что нужно скрипт на перле, конфиг квот, крон,и список пользователей (авторизация через AD)
А теперь по порядку.
1) Настраиваем acl
Для начала создадим каталог. У меня /etc/squid/quota. Каталог должен быть доступен сквиду для чтения, руту для записи. В каталог помещаем файлик deny.lst. В него добавляем фиктивного юзверя и подопытного кролика (из под него будем ломиться в тырнет). Фиктивный нужен потому как сквид ругаеццо на пустой acl

baduser
mydomen+krolik

В файле не должно быть пустых строчек, после имен юзера не должно быть пробелов.

Затем пропишем этот файлик в конфиге сквида /etc/squid/squid.conf

.....
acl quota_deny proxy_auth "/etc/squid/quota/deny.lst"
http_access deny quota_deny
deny_info ERR_QUOTA quota_deny
......

Ну тут все просто. Создаем лист типа авторизации со списком юзверей в файле, запрещаем доступ и выводим страничку с сообщением. Особенности - запрещать надо до того как разрешать, к тому же ы строчках не должно быть лишних пробелов.
далее /usr/sbin/squid -k reconfigure и лезем сначала под собой (нам должно быть можно), затем под кроликом (ему долно быть нельзя). Файлик ERR_QUOTA должен лежать там где его ищет сквид (у меня /usr/share/squid/errors/English). Ежели заработало идем дальше.

2) Настраиваем квоты.
"Много думать надо нет". Файлик квот будет состоять из строк. Строки из слов. Слова разделены пробелами. Первое слово - лимит в байтах. Второе и последующее - имена юзерей. Ежели имен нет - квота распространяется на всех, для кого явно не указана. Создаем файл /etc/squid/quota/quota.conf

5000000
10000000 mydomen+loozer1 mydomen+loozer2
10000000 mydomen+looser3
1000000000 mydomen+looser4 

Постарайся не писать лишних пробелов и не добавляй пустых строк. Здесь мы ограничиваем до ~5 метров всем. Лузерам 1, 2, 3 ставим 10 метров, лузеру 4 - 100.

3) Пишем скрипт на перле (/etc/squid/quota/getdeny.pl)

#! /usr/bin/perl
# koi8-r

#Вызов скрипта 
# getdeny.pl файл_квот файл_лога

# читаем файл квот
# Формат файла: квота пользователь пользователь ....
# Заполняем хеш квоты{пользователь}=квота

open qfh, $ARGV[0];
my %quotas;
while (<qfh>){
    chomp;
    @fields = split / /;
    $quota=$fields[0];
    splice @fields,0,1;
    $default_quota=$quota if (!@fields); 
    foreach $user (@fields){
      $quotas{$user}=$quota;  
    }
}
close qfh;


#Определяем системное время
@currenttime=localtime;

# Анализ сквидового лога (7 поле пользователь, 4 количество байтов (вычитаем из квоты),1 дата) 

open ac, $ARGV[1];
while(<ac>){
    s/\s+/ /g;    
    @fields = split / /;
#Дневное ограничение, 3 поле списка - день месяца 
    @logtime=localtime($fields[0]);
    if ($logtime[3]==$currenttime[3]){
      $quotas{$fields[7]}=$default_quota if !exists $quotas{$fields[7]}; 
      $quotas{$fields[7]}-=$fields[4];
    }
}

close ac;

# Выдаем список для запрещения доступа
print "baduser";
foreach $user (sort keys %quotas){ 
   if ($quotas{$user}<0){
          printf "\n%s", $user;
   }
}

Скриптик после некоторых раздумий должен выдать список юзерей, превысивших квоту. Для отладки брал небольшой кусок лога, и ставил самому активному юзеру квоту в 10 байт. Как только убеждаемся в том что скриптик делает то что надо - ставим это дело в крон. Я постаил каждые 10 мин.

crontab -e и добавляем запись

*/10 * * * * /etc/squid/quota/getdeny.pl /etc/squid/quota/quotas.conf /var/log/squid/access.log >/etc/squid/quota/deny.lst;/usr/sbin/squid -k reconfigure

Вот собсно и все.

Глюки.
Вобщем как бы все хорошо, токмо мозилка и ие требуют поемуто авторизацию. Надо манов по сквиду побольше покурить.

Спасибо за грамотную

Спасибо за грамотную статью!
Но у меня ошибка, котрая говорит, что параметр "proxy_auth" недонастроен (в "deny.lst" есть имя одного компа без лишних символов):
#/usr/local/etc/rc.d/squid onerestart
Starting squid.
2010/01/22 12:35:25| Invalid Proxy Auth ACL 'acl quota_deny proxy_auth "/usr/local/etc/squid/deny.lst"' because no authentication schemes are fully configured.
FATAL: Bungled squid.conf line 612: acl quota_deny proxy_auth "/usr/local/etc/squid/deny.lst"
Squid Cache (Version 2.7.STABLE7): Terminated abnormally.
/usr/local/etc/rc.d/squid: WARNING: failed to start squid

По второму

По второму вопросу опять жеж скрипт в кроне (реалтайм не канает).

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".