IPB

Добро пожаловать, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Квотирование трафика на SQUID с поддержкой русскоязычных имен пользователей (squid rus proxy acl auth freebsd)
Leo
Feb 23 2009, 12:48 PM
Сообщение #1


Administrator
***

Группа: Root Admin
Сообщений: 128
Регистрация: 29-April 07
Пользователь №: 1



Выкладываю свое решение по управлению интернет-трафиком, прошедшим через SQUID.

Задача:
- Подсчет трафика.
- Суточное квотирование трафика по пользователю или по IP адресу.
- Возможность изменения квот "на лету".
- Поддержка русскоязычных имен пользователей (относится к пользователям домена NT).
- Просмотр статистики и управление квотами через веб-интерфейс.


Реализация:

- ОС FreeBSD 6.1-RELEASE i386
- SQUID-2.5
- Apache-1.3 + PHP-5.1 + MySQL-5.1


Средства разработки:

- perl-5.8.8
- P5::Mysql (/usr/ports/databases/p5-Mysql)
- P5::DBI (/usr/ports/databases/p5-DBI)
- PHP-5.1



Подробное описание решения находится в скрипте (вызов с ключом --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>)

acl InternetUsers proxy_auth REQUIRED
http_access allow InternetUsers


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

User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0 -

 






HitUA.net