Лимит трафика для пользователей
Птица Зу 23 ноября, 2007 - 11:17
Привет!
Есть готовые решения для отслеживания того, насколько пользователь использовал свой лимит трафика через прокси и автоматическое отключение в случае превышения лимита?
А с возможностью просмотреть пользователем свою "выработку" через http?
»
- Для комментирования войдите или зарегистрируйтесь

Натыкался
Натыкался както на разработку российских пыонеров. Они столько наворотов потребовали, что у меня возникло сомнение по поводу их компетентности. Недавно поставил ограничение (дневное). Все что нужно скрипт на перле, конфиг квот, крон,и список пользователей (авторизация через AD)
А теперь по порядку.
1) Настраиваем acl
Для начала создадим каталог. У меня /etc/squid/quota. Каталог должен быть доступен сквиду для чтения, руту для записи. В каталог помещаем файлик deny.lst. В него добавляем фиктивного юзверя и подопытного кролика (из под него будем ломиться в тырнет). Фиктивный нужен потому как сквид ругаеццо на пустой acl
В файле не должно быть пустых строчек, после имен юзера не должно быть пробелов.
Затем пропишем этот файлик в конфиге сквида /etc/squid/squid.conf
Ну тут все просто. Создаем лист типа авторизации со списком юзверей в файле, запрещаем доступ и выводим страничку с сообщением. Особенности - запрещать надо до того как разрешать, к тому же ы строчках не должно быть лишних пробелов.
далее /usr/sbin/squid -k reconfigure и лезем сначала под собой (нам должно быть можно), затем под кроликом (ему долно быть нельзя). Файлик ERR_QUOTA должен лежать там где его ищет сквид (у меня /usr/share/squid/errors/English). Ежели заработало идем дальше.
2) Настраиваем квоты.
"Много думать надо нет". Файлик квот будет состоять из строк. Строки из слов. Слова разделены пробелами. Первое слово - лимит в байтах. Второе и последующее - имена юзерей. Ежели имен нет - квота распространяется на всех, для кого явно не указана. Создаем файл /etc/squid/quota/quota.conf
Постарайся не писать лишних пробелов и не добавляй пустых строк. Здесь мы ограничиваем до ~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
По второму
По второму вопросу опять жеж скрипт в кроне (реалтайм не канает).