The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Squid + LightSquid + Perl = огранич..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Squid + LightSquid + Perl = огранич..."  +/
Сообщение от auto_tips (ok) on 16-Окт-08, 11:11 
Очередное решение на наболевшую тему.

Задача: имея squid с настроенной авторизацией пользователей и сбором статистики
сделать ограничение на используемый трафик (квоты).

Лично мне от sams пришлось отказаться т.к. он прикручивается к авторизации пользователей,
а для меня это неприемлемо.

Решение подойдет для тех, кому не сильно критично точное лимитирование.
Я сильно не хотел менять устоявшуюся систему авторизации пользователей.

итак.

1. настраиваем сквид (статей много, описывать не буду)
В squid.conf , желательно перед остальными ACL, надо будет добавить следующее


# блокировка пользователей которые превысили лимит (файл user-deny),
# и разрешение этим пользователям только тех IP и сайтов, которые перечислины в файле host.acl

acl no_quota url_regex -i "/etc/squid/no_quota_url.txt"
acl banusers proxy_auth_regex -i "/etc/squid/user_deny.txt"
http_access allow no_quota banusers allowedhost
deny_info ERR_QUOTA all
http_access deny banusers allowedhost all

по порядку что к чему с файлами:

no_quota_url.txt - ведется руками.
текст:

# файд содержит сайты, который открываются, даже если превышена квота и пользователь попал в users_deny.txt
test.ru
icq.com
205.188.

user_deny.txt - в дальнейшем создастся сам, но без него перечитать настройки squid не получиться

# файл содержит пользователей превысивших квоту.
# автоматически переписывается скриптом traf_limit.pl
dolzhen_bit_odin_user
user1
user2

ERR_QUOTA создадим по образу и подобию всех остальных страниц с ошибками.
Я поставил что-бы получать другой текст. вот так получилось:

<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<TITLE>Превышен лимит</TITLE>
</HEAD><BODY>
<H1><font color="FF0000">ПРЕВЫШЕН ЛИМИТ</font></H1>
<H2>
</H2>
<HR>
<P>Заблокированный URL:
<A HREF="%U">%U</A>
<P>
<UL>
<LI>
<STRONG> Вы превысили месячный лимит на интеренет.
<br> Если Вы считаете это неправильным, свяжитесь с отделом АСУ по телефонам
1013 или 1066
<br>
<br>Если этот сайт необходим для работы, то он может быть открыт по  служебной записке.
</STRONG>
<P>
</UL>
<P>С Уважением отдел АСУ.
</BODY></HTML>

allowedhost - мое правило проверки пользователей.


2. LightSquid абсолютно штатный. вот официальный сайт http://lightsquid.sourceforge.net/

Ставится и настраивается минут 5-10. Собственно вся настройка у меня заключалась в том,
что-бы рассортировать пользователей по группам. Для тех у кого еще есть http сервер
дополнительно будет красивая статистика. ;)

3. в /etc/squid создадим папку traf_limit

4. в /etc/squid/traf_limit создаем два файла

traf_limit.pl

#!/usr/bin/perl
#
# Довесок на LightSquid Project (c) 2004-2005 Sergey Erokhin aka ESL
#
# Скрипт создает файлик user_deny для ограничения инета по трафику

# Автор: Иван Лонин loninia@apksouz.ru  2008 год.


use File::Basename;

# коряво конечно напрямую писать путь к конфигу, но лениво было sh файлик для крона делать :)
require "/etc/squid/traf_limit/config";

#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
@dat=localtime(time);
$year =1900+$dat[5];
$month=1 + $dat[4];
$filter="$year$month";

#print "$log_path/$filter*\n";
@daylist=glob("$log_path/$filter*");

foreach $daypath (sort @daylist) {
   open FF,"<$daypath/.total";

   $totaluser=<FF>;chomp $totaluser;$totaluser=~s/^user: //;
   $totalsize=<FF>;chomp $totalsize;$totalsize=~s/^size: //;

   while (<FF>) {

     ($user,$size,$hit)=split;
     $h{$user}{size}+=$size;
     $h{$user}{hit}+=$hit;
   }
   close FF;
}
#
$cummulative=0;
open RES,">$res_file";
print RES "# файл содержит юзеров превысивших квоту.\n
# автоматически переписывается скриптом traf_limit.pl\ndolzhen_bit_odin_user\n";
foreach $user (sort {$h{$b}{size}<=>$h{$a}{size}} keys  %h) {

     $all4user=$h{$user}{size}/1024/1024;
     if ($vip_user{$user}{size} > 0) {
         $limit=$vip_user{$user}{size};
     }else{
         $limit=$all_limit;
     }

     if ($all4user >= $limit) {
         print RES "$user\n";
#        print "$h{$user}{size}\n";
     };

}
__END__


