The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Квотирование трафика на SQUID с поддержкой русскоязычных имен пользователей (squid rus proxy acl auth freebsd)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: squid, rus, proxy, acl, auth, freebsd,  (найти похожие документы)
From: Ильин Дмитрий, Калуга <dm80@kaluga21vek.ru.> Newsgroups: email Date: Mon, 6 Dec 2007 14:31:37 +0000 (UTC) Subject: Квотирование трафика на 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 Буду рад замечаниям и предложениям.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, PbI6a (?), 15:27, 06/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как я понял по написаному для учёта по именам пользователей, а не по IP, клиенты должны использовать прокси не прозрачно?
     
     
  • 2.2, Dmitry (??), 16:58, 06/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    При прозрачном проксировании авторизаия пользователей неработает
     
  • 2.3, dm80 (ok), 17:54, 06/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Само собой. При прозрачном проксировании аутентификация пользователей не проходит.
     
  • 2.7, ten (?), 06:52, 07/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Что вам мешает использовать external_acl_type
    Можете фильтровать и по src и по dst
    http://www2.tw.squid-cache.org/Versions/v2/2.6/cfgman/external_acl_type.html
     
     
  • 3.8, PbI6a (?), 08:32, 07/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Ни что не мешает, и, собственно говоря, это и использую. Просто все не оставляет надежда найти готовый реализованный костыль позволяющий обойти написаное черным по белому в доках сквида ограничение на отсутствия получения аунтификационных параметров при прозразном проксировании. Самому написать хелпер для сквида которые бы получая IP пользователя лез бы на машину с этим адресом и если там винда возвращал бы сквиду логин/GID пользователя залогиненого там на консоле мне, к сожелению, мой уровень програмирования не позволяет.
     

  • 1.4, sdm (??), 18:17, 06/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > назначение скрипта:
    > 1) запись лог-данных SQUID в БД MySQL ("на >лету", посредством pipe);

    имхо, из-за использования FIFO,
    это творение не стоит юзать при более-менее серьезной нагрузке, скорее всего возможны потери.

     
  • 1.5, Аноним (5), 23:23, 06/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    очередной велосипед? Сколько этих скриптов для подсчёта трафика в squid? И с MySQL и с Postgres и с AD и чем только нету...

    Хоть бы кто озаботился провести сравнительный анализ и рассказать, почему у него лучше...

     
     
  • 2.6, Дмитрий (??), 01:46, 07/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    По поводу потерь при нагруженной системы, можно было бы привести к примеру цифры. В моем случае - ~50 одновременных подключений (регулируется параметром redirect_children). К сожалению нет возможности протестировать в более серьёзных условиях. (Если кто сможет - жду с нетерпением комментариев :) )
    Насчет "велосипеда" не могу не согласиться. Но думаю это больше касается подсчета трафика. В действительности - это задача для школьника, написать подобный скрипт, первоначальное назначение моего - квотирование. Тут не все так гладко. Лично я не встретил ни одного удовлетворительного решения на этот счет, в связи с чем и решил написать собственное.

    Насчет сравнительного анализа могу привести лишь то что сам использовал - LightSquid. Первый недостаток, бросающийся в глаза - хранение данных в текстовом формате (Имя пользователя - отдельный файл). Второй - запуск импорта данных по крону, что тоже не очень удобно. Третий - возможность квотирования практически отсутствует (исходя из второго :) )
    Squid2Mysql - неплохое решение, однако в какой то версии я заметил серьезную ошибку - соединение с БД происходит один раз, при запуске скрипта. Т е если в процессе работы мускль перезапустить (например), прокси сервис аварийно завершит работу.

    Далее, честно говоря, тестировать чужие решения не хотелось, т к уровень их (ИМХО) - студенческий, в связи с чем написал свое :)

     

  • 1.10, www.andr.ru (?), 09:33, 07/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    IMHO для ограничения трафика лучше пропатчить сам сквид. он легко может на старте пропарсить свой лог, составить табличку с юзерами и трафиком и при каждом запросе юзера её апдейтить и контролировать трафик. Будет работать гораздо быстрее, особенно если заюзать Oracle Berkeley DB и табличку хранить в ОЗУ. Совсем не понимаю, почему разработчики не включили эту фичу в кальмара - она нужна буквально всем
     
     
  • 2.11, Dvar (?), 10:55, 07/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    А есть ли возможность в squid аутентифицировать пользователей, если они в инете не тока браузят? Например Radmin'ом или обычным удаленным рабочим столом человек сидит и ковыряется у клиентов, либо еще какие-то программы используются.Как учесть такой трафик?
    У мелкомягкой ISA Server есть Firewall client, который заворачивает весь трафик клиентской машины на ISA Server, при этом добавляя учетные данные. В никсах есть прокся с такими же клиентами??
     
     
  • 3.14, coroner (?), 14:58, 07/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    сквид это http-proxy. соотвесна делаем вывод, что radmin,rdp,pop3,imap,smtp,icq,msn считаем другими вещами
     
     
  • 4.16, Dvar (?), 15:38, 07/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >сквид это http-proxy. соотвесна делаем вывод, что radmin,rdp,pop3,imap,smtp,icq,msn считаем другими вещами

    а есть другие решения для этого?

     
     
  • 5.17, coroner (?), 16:31, 07/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >>сквид это http-proxy. соотвесна делаем вывод, что radmin,rdp,pop3,imap,smtp,icq,msn считаем другими вещами
    >
    >а есть другие решения для этого?

    Исходя из целей:
    1)Статистика посещений страниц-squid
    2)Статистика по другим протоколам -масса. pmacct, net-acct, ulog iptables etc

    в общем и целом сходи сюда
    http://www.opennet.ru/prog/sml/#26

     

  • 1.12, coroner (?), 14:38, 07/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Много развлекался с такими подсчетами.Могу сказать что тоже не встретил ни одного нормального решения, которое удовлетворило бы меня.
    Небольшой сравнительный анализ могу привести:
    lightsquid - плюс очень шустрый,минус для переноса в БД нужно дописывать, минус-русские имена пользователей с пробелами.
    sams - плюс-почти все можно делать через веб-морду. минусы-косяки с кодировками(есть кои8 и вин, при iconv -f koi8-r -t utf8 вылезают косяки в яваскрипте),периодически выискивал косяки в коде php(в частности в том что касается пользователей в AD).
    squid-pb - плюс-написан на си.оооочень шустрый.минус-fifo, минус-не очень коректно работает с кавычками
    sarg - плюсов особых нет.минусы-кодировки,в бд-дописывать.
    у всех, что работают с БД есть самый большой минус: отсутствие проверки на уникальность записи (за 2 года не нашел в логах ни 1 неуникальной записи).оно и понятно: при проверке, скорость записи в БД снижается порой в тысячи раз.
    например скрипт
    cat access.log | \
    sed "s/'/\\\'/g" | sed 's/\"/\\\"/g' | \
    awk '{print "INSERT INTO squid  VALUES
    \(\""$1"\",\""$2"\",\""$3"\",\""$4"\",\""$5"\",\""$6"\",\""$7"\",\""$8"\",\""$9"\",\""$10"\"); "}'
    \| mysql -u root --password=password billing
    отрабатывает порядка 12000-15000 записей в сек, а аналогичный но с проверкой отрабатывает примерно 300-500 записей.
    если есть у кого желание могу отдать скрипты на пхп для последующей переписки оных на си, ибо сам не силен в последнем.что умеет: читает директорию с логами, если видит старые логи-кидает оные в базу, потом ротейтит сквид, читает access.log.0 .ну и соотвесно умеет проверять уникальность и умеет после перегонки в базу кидать в какойнить бекап-файл (его еще и пилит по N количеству строк).ну и по мелочи: конвертит юзверей из url в нормальный utf8 и добавляет слеши в УРЛах
     
  • 1.13, coroner (?), 14:56, 07/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    да и еще.после всяческих развлекух, пришел к выводу, что нужно делать связку freeradius+poptop+mysql+ulog+squid+MTA
    схема работы:
    все юзвери и логи (кроме MTA) в mysql
    пользователям жестко прописываются IP адреса
    сквид http запросы заворачиваем на squid
    ulog натравливаем только на редиректы pop3,imap,icq,https(3-й сквид и https мягко гря все плохо),ftp
    все внутренние сервисы выносим из VPN подсети (чтобы не считать например трафик до сайта со статистикой) и сотавляем только DNS.это нужно для того, чтобы оперативно брать цифры из таблицы radacct.при грамотной настройке цифры из radacct и цифры из squid+ulog совпадают на 99,99% (отличия будут только из-за того что винда любит широковещательные запросы)
    ну и соотвесна подсчет идет по squid (причем считать нужно не по DIRECT/ip_addr, а по статус кодам TCP_MISS и тд.встречал когда в одной строке стояли и TCP_MISS и DIRECT).
    не советую пихать в ulog http трафик,т.к. записей будет подавляющее большинство, а смысловой нагрузки несут мало (в общем и целом скажу, что если взять данные со сквида и данные с ulog, то они совпадают)
    настравиается данная связка примерно часа за 2.веб морда пишется бесконечно:)(80/20 пишется за день)
     
  • 1.15, coroner (?), 15:22, 07/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ну и последнее по поводу fifo
    падает демон сбора-падает и сквид.
    да и потери будут.
     
     
  • 2.18, sprite (?), 13:30, 08/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Еще как. У меня скрипт не успевал считывать и всё валилось. Единственное рабочее решение парсить лог. Поставил  syslog-ng, squid кидает лог в него, а syslog-ng squid-овские логи оформляет ежеминутно в новый файл YYYY/MM/DD/HH-MM.log далее через cron каждую минуту скрипт парсит лог сформированный в предыдущую минуту.
     
  • 2.22, dm80 (ok), 18:54, 14/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >ну и последнее по поводу fifo
    >падает демон сбора-падает и сквид.
    >да и потери будут.

    Речь идет о моей разработке? Смотри лог сквида, очень частая проблема - параметр
    redirect_children. Если количество пользователей превышает его значение, то сквид
    аварийно завершит работу. Это можно обойти, установив параметр redirector_bypass on
    (по умолчанию стоит off), но в этом случае если не будет хватать количества запущенных
    процессов редиректора, сквид просто пропустит клиента, а не остановится. Ну или, если позволяет ОЗУ, увеличить redirect_children до максимально возможноо количества клиентов :)
    PS: Если не так понял, и речь шла о другом, пардон :)

     
     
  • 3.23, coroner (?), 11:18, 17/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    не..я не про это
    я говорю про недостаток пропускания лога сквида через трубу...
    если коллектор, который читает этот pipe перестанет по каким-нить причинам читать, то соотвесно завалится и сам сквид..
    про пользователей в курсе и опытным путем выяснил что выставлять количество аутентификаторов нужно примерно в 4-5 раз больше, нежели пользователей присутствует в сети..ибо вот
     

  • 1.19, ntimmy (ok), 14:17, 08/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Попробуйте SAMS  в паре с ipcad отлично работает.
    Сделал подобное с авторизацией в домене NT4 на самбе. На ней же и файловый сервер понял. переделки в sams минимальные. добавляется один пункт меню для просмотра внешнего не http трафа по ip. в базу Sams одну таблицу с привязкой ip доменное имя. от прозрачного проксирования пришлось отказаться.
    Просто прикрыл доступ наружу на 20-21, 80 порт все хостам кроме ip пркси.
     
     
  • 2.20, bytestore (??), 23:10, 09/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    зачем все это делать через сквид? этоже cache engine %)
    для квотирования ну если нет циски то средствами фильтров
    в любом случае способа узнать пользователя на транспортном уровне нет :(
    нужно придумывать схему и тд, сквид тут не причем
    да и его способ вытаскивать пользователя не всегда работает
    это только экплорер и вроде мозила опера выдают от кого запущены
    а таже icq через проксю или например винамп уже не скажет кто его запустил
     

  • 1.21, Аноним (21), 09:51, 10/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    все смотрим в сторону nufw после этова ищем агент под венду =)
     
     
  • 2.24, nnmn (?), 11:46, 28/12/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >все смотрим в сторону nufw после этова ищем агент под венду =)
    >

    угу, в том то и проблема что агент под винду платный :( впору брать самому их lib и писать :/ а так штука конечно прикольная

     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру