Документация по ОС FreeBSD Понедельник, 29.04.2024, 18:14
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Squid

Квотирование трафика на 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

Буду рад замечаниям и предложениям.


Источник: http://www.opennet.ru/base/net/squid_rus_quote.txt.html
Категория: Squid | Добавил: oleg (29.12.2007) | Автор: Ильин Дмитрий, Калуга
Просмотров: 1954 | Рейтинг: 5.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024