и файлик config


#!/usr/bin/perl
# конфигурационный файл для скрипта traf_limit.pl
#
# путь к логам lightsquid
$log_path="/www/lightsquid/report";

# файл в который пушутся пользователи превысившие лимит
$res_file="/etc/squid/user_deny.txt";

# лимит инета в мегабайтах
$all_limit=150;

# привелигированные пользователи с повышенным или пониженным лимитом
# для каждого пользователя строка формата:
#$vip_user={<имя_юзера}{size}=<лимит_в_мегабайтах>;
$vip_user{user1}{size}=5;
$vip_user{qwe}{size}=50;


назначим файликам нужного владельца и права на запуск

5. осталось в только в cron добавить запуск. Я сделал раз в сутки в 5-00.
делать вечером в 20 с чем нибудь категорически не рекомендую т.к. скрипт работает
на текущую дату (первого числа будут использоваться прошломесячные данные)

делаем

crontab -e

и добавляем для скрипта строчку вида

45 04 * * * /etc/squid/traf_limit/traf_limit.pl

и для сквида

0 05 * * * /etc/init.d/squid reload

собственно все :). естественно, что правильно оно начнет работать только с 1 числа следующего за установкой месяца.

Удачи.

Если есть вопросы пишите на loninia@apksouz.ru

URL:
Обсуждается: http://www.opennet.me/tips/info/1797.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от OLD email(ok) on 16-Окт-08, 11:11 
Если юзер качает фильм то поможет только автоматическое создание правила файервола на него.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от sapun (??) on 16-Окт-08, 14:24 
У меня Самса+Сквид шикарно работает с авторизацией по ip
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от luserz on 17-Окт-08, 08:18 
dhcp в локалке + терминальный сервер разрывает данную связку в клочья ;)
AD в локалке существует для своих собственных нужд.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от demimurych email on 17-Окт-08, 10:17 
был такой проект stc
он все это делал и даже еще больше
при чем имел веб морду
stc.nixdev.org

правда если не ошибаюсь уже очень давно не развивается.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от mc_ on 17-Окт-08, 13:42 
есть патчи под squid, которые позволяют писать в лог записи не по окончанию закачки, а каждые xxx кб.  
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

6. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Аноним (??) on 17-Окт-08, 16:57 
последний sams вполне устойчив
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Kisa email(??) on 19-Окт-08, 17:35 
Нет, не был. Есть такой проект. И по старому адресу. Может, не особо развивается, но поддерживается.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от igoritl (??) on 20-Окт-08, 10:47 
Все бывшие разработчики на опеннете собрались?:)
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от NicK email on 22-Окт-08, 10:29 
а как же Traffpro?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от ArtemK email on 10-Ноя-08, 16:34 
Не получается с vip_users.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от IZubov email on 18-Ноя-08, 10:03 
Доброго времени суток. У меня проблема с http_access. При написании конфига сквида по образцу автора, у меня даже заблокированные пользователи ходят в сеть. Использую авторизацию в AD через winbind.
кусок squid.conf :
http_access allow no_quota banusers REAL
deny_info ERR_QUOTA.html all
http_access deny banusers
http_access allow REAL
http_access deny all
Нюхом чую, что проблема где то в этих строках, но сам к сожалению найти ее не могу.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от root1985 on 22-Янв-09, 11:37 
http_access allow no_quota banusers REAL - здесь разрешается выход banusers
http_access deny banusers - здесь запрещается banusers выход
http_access allow REAL

Судя по этим строкам Вы одновременно и разрешаете banusers выход в интернет.
уберите http_access allow no_quota banusers REAL и попробуйте еще раз

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Раздел полезных советов: Squid + LightSquid + Perl = огранич..."  +/
Сообщение от Mosson email(??) on 18-Мрт-09, 15:46 
нифига ж себе.... тема ожила :)
на правах автора размещаю ссылку на оригинал статьи
http://www.itdepartament.ru/index.php/archives/60

давно я тут не был. давайте отвечу всем и по порядку:

1.
нашел баг маленький: файлик config выглядит так
#!/usr/bin/perl
# конфигурационный файл для скрипта traf_limit.pl
#
# путь к логам lightsquid
$log_path=”/www/lightsquid/report”;

# файл в который пушутся пользователи превысившие лимит
$res_file=”/etc/squid/user_deny.txt”;

# лимит инета в мегабайтах
$all_limit=150;

# привелигированные пользователи с повышеным или пониженным лимитом
# для каждого пользователя строка формата:
#$vip_user{<имя_юзера>}{size}=<лимит_в_мегабайтах>;
$vip_user{user1}{size}=5;
$vip_user{qwe}{size}=50;

