Файл с этой странички
http://forum.ru-board.com/topic.cgi?forum=8&topic=13976&start=40. Там же приводится описание файлов limit и blocked_users. Привожу немножко измененный вариант под Альтлинукс.
#!/usr/bin/perl
use File::Basename;
push (@INC,(fileparse($0))[1]);
require "/etc/lightsquid/lightsquid.cfg";
require "/usr/share/lightsquid/common.pl";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime;
$year=sprintf("%02d",$year+1900);
$month=sprintf("%02d",$mon+1);
$filter="$year$month";
@daylist=glob("$reportpath/$filter*");
foreach $daypath (sort @daylist) {
open FF,"<$daypath/.total";
# GetRealName($daypath,"?"); # init realname for day
<FF>;
<FF>;
while (<FF>) {
($user,$size,$hit)=split;
$h{$user}{size}+=$size;
$h{$user}{hit}+=$hit;
}
close FF;
}
open FF,"</usr/etc/limit";
while (<FF>) {
($user,$limit)=split;
$tt{$user}{limit}=$limit;
}
close FF;
open FF,">","/usr/etc/blocked_users";
foreach $user (sort {$h{$b}{size}<=>$h{$a}{size}} keys %h) {
print FF ("$user\n") if ($h{$user}{size} > $tt{$user}{limit});
}
close FF;
Второй файл:
#!/bin/sh
/usr/bin/./squid -k reconfigure
Может кто подскажет, как их объединить в 1 файл? У меня не заработало :(
Добавляешь эти 2 файла в crontab c разницей запуска в 1 минуту. Т.к. подсчет трафика запускается по умолчанию на 55 минуте каждого часа (согласно файла /etc/cron.d/lightsquid), то добавил первый на 58 минуту, а второй на 59 минуту.
Ну и тогда приведу настройки в squid.conf, чтобы вся эта схема работала:
acl icq_port 5190
acl users proxy_auth REQUIRED
acl limit proxy_auth "/usr/etc/blocked_users"
http_access deny limit !icq_port #закрывается доступ по http превысившим лимит, аська остается доступной
#но все равно никто не получит аськи, не авторизовавшись
http_access allow users #разрешается трафик авторизовавшимся и не превысившим лимит
P.S. в линухе сам еще новичок. Так что если что-то можно сделать лучше - скажите, буду очень благодарен.