Уже в течение полутора лет я работаю в некотором подразделении, где Интернет пользуется большой популярностью. Соответственно, если не контролировать сотрудников, то они вполне могут превысить все возможные лимиты и нагнать отделу огромный трафик за небольшой отчетный период. Чтобы этого не произошло, мне пришлось довериться софту, который составляет статистику и в случае необходимости автоматически блокирует доступ в глобальную сеть.

1. С чего все начиналось?

На самом деле, вся идея насчет организации статистики пришла в голову не сразу. В первую очередь я поставил голимый Squid, через который юзеры авторизовались и браузили страницы Интернета (чаще всего порносайты :)). Через некоторое время работники отдела почувствовали волю и вышестоящий провайдер вынес подразделению счет в несколько тыров. Мне (как и начальнику отдела) это очень не понравилось, поэтому пришлось ставить софт, задача которого - мутить статистику на каждого сотрудника.

Я тестировал две программы, предназначенные для парсинга логов squid'а. Это всем известный sarg и менее известный webalizer. Эти проги показали хороший результат, однако ни одна из них не умела автоматически блокировать доступ и выставлять лимит для каждого сотрудника (или хотя бы общий предел трафика). И вдруг я наткнулся на прекрасное творение русского программера под названием stc.

2. Комплект бесплатных утилит.

Сайт многообещающей программы называется http://stc.xlan.ru. Здесь предлагается слить все необходимые исходники проектов. Среди них можно увидеть такие названия как stc, squidGuard и известный sarg. Можно догадаться, что stc - это всего-навсего набор скриптов, организующий симбиоз двух разных программ.

Я скачал все программы, которые предлагал автор и в первую очередь установил модули для Apache. При попытке собрать
stc инсталлятор выругался на отсутствие BerkleyDB. При установке этой базы существуют свои тонкости. Во-первых, необходимо юзать старую версию 2.7.7 (если брать новую ветку 4.x, то stc откажется компилироваться). Во-вторых, чтобы сконфигурить проект нужно перейти в каталог db-2.7.7/build_unix, а затем написать "../dist/configure".

После того, как я собрал злополучную базу, мне предстояло скомпилировать stc и squidGuard. Последняя софтина служила для зарезки "неправильных" сайтов и запрета на скачивание некоторых файлов. Это может быть полезно если начальство запрещает своим подчиненным лить mp3 и посещать порносайты :).

3. Настройка, установка.

Первое, что мы будем настраивать - это конфиг stc. Дело в том, что в мануале на сайте разработчика есть некоторые неточности. Настраивая конфиг, опираясь на приложенную доку, я н сумел добиться
работоспособности проекта. Поэтому советую учиться на чужих ошибках, а не на своих. Так что слушай сюда:

Первый параметр в конфе /etc/stc.conf называется site_ip. Именно он определяет ip-адрес сервера, на который ты воткнешь статистику. Вторая опция имеет имя stc_path. По моему дефолтовое значение /usr/local/stc/etc несколько длинное, поэтому рекомендую исправить его на /etc/stc.

Что касается кодировки, то здесь можно смело использовать cp-1251. В отличие от sarg'а, который некорректно отображал русскую кодировку в некоторых браузерах (в частности opera), stc не замечен в подобном недостатке.

Далее идет параметр SC_path. Он определяет путь к конфигу sarg. Вернее, к конфигу stc для sarg, а не к твоему старому конфигурационному файлу. Основное их отличие в том, что stc'шный конф не имеет параметра output_dir, директория для отчетов определена в опции reports_dir.

Опция www_data_path определяет путь к www-каталогу, где располагаются скрипты stc. Лично я создал папку stat в корне WWW и объявил путь к ней. Слэш в конце значения этой опции не нужен.

reports_dir, как я уже говорил, определяет каталог для отчетов sarg. Можно создать папку как внутри каталога stat, так и отдельно, например,
/sarg.

Остальные опции определяют пути к логу squid, конфигу squidGuard и конфигу squid.

Еще два параметра, на которые хочется обратить внимание
- называются exclude_hosts и local_eth_device. Первый определяет путь к файлу с хостами, которые не включаются в статистику (например, если на предприятии существует локальная сеть, обращение к которой никак не тарифицируется, вполне разумно записать ее ip-ранжир в соответствующий конфиг). Вторая опция определяет название локального сетевого интерфейса, который используется для обрыва соединения. Очень важно убедиться в его правильности. Например, по ошибке я задал вместо eth1 другой интерфейс и долго не мог понять, почему доступ должника не блокируется. Будь внимателен.

С остальными опциями ты разберешься сам. Если будут вопросы - смотри доки автора, либо пиши мыло - я отошлю тебе свой конфиг к stc (я не жадный :)). А сейчас мы займемся настройкой дополнительных файлов stc, необходимых для правильной работы.

Перейди в каталог /usr/local/stc/etc (или, если ты его уже перенес, в другую папку). Там ты увидишь туеву хучу небольших файлов. Все они необходимы для правильной работы системы. Начнем настройку по алфавиту:

admin.users - сюда записываются администраторы проекта. Они имеют право залогиниться в админ-зону.
allign.otdel - здесь оформляется номер и название отдела. То есть, если ты запишешь в файл строку "1:Первый отдел" это будет правильно (не забудь перевести локализацию в режим cp1251, иначе на WWW название отдела будет отображаться в koi8).
allow.users - все пользователи, которые имеют доступ к сети Интернет. Если по какой-то причине ты не занес логин в этот файл, система не даст юзеру доступа к глобалу. Хорошо, если ты забудешь занести рядового пользователя, а не начальника отдела :).
blocked.users - заблокированные юзеры, имеющие задолженнности. Здесь ничего менять не надо, логины в этот файл попадают автоматически.
boss.users - файл, включающий логины начальников отделов. Если у тебя на попечении один отдел, укажи логин своего начальника, а через пробел номер отдела (например, так: "boss 1"). Начальникам отдела будет предоставлена персональная страница со статистикой по всем пользователям подразделения.
password - файл, выступающий как в качестве .htpasswd, так и в качестве авторизационного конфига для squid. Позаботься, чтобы путь к этому файлу находился в squid.conf (опция auth_param_basic_program). До настройки squid мы еще не дошли.
oNUMBERusers (где number - номер отдела) - файл, в котором занесены все сотрудники отдела.
traffic.users - в этом файле располагаются все логины отдела, а через пробел указан лимит трафика, которым обладает пользователь. Если он превысил этот предел, логин автоматически блокируется.

trusted.users - здесь располагаются ip-адреса доверенных пользователей, которые не авторизуются паролем через squid.

Вот, собственно, и вся настройка stc. Теперь, чтобы система заработала, необходимо произвести тюнинг squid.conf. В первую очередь указываем следующие параметры:

logfile_rotate 10
emulate_httpd_log off
redirect_program /usr/local/bin/squidGuard
redirect_children 5
redirector_bypass 5

Это необходимо для правильной работы с логами, а также для того, чтобы пропускать все запросы через squidGuard. Эта приблуда по необходимости будет резать ссылки на порносайты, музыку и прочие нехорошие вещи.

Я надеюсь, что у тебя уже настроена авторизация по паролю. Среди ACL найди строку доступа для trusted_users и укажи файл с доверенными айпишниками (который trusted.users). Также не забудь указать путь к авторизационному .htpasswd-like-конфигу (он находится в каталоге с конфигами к stc и называется password).

Осталось лишь поднастроить конфиг squidGuard'а. По дефолту он находится в /usr/local/squidGuard. В нем находятся вкладки с объявлением путей к различным ip-листам (для "хороших" пользователей, для админов и для рядовых сотрудников). В соответствие с этим, людям разрешается, либо запрещается качать авишники, mp3, обращаться к сайтам, включающие в названии "xxx" и т.д. Я не обращаю на настройку особое внимание, т.к. про squidGuard в одном материале не написать. А дефолтовой настройки конфига вполне хватит для хорошей работы stc.

В завершение настройки связки squid+squidGuard перечитай конфиг прокси-сервера командой /usr/local/sbin/squid -k reconfigure и убедись, что в процессах появились пять идентичных squidGuard'а.

Осталось настроить Web-зону. В первую очередь, необходимо описать права к каталогу /path/to/web/stat (или к виртуалдомену, если ты решил его создать). Я не буду описывать апачевые выкладки, так как они есть в документации к stc. Скопировав все настройки из документации, я не ощутил никаких проблем, поэтому, думаю, вопросов по этой части возникнуть не должно. Перекинь всю структуру папок из дистрибутива stc (подпапка apache) на WWW-зону и проставь атрибуты 755 к cgi-сценариям.

На этом шаге я расслабился и подумал, что теперь все должно заработать. Но не тут то было :). Встретился очень неприятный подводный камень, который заключался в том, что все скрипты суидны и имеют фиксированный апачевый uid. Как следствие, система не дает запустить сценарий, который не прошел taint-проверку (а таких экземпляров оказалось немало). В связи с этим мне пришлось проставить в каждый suid-скрипт параметр -U в шапку сценария (после этой операции она стала выглядеть так: #!/usr/bin/perl -U), и только тогда скрипт успешно запустился. Возможно, это отклики моей системы (AltLinux 2.2), и тебе не придется прибегать к таким извращениям.

Наконец, после обращения к www.host.com/stat передо мной появилась дефолтовая страница stc. Залогинившись под админом, я зашел на страницу администратора, где сумел посмотреть статистику по каждому аккаунту. Здесь же я корректно завел лимит трафика для каждого пользователя и ограничил канал некоторым резвым сотрудникам. Чтобы резать канал, необходимо убедиться в том, что squid скомпилен с опцией --enable-delay-pools, а также разрешить уиду apache редактировать конфиг. Чтобы не испытывать геморрой с настройкой, я выставил овнера apache на squid.conf, настроил пулы через скрипт, а затем снова органичил права доступа к конфигу прокси-сервера.

Затем, как я уже сказал, мне пришлось немного повозиться с тестированием отрубания соединения (ошибка была в неверном имени интерфейса), а также слегка подредактировать дефолтовую пагу stc. В результате получился вполне милый проект, который понравился моему начальнику отдела. Этим проектом я пользуюсь уже полгода и очень им доволен. Надеюсь, тебе он тоже понравится, ибо таких аналогов я еще не встречал. Пользуясь случаем, передаю автору проекта большой респект, а тебе желаю поменьше проблем с настройкой статистики.

Check Also

Антивирусные будни. Как аналитики Avast детектируют новые угрозы

В конце октября компания Avast провела мероприятие CyberSec & AI в штаб-квартире компании …

Оставить мнение