From: Ильин Дмитрий, Калуга <dm80@kaluga21vek.ru.>
Newsgroups: email
Date: Mon, 6 Dec 2007 14:31:37 +0000 (UTC)
Subject: Квотирование трафика на SQUID с поддержкой русскоязычных имен пользователей
Выкладываю свое решение по управлению интернет-трафиком, прошедшим через SQUID.
Задача:
- Подсчет трафика.
- Суточное квотирование трафика по пользователю или по IP адресу.
- Возможность изменения квот "на лету".
- Поддержка русскоязычных имен пользователей (относится к пользователям домена NT).
- Просмотр статистики и управление квотами через веб-интерфейс.
Подробное описание решения находится в скрипте (вызов с ключом --help).
Хотелось бы только отметить некоторые особенности, не описанные в справке:
1) Идея с записью данных сквида через FIFO канал в БД "на лету" была взята
мною из squid2mysql. Соединение с БД происходит в момент веб-запроса,
и если сервер БД недоступен, то скрипт пишет лог в резервный лог-файл,
что повышает отказоустойчивость прокси сервера на случай недоступности БД.
2) Данные из резервного лог-файла периодически просматриваются скриптом и
заносятся в БД, что предотвращает потерю данных при потере связи с БД.
3) Для авторизации пользователей в домене NT я использую SAMBA-3.0.26 + WINBIND,
а точнее модуль ntlm_auth, который идет в комплекте с самбой. Это решает проблему
русскоязычных имен пользователей, т к модуль проверяет членство пользователя в
доменной группе, а не само имя пользователя. Пример squid.conf:
auth_param ntlm program /usr/local/bin/ntlm_auth
--require-membership-of=DOMAIN_GROUP_CHANGE_THIS --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 100
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 20 minutes
auth_param ntlm use_ntlm_negotiate on
auth_param basic program /usr/local/bin/ntlm_auth --require-membership-of=DOMAIN_GROUP_CHANGE_THIS
--helper-protocol=squid-2.5-basic
auth_param basic children 100
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
authenticate_ttl 1 minutes
вместо названия группы я использую GID (можно узнать с помощью wbinfo -n <group>)
4) Если имя пользователя русскоязычное, в лог (а соответственно и в БД)
оно попадает в url-кодировке, а при просмотре статистики или
управлении квотой кодируется (декодируется) средствами PHP. В связи с этим
я исключил возможность добавлять квоты вручную через веб-интерфейс.
Они появляются автоматически при первом веб-запросе.
5) Алгоритм добавления пользователей/IP адресов в БД следующий:
КЛИЕНТ - объект квотирования,
если (ПОЛЬЗОВАТЕЛЬ АВТОРИЗОВАН) {
КЛИЕНТ = имя пользователя
} иначе {
КЛИЕНТ = текущий IP адрес пользователя
}
АДРЕС = текущий IP адрес пользователя
/* исключаем конфликт IP адресов и пользователей,
при смешанном квотировании */
если (КЛИЕНТ = имя пользователя) {
удаляем все записи, где КЛИЕНТ = АДРЕС
}
Скрипт скачать можно здесь:
1. http://sources.codenet.ru/file/1660/squidacc.tar.gz
2. http://www.opennet.ru/soft/squidacc.tar.gz
Буду рад замечаниям и предложениям.
986 Прочтений • [Квотирование трафика на SQUID с поддержкой русскоязычных имен пользователей (squid rus proxy acl auth freebsd)] [08.05.2012] [Комментариев: 0]