были досадные очепятки в строчке описания

2.
по поводу других проектов и точности ограничения: я написал в статье почему их нее использую. невнимательно читали.

3.
to luserz
>dhcp в локалке + терминальный сервер разрывает данную связку в клочья ;)
>AD в локалке существует для своих собственных нужд.

ничего он не разрывает если сквид настроен на авторизацию пользователя, а не ip сервера, у меня у самого три терминальных+150 тонких клиентов

4.
to IZubov
скорее всего надо так ;) если REAL это ACL по проверке пользователей
http_access deny banusers REAL

5.
to root1985
неправда Ваша. Опять же невнимательно читали статью
http_access allow no_quota banusers REAL - здесь разрешается даже пользователям превысившим квоту ходить на сайты прописанные в файлике no_quota_url.txt.
http_access deny banusers - здесь запрещается превысившим все остальное
http_access allow REAL - а здесь запрещается не авторизованным качать что-бы то нибыло


уффф вроде пока все...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

14. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Mosson email(??) on 18-Мрт-09, 17:02 
ну вот... еше один серьезный косяк. в коде traf_limit.pl меняем кусок

$month=1 + $dat[4];
if ($month<10){
    $month="0".$month
}
$filter="$year$month";

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Anhel email(ok) on 22-Янв-10, 12:51 
Спасибо за статью!
У мен тут ошибка (SQUID 2.7)

#/usr/local/etc/rc.d/squid onerestart
Starting squid.
2010/01/22 12:35:25| Invalid Proxy Auth ACL 'acl banusers proxy_auth_regex -i "/etc/squid/user_deny.txt"' because no authentication schemes are fully configured.
FATAL: Bungled squid.conf line 612: acl banusers proxy_auth_regex -i "/etc/squid/user_deny.txt"
Squid Cache (Version 2.7.STABLE7): Terminated abnormally.
/usr/local/etc/rc.d/squid: WARNING: failed to start squid

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

16. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Anhel email(ok) on 22-Янв-10, 13:55 
Подскажите в чем дело, пожалуйста :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Mosson email(??) on 27-Янв-10, 14:47 
по моему нет файла /etc/squid/user_deny.txt

в общем внимательно перечитайте статью и сделайте все как надо :)
для тех кто читает не все комменты - основной текст статьи тут http://www.itdepartament.ru/index.php/archives/60

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Anhel email(ok) on 27-Янв-10, 14:51 
>по моему нет файла /etc/squid/user_deny.txt
>
>в общем внимательно перечитайте статью и сделайте все как надо :)
>для тех кто читает не все комменты - основной текст статьи тут
>http://www.itdepartament.ru/index.php/archives/60

файл был. но я уже сделал еще раз по вашей ссылке (что по ссылке), и все заработало, в чем было дело не помню :)))


Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от lex1974 email on 01-Мрт-10, 09:46 
Проблемма! OS freesco 0.3.8 squid 2.5 Все сделал все по схеме (ну естесественно прописал свои пути) выдает такую ошибку в чем проблема понять не могу! Кто встречался с такой проблеммой подскажите в чем косяк!
2010/03/01 17:20:04| aclParseAclLine: IGNORING: Proxy Auth ACL 'acl banusers proxy_auth_regex -i “/usr/local/squid/etc/user_deny.txt"' because no authentication schemes are fully configured.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

20. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от serega3333 (ok) on 13-Мрт-10, 21:10 
Скрипт работает, но не записывает в user_deny.txt IP адреса юзеров, чей трафик превышен
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

21. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от rdsden email(??) on 12-Апр-10, 08:48 
скажите, если я хочу сделать более точное ограничение, допустим скрипт выполнять раз в пять минут, это не сильно нагрузит сервер? или для этого существуют другие решения?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

22. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Unknown email(??) on 14-Июн-12, 16:50 
Вопрос такой, почему при превышении трафика mail.agent isq skype все равно работают в чем проблема у меня стоит squid+sams+rejik авторизация по ip вроде остальное все работает и блокирует при превышении лимита??? Спасибо!
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

23. "Squid + LightSquid + Perl = ограничение по трафику"  +1 +/
Сообщение от Sergey email(??) on 23-Дек-13, 16:48 
Спасибо за скрипт! Подскажите, что поменять, чтоб скрипт записывал в блок-лист пользователей, которые привысили дневной лимит?:)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

24. "Squid + LightSquid + Perl = ограничение по трафику"  +/
Сообщение от Igor Mitichev email on 18-Мрт-14, 11:48 
Господа, подскажите как правильно прописывать пользователей в $vip_user, если в имени пользователя присутствует точка? Сейчас на этих строчках скрипт затыкается :(
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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