Вполне обхожусь своими "костылями". На отработку лога squid-а в 25М тратится 2-3 сек. При превышении лимита трафика юзверя выкидывает из passwd. Интервал по крону - 5 минут.
Дёшево и сердито, и главное начальство довольно :)
Эх. Помню как года 3 назад писал программку для обсчета логов в реальном времени для Internet-кафе. Пронцип как у "tail -f".
Как только пользователь привысил лимит - его сразу отрубают. И не надо ждать 5 минут и нагружать процессор при обсчете логов.
Программа до сих пор считает трафик в этом заведении. Все довольны.
Так что и на Squid'e можно нормально обсчитвать трафик. Без всяких "костылей".
А если юзер поставил тянуться десятигигабайтный файл, который вытянется целиком и попадет в лог одной строкой.
А лимит, к примеру 100M.
Как твоим методом достигается нужный результат?
Люди, расскажите как _правильно_ сделать учёт трафика. Если быть совсем точным, то нужен не только учёт трафика, а полноценный биллинг.
Условия задачи таковы:
есть комп подключённый к инету через кабельный модем (eth0) и к локальной сетке в 20 компов (eth1). На компе с инетом стоит линукс с 2.6 ядром, на остальных компах в сетке винда 98/XP. Хочется дать народу из сетки инет, но обязательно нужен нормальный учёт трафика, т.к. цена за Мб инета довольно высока и на шару давать пользовать инет у меня нет ни средств, ни желания.
Требования к системе учёта:
1. нужно считать сколько мегабайт входящего и исходящего трафика использовал каждый из пользователей;
2. нужно дать возможность народу пользоваться как можно большим кол-вом различного сетевого софта использующего разные протоколы (http, ftp, irc, icq, jabber, ssh, smtp, pop3, imap4 и т.д.). Следовательно учёт трафика через squid'овские логи отпадает;
3. необходимо также сделать систему учёта устойчивой к попыткам пользователей поменять свой ip и/или mac адрес. Юзера они ведь хитрые некоторые точно попытаются посидеть в инете на халяву и/или за чужой счёт. :(
4. биллинг скорее всего должен быть организован по prepaid схеме, т.е. ко мне приходит юзер и оплачивает наперёд 100 Мб трафика, после этого он может пользоваться интернетом до тех пор, пока он не израсходует эти 100 Мб. Как только он исчерпал свой лимит интернет для него сразу же обрубается;
5. нужен хотя бы простенький веб интерфейс, через который каждый пользователь смог бы посмотреть кол-во использованного инета, а также сколько мегабайт у него осталось.
Согласно пункту 2 подходящим решением является учёт трафика с помощью цепочек iptables. Может быть существуют ещё какие-нибудь варианты учёта? Мне кто-то говорил про пакет net-acct в дебиане, это может помочь?
По пункту 3 есть подозрение что для этого нужно использовать pptpd. Так ли это? Что ещё можете посоветовать?
Очень прошу помочь, т.к. народ без инета страдает :) Прошу прощения если где-то в своих рассуждениях я неправ - для меня это новая тема.
По п.3 - лучше вместо pptpd выбрать pppoe. Ко всему прочему обезопасишь себя от подмены пользователем IP-шника твоего маршрутизатора.
По существу: именно такая схема - pppoe+iptables+mysql+web с завязкой на состояние лицевого счета клиента поднимается мной по заказу знакомого на его маршрутизаторе. Так что будут вопросы - пиши на vitalka_at_technodesign.ru.
> А если юзер поставил тянуться десятигигабайтный файл, который вытянется целиком и попадет в лог одной строкой.
А лимит, к примеру 100M.
Для сквида есть патчик, после которого информация в access.log попадает кусочками (см. ftp://services.td-net.ru/pub/squid4mysql/). Так что можно закачки блокировать и в процессе.
Спмописным биллингом, ясное дело. В этом деле каждый изобретает свой собвственный велосипед.
У меня велосипед образца 1998го года, с костыляи образцов 2000го и 2001го годов ;)
Этот патч проблему не решает. Ну то есть да - мы можем узнать что юзер превысил лимит гораздо раньше, однако каким образом предлагается дропнуть превышающий коннекшен? squid restart - не вариант.
Я бы стал работать на уровне файрволла - применительно к FreeBSD ipfw > лог на всех интерфейсах. Извини, с Линуксом никогда не работал, думаю пакеты там тоже можно считать, а потом обрабатывать статистику.
Кстати на фре(в 4 и 5) почему-то сквид если redirect указан выпадает с ошибкой типа не могу еще задачу поднять. Сам перегружается - далее работает нормально. С правами все нормально - иначе он бы вообще не поднялся. Все работает, но это бесит! В чем причина, так и не понял ((( Причем squid -k reconfigure нет проблем. Кто мне скажет где я что не дописал и в чем я не прав?
Господа, а чем Вам не нравится NetAMS для подсчета трафика?
Работает чУдно, считает все, что нужно. Документация на русском, примеры конфигов есть.
А что еще то нужно?
> man arp - ключ -f либо как правильно советуют - PPPoE, а кто говорит что 20 PPPoE сеансов - пусть очнётся - PIV/Opteron стоит меньше 150USD.
как альтернатива - P100-166 и мать с socket5/7 + 4xdlink-580tx - получаете 16 портов + ещё можно пару isa 3c509b воткнуть:-)
> биллинг скорее всего должен быть организован по prepaid схеме
PPPoE опять же решает эту проблему - фактически можно применить dial-up технологии (RADIUS), под которых написана просто ТУЧА программ да даже можно и свою написать (как сделали мы для обычного dial-up, применив FreeRADIUS и написав небольшой скрипт для pppd для учёта предоплатников)
для PPPoE - всё точно также. на самом деле - RADIUS - это тоже круто. только сразу с БД завяжитесь - проще будет стат-ку снимать и редактировать записи.
> с помощью цепочек iptables
советую посмотреть на QUEUE - я писал прогу под это для учета в игровом клубе под asta - это несложно.
net-acct - плоха тем что полузется pcap со всеми вытекющими.
у ipac-ng - свои гуси но по крайне мере меня он устроил.:-)
с bugtraq: "pptpd flawed by design".:-)
>А лимит, к примеру 100M.
>Как твоим методом достигается нужный результат?
Никак. Заказчик был предупрежден об этом.
Это его как раз и устраивает.
Как еще кроме squid'а (или дрyгого proxy) с авторизацией вести учет, если некоторые пользователи работают на терминальном сервере или по X11-протоколу.
anonymous
()
[#]
Ответ на:
traffic
от mumpster 06.02.2005 20:29:50
Re: traffic
Ну так сразу и URL на патчи бы дал или ключевые слова для гугля ;)
Ну с "дискретным биллингом все ясно" - есть некие счетчики (iptables, ipfw, traffd - по вкусу) и вы раз в час с них статистику снимаете. А вот как организовать эффективный (не жрущий все процессорное время) биллинг в реальном времени? поделитесь опытом/идеями?
> дискретным биллингом
в смысле - дискретынй?
он в любом случае - дискретный. по определению.
Вы имеете, наверное, в виду т.н. :"online billing"?
дык с помошью iptables можно это легко организовать:
QUEUE и своя прога - руби пожалуйста на лету!
вопрос лишь в том чтобы праивльно организовать быстрый просмотр таблицы в памяти (видимо hash/btree, может ещё что-то типа patricia)
недоделанный образец можно взять на моём хомяке.
Что-то я там не нашел ничего подходящего. Ну то есть патч для сброса лока кусочками в fifo я там таки нашел, но как решать проблему с тем что вот лимит превышен, но есть еще открытые коннекшены у ентого юзера,
по которым он что-то продолжает активно тянуть - не вижу.
[#]
Ответ на:
Re: Traffic
от anonymous 07.02.2005 10:25:32
yo
> через пайп
я где-то это слово сказал?
я сказал QUEUE. это RTNETLINK. man iptables.
каждый - не надо. но вот лимиты через QUEUE сделать - элементарно.
> лимит превышен, но есть еще открытые коннекшены
если по превышению лимита делать -k reconfigure - то точно сбросит :-)
а вообще - таки-да, проблемка. честно говоря - мне ещё лично не надо было этим заниматься. всё равно начальство обычно устраивает по границе дня.
[#]
Ответ на:
traffic
от mumpster 07.02.2005 13:08:24
Re: traffic
-k reconfigure таки не вариант, потому как он всех сбросит. И далеко не все коннекшены которые он собросит можно будет потом попытаться открыть заново.
выковыриваем адрес и килобайты, сравниваем с заданным порогом, попал за порог - айпишник в файл, http_access deny all _файл_, squid -k reconfigure.
вот такое имхо
Этот вариант предполагает расчет и лимитирование траффика по IP.
Но в некоторых местах с одного IP в разное время могут работать разные пользователи.
И лимитировать нужно именно пользователей. Вот тут и приходится парсить логи.
А кто сказал что юзера локальные? юзера ходят с совсем других тачек. Через squid.
Откуда firewall узнает для какого там юзера сейчас squid тянет ентот файл...
Нет, пускать всех напрямую тоже не предлагать (да и как оно узнает что то что для x.x.x.10 сейчас тянется э то для юзера вася, а юзер лена оттуда ушел 5 минут назад)