SDQuota

Комплект скриптов для мнгновенного учета и ограничения трафика через прокси-сервер Squid: модификация оригинального SDQuota, написанного Richard Greaney.


Введение

Когда понадобилось сделать для одного из клиентов учёт и ограничение доступа в Internet с использованием прокси-сервера Squid, я нашел на сайте SourceForge проект SDQuota. К большому сожалению, представленный в разделе Files пакет является крайне неполным – это обычная alpha-версия. Но сама идея мне понравилась и я довел этот пакет до полноценно-работоспособного состояния.


Компоненты пакета


rtparse.pl

Скрипт сбора статистики запускается сразу после старта прокси-сервера squid, получает данные из логфайла прокси-сервера и сохраняет полученные данные в файлах, индивидуальных для пользователей. Трафик, полученный из кэша прокси-сервера, не учитывается.


sqinfo.pl

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


procjnl.sh
1aday.pl

Скрипты сброса статистики просматривают файлы с данными по трафику пользователей, выводит в файл протокола суммарные даные по каждому пользователю и удаляет исходные файлы. 1aday.pl производит действия для одного пользователя, заданного в параметре; procjnl.sh вызывает 1aday.pl для каждого пользователя.


getbal.pl

Скрипт диагностики использования квоты просматривает файл указанного в параметре пользователя и завершается с кодом возврата 1 в случае использованной квоты и 0 в случае неиспользованной квоты.


sdsetquota.pl
Скрипт установки квоты принимает параметры – имя пользователя и значение квоты, просматривает файл с квотой для пользователя и записывает в него новое значение квоты (при необходимости создаёт файл).


fixbalance.pl
Скрипт пересчёта использованной квоты для всех пользователей. Просматривает файлы с записями об использованном трафике, читает квоту и баланс из файла с квотой для пользователя и при обнаружении различий записывает в него новое значение баланса.


sdquota_auth.pl
Скрипт-врапер для аутентификации пользователя. Если пользователь использовал квоту - доступ ему запрещается. Собственно аутентификация производится программой, которая вызывается из этого скрипта. Применимо только для аутентификации методом BASIC.


sdq_redirector
Скрипт для ограничения доступа пользователя по превышении квоты. Если пользователь использовал квоту, его запрос перенаправляется на указанный в скрипте URL. При необходимости вызывается внешний редиректор (например, rejik).


parseuser.pl
Скрипт, анализирующий лог Squid для одного пользователя. Можно использовать при поиске ошибок.


all.sh
Скрипт для сбора трафика из всего access.log. Можно использовать для восстановления утерянных данных об использованном трафике.


squid.sh
Старт-стопный скрипт. При указании параметра "start" запускает rtparse.pl, затем squid. При указании параметра "stop" останавливает squid, затем rtparse.pl.


start.sh
Стартовый скрипт, запускает rtparse.pl.


stop.sh
Стоповый скрипт, останавливает rtparse.pl.


Настройки


Скрипт сбора статистики запускается из стартового скрипта squid (/usr/local/etc/rc.d/squid.sh) с использованием программы tail таким образом, чтобы скрипт получил только последнюю строку лог-файла и получал все новые записи из него, команда:

(/usr/bin/tail –n 0 –F /var/log/squid/access.log | /usr/local/etc/squidquota/ rtparse.pl &) ; echo “ squidquota”.


При остановке squid тем же скриптом работа rtparse.pl завершается сигналом TERM, команда:

PIDD=`/usr/local/bin/psgrep rtparse.pl | cut -c1-5` ; /bin/kill $PIDD $(( $PIDD - 1 )) && echo " squidquota"


Скрипт сброса статистики рекомендуется запускать ежемесячно в 00 часов первого числа месяца (или в любое время ночью между месяцами).


© Стас Дёгтев (Stas Degteff, Grumbler) – g (at) grumbler (dot) org