Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: sarg + лимит трафика по пользователям  (Прочитано 5362 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн djrust

  • Автор темы
  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
sarg + лимит трафика по пользователям
« : 18 Октября 2010, 16:28:57 »
ubuntu 10.04
В общем настроен squid на ntlm + sarg считает статистику
Все хорошо,НО я хочу давать пользователям лимит на интернет(а лимиты разные)
Если лимит один,то проблем с блокировкой нет!

Если в sarg указать
per_user_limit /etc/squid/sarg_user_deny_50 50
то он записывает,пользователей привысивших 50 мб.....И эта строчка может быть только одна(У меня не получилось сделать вот так:

per_user_limit /etc/squid/sarg_user_deny_50 50
per_user_limit /etc/squid/sarg_user_deny_100 100
per_user_limit /etc/squid/sarg_user_deny_150 510
Т.е он не прописывает вообще

Подскажите как резать по трафику(желательно,только squid + sarg)

P.S: SAMS не предлагать

Пользователь решил продолжить мысль 18 Октября 2010, 18:47:27:
а еще такая проблема на одном сервере,что когда запускаю
sudo sarg

SARG: Records in file: 183, reading: 100.00%
и ничего не происходит!куда копать?
« Последнее редактирование: 18 Октября 2010, 18:47:27 от djrust »

Оффлайн Unreg

  • Активист
  • *
  • Сообщений: 751
  • Ubuntu 8.04 / Acer Aspire One 110 > Debian 5.04
    • Просмотр профиля
    • LJ
Re: sarg + лимит трафика по пользователям
« Ответ #1 : 18 Октября 2010, 19:05:27 »
для ограничения трафика целесообразнее использовать iptables quota, а для подсчёта трафика - netflow.
вот как реализовать учёт посещенных URL без http proxy - вопрос открыт

Пользователь решил продолжить мысль 18 Октября 2010, 19:16:59:
http://www.opennet.ru/tips/info/1797.shtml  <- Squid + LightSquid + Perl = ограничение по трафику
лично не проверял
« Последнее редактирование: 18 Октября 2010, 19:16:59 от Unreg »

Оффлайн djrust

  • Автор темы
  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Re: sarg + лимит трафика по пользователям
« Ответ #2 : 18 Октября 2010, 19:45:26 »
нашел скрипт блока по пользователям!но у меня нету .usr/local/bin/php ....что нужно установить?или в ubuntu другой путь?

ban.sh

#!/bin/sh

squid="./squid.sh reload"

cd /home/ft/ban
/usr/local/bin/php ban.php

## Юзер icq должен обязательно существовать
## иначе squid не запустится
sleep 5
echo "icq" >> user-deny

cd /usr/local/etc/rc.d
$squid
exit

ban.php

<?php
////Забаним нотисы
ini_set("error_reporting"E_ALL && ~E_NOTICE);

$i=0;
$f=date("dMY");
////Дату нужно менять каждый расчетный период
$dire="21May2006-".$f;
//Берем инфу про юзверов
$file1=file("http://ip_servera/sarg/$dire/index.html");
$file2=file("/home/ft/ban/ban.acl");
//в файл user-deny будут попадать юзверы которые привысили лимит
$ff=fopen("/home/ft/ban/user-deny""w");
//Разбиваем нашу базу ban.acl на части
foreach($file2 as $val)
{
$ld[$i]=explode(":"$val);
$i++;
}
//Разбиваем страницу саржа на части
$i=0;
foreach(
$file1 as $val1)
{
$ld1[$i]=explode(" "$val1);
$i++;
}
//Цыкл сравнения
for ($i=0$i<=count($ld1); $i++)
 {
 for(
$g=0$g<=count($ld); $g++)
   {
   if(
strpos($ld1[$i][2], "'>".$ld[$g][0]."</"))
      {
      
//Регулярное выражение извлечения количества байтов
      
preg_match('#(([\d]+).([\d]+).([\d]+))#'$ld1[$i][4], $regs);
      
$bite=$regs[2].$regs[3].$regs[4];
      
//Если лимит привышен юзвер попадает в файл user-deny
      
if($bite $ld[$g][1])
        {
      
//Можно также посмотреть через веб кто в бане 
      
echo ($bite." ".$ld[$g][0]."<br>");
      
fwrite($ff,$ld[$g][0]."\n");
        }
      }
   }  
 }

?>


ban.acl
user2:150000000: 
rov:100000000:   
user1:100000000: 
hu:100000000: 
la:200000000: 
voy:100000000: 
enko:300000000: 
eva:400000000: 
user54:300000000:

readme
1.Нужно в скрипте подправить пути.
2.Должен стоять пакет с поддержкой
perl регулярных выражений иначе preg_*
функции не будут работать.
3.в sarg.conf должны обязательно быть
следующие параметры:

language English
user_ip no
date_format e
date_time_by bytes
charset Latin1
show_sarg_info yes
show_sarg_logo yes
displayed_values bytes

так как этот скрипт адаптирован под эти параметры.

« Последнее редактирование: 18 Октября 2010, 19:48:46 от djrust »

Оффлайн Unreg

  • Активист
  • *
  • Сообщений: 751
  • Ubuntu 8.04 / Acer Aspire One 110 > Debian 5.04
    • Просмотр профиля
    • LJ
Re: sarg + лимит трафика по пользователям
« Ответ #3 : 18 Октября 2010, 19:48:17 »
$ aptitude show php5-cli
(Нажмите, чтобы показать/скрыть)

Оффлайн djrust

  • Автор темы
  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Re: sarg + лимит трафика по пользователям
« Ответ #4 : 18 Октября 2010, 19:50:16 »
уже устанавливал.....все равно пусто!

(Нажмите, чтобы показать/скрыть)

есть в /usr/bin/@php
« Последнее редактирование: 18 Октября 2010, 19:52:10 от djrust »

Оффлайн Unreg

  • Активист
  • *
  • Сообщений: 751
  • Ubuntu 8.04 / Acer Aspire One 110 > Debian 5.04
    • Просмотр профиля
    • LJ
Re: sarg + лимит трафика по пользователям
« Ответ #5 : 18 Октября 2010, 20:12:15 »
$ sudo su -c "which php5"
$ sudo whereis php5

Оффлайн djrust

  • Автор темы
  • Активист
  • *
  • Сообщений: 861
    • Просмотр профиля
Re: sarg + лимит трафика по пользователям
« Ответ #6 : 18 Октября 2010, 22:35:19 »
у блин....Спасибо!

нашел тут скрипт,пишут вот так!А работать будет?и что он делает?Что то у меня не работает

Я не силен в bash, но мне кажется, что сделать раздельные лимиты для пользователей проще следующим скриптом:

#/bin/sh

defaultlimit=1000000
squidcom='/etc/init.d/squid reload'
userlist='./userlist'


unlink blocklist

sarg -e stdout > /tmp/sarginfo
sed -e '1,/---------/D' -i /tmp/sarginfo
sed -e '/---------/,10000D' -i /tmp/sarginfo
cat /tmp/sarginfo |
        while read no userid connect bytes bytespercent elapsedtime milisec timepersent ; do
                bytes='echo $bytes | sed s/[.]//g'

                str='grep $userid $userlist'
                limit='echo $str | sed 's/(<[^ ]*>)([ ]*)(<[^ ]*>)/3/g''

                if test -z "$limit" ; then
                        limit=$defaultlimit
                fi

                if test "$bytes" -gt "$limit" ; then
                        echo $userid >> blocklist
                fi
        done
unlink /tmp/sarginfo

$squidcom

Файл userlist в виде:
пользователь лимит


Пользователь решил продолжить мысль 18 Октября 2010, 22:37:35:
у меня нету /tmp/sarginfo
« Последнее редактирование: 18 Октября 2010, 22:37:35 от djrust »

 

Страница сгенерирована за 0.255 секунд. Запросов: 24.