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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: ограничение траффика через AD  (Прочитано 3033 раз)

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

Оффлайн mr_lexus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
ограничение траффика через AD
« : 31 Июля 2009, 08:25:11 »
Доброго времени суток !
Хочу узнать как можно сделать ограничение интернет трафика через AD.
Ситуация следующая:
Видел у знакомого настроено ограничена трафика юзерам, через AD, прописывается лимит в строку описание каждого пользователя, + пользователь которому нужен интернет добавляется в группу internet.
Кто нибудь знает как такое реализовать ? не очень та прикольно ручками каждый раз править, а зашёл в AD отредактировал или добавил пользователя и сразу же всё в одном месте.

Оффлайн Просто Царь

  • Активист
  • *
  • Сообщений: 936
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #1 : 31 Июля 2009, 08:47:46 »
 :-\ хм. АД я так понимаю под виндой?

Оффлайн ploxish

  • Любитель
  • *
  • Сообщений: 97
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #2 : 31 Июля 2009, 11:16:57 »
что то не вопрос не по тематике форума. :P
как это слелать в АД? создать группу интернет и дать ей доступ к интернету, а потом в эту группу добавлять пользователей...
И каким тут боком Linux-ума не приложу.... :idiot2:

Оффлайн uid0

  • Активист
  • *
  • Сообщений: 371
    • Просмотр профиля
    • hitetra.ru
Re: ограничение траффика через AD
« Ответ #3 : 31 Июля 2009, 12:26:54 »
А может у него AD поднята под FDS ?? :) Хотя сомневаюсь в этом очень сильно ! Всё же Windows ! Под виндой могу посоветывать ISA Server, он замечательно интегрируется с AD и под вашу задачу самый раз :)
Be root, be different...

Оффлайн ploxish

  • Любитель
  • *
  • Сообщений: 97
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #4 : 31 Июля 2009, 12:29:10 »
если человек плохо знает как работает AD куда ему еще ИСУ-он вообще нчего не настроит-одно расстройство будет.... ;)

Оффлайн uid0

  • Активист
  • *
  • Сообщений: 371
    • Просмотр профиля
    • hitetra.ru
Re: ограничение траффика через AD
« Ответ #5 : 31 Июля 2009, 12:38:06 »
Ну да ! Я эту заразу настраивал день точно ! У меня начальство помешано на сетевой безопастности. Вот и крутился я с правилами в ней. Зато теперь всё как по маслу, не считая того, что она переодически ложится от нагрузки.
Be root, be different...

Оффлайн mr_lexus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #6 : 04 Августа 2009, 18:44:10 »
Linux тут самым прямым способом ! у него поднята связка squid+samba ntlm аунтификация, и написан какой то скрипт.
Смысл скрипта такой, при написании кол-ва мб в виндовой AD в свойстве пользователя, в строке описание, этот скрипт каждое n-время сканирует AD на наличие новых таких записей в строке Описание и добавляет их в определённый файл в формате
<login> <кол-во мб>
тем самым не приходится ручками ограничивать в Linux ограничение юзерам, очень удобная вещь ! Сам видел как работает, но вот как это всё организовать нимогу пока что сообразить.

Оффлайн Tokh

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #7 : 04 Августа 2009, 19:13:34 »
Тут возникает идея, что вопрос только в том, как скриптом из AD вынимать знания нужных полей. Запихнуть полученное в файл будет простая задачка. Не?
StarDict и Mueller помогут против английского мануала.

Оффлайн mr_lexus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #8 : 05 Августа 2009, 09:20:26 »
вот, именно так )))
только теперь момент как всё это организовать ?
писать скрипты я не умелец :(
т.е получается скрипт тащит нужные данные, записывает их в файл, остаётся только указать squid откуда брать данные для ограничения пользователей

Оффлайн Tokh

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #9 : 05 Августа 2009, 11:09:22 »
вот, именно так )))
только теперь момент как всё это организовать ?
писать скрипты я не умелец :(
т.е получается скрипт тащит нужные данные, записывает их в файл, остаётся только указать squid откуда брать данные для ограничения пользователей
Не совсем так.
1) Скрипт тащит нужные данные и складывает их в какой-то файл.
2) Скрипт берёт этот файл и запихивает данные из него в конфиги сквида. Подменяет файлы копированием и т.п.
3) Дальше сквид должен сам или не совсем сам "сообразить", что пора рестартовать или перечитать конфиги.

Действие 1-е не знаю как сделать. И если неизвестны средства запросить по сети нужное в AD, то вероятно язык скрипта будет не shell язык для Linuxовых оболочек типа BASH. И вероятно скрипт будет работать не на Linux машине. Или нет... Не знаю.

Дальше уже всё можно на Linux машине.
Действие 2 примитивно. Но если не сделано действие 1, то врядли имеет смысл разбирать действие 2. Если (1) сделано, то можно меня через личку позвать, и остальных спросить - поможем тут на форуме.
Действие 3 - наверняка тоже примитивно. Тупо по расписанию в cron перезапускать демона Сквид или посылать Сквиду какой-то сигнал перечитать подменённый конфиг. Лимиты меняются не так часто и рестарт в обед и в полночь наверняка не потревожат пользователей прокси. Например.
StarDict и Mueller помогут против английского мануала.

Оффлайн mr_lexus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #10 : 05 Августа 2009, 12:21:22 »
вот надыбал скрипт, который тащит лимит, как я понимаю.

#!/bin/sh
#
# get_ad_user_limit.sh - gets user traffic limits from AD via "description" field
#                       and creates file for ban_users.pl script
#

# 1.Variables
LDPASEARCH="/usr/bin/ldapsearch"
LDAPSEARCHARGS="-P3 -LLL"
LDAPPASS=`cat /etc/squid/ldappass`

USERLIMITSFILE="/etc/squid/limit/limits"

# 2.LDAP lookup against our Active Directory
RESULT=$($LDPASEARCH $LDAPSEARCHARGS -x -b 'dc=ratm-energo,dc=local' -w $LDAPPASS
-H ldap://alfa.ratm-energo.local -D "proxyldap@ratm-energo.local"
'(&(objectclass=user)(memberOf=CN=Internet,OU=internet access,DC=ratm-energo,DC=local)(description=*))'
sAMAccountName description 2>&1)

# 3.Testing for successfull lookup
if [ $? -ne 0 ]
        then
                echo "$0: LDAP lookup error: $RESULT"
                exit 10
fi

# 4. Main parse procedure

# Emptying user limits file before update it with new values
:>$USERLIMITSFILE

flag=0

for line in $RESULT
do
        if [ "$line" == "description:" ]
                then flag=1
        fi

        if [[ $flag -eq 2 ]]
                then
                        # Testing for numeric "description"
                        if echo $line | grep -q -E '^[0-9]*$'
                                then limit=$line
                                else limit=0
                        fi
        fi

        if [[ $flag -eq 4 ]]
                then
                        user=`echo $line | tr A-Z a-z`
                        echo $user $limit >> $USERLIMITSFILE
                        flag=0
fi

        if [[ $flag -ne 0 ]]
                then let "flag=$flag + 1"
        fi
done

chmod 0640 $USERLIMITSFILE

exit 0


рядом в этой же папке файлик "limits"
в котором все логины и через пробел лимит.
в этой же папке ещё скрипт


#!/usr/bin/perl
#
# ban_users.pl --- obtain monthly traffic usage by squid users
#       and ban them if limit exceeded
#

use Fcntl;
#########################
#       Variables       #
#########################

$reportdir="/var/www/stats/lightsquid/report";
$limits_config="/etc/squid/limit/limits";
$banned_users="/etc/squid/limit/overusers";

$kilobyte=1000;

# We need to get current year and month
$time = time();
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);


$year = $year + 1900;
$mon++;
$mon = sprintf("%02d", $mon);

# gets list of directories with current month statistics
opendir(DIR, "$reportdir") || die "can't opendir $reportdir: $!";
@current_month_dirs = grep {/^($year)($mon)[0-9]{2}$/} readdir(DIR);
closedir(DIR);

# Count summ traffic for current month for each user
foreach $dir (@current_month_dirs) {
        open(FILE,"$reportdir/$dir/.total") || die "can't open file $reportdir/$dir/.total: $!";
        while(<FILE>) {
                ($user,$in,$count,$out) = split;
                $in = $in/($kilobyte*$kilobyte);
                if(($user ne "user:")&&($user ne "size:")) {
                        $monthly_stats{$user} += $in;
                        }
                }
        close(FILE);
}

# Get traffic limit for each user from config
open(FILE,"$limits_config") || die "can't open file $limits_config: $!";
while(<FILE>) {
        next if /#/ ;
        ($user, $traffic_limit) = split;
        $traffic_limit{$user} = $traffic_limit;

}
close(FILE);
# Find users who have traffic overusage
# and write they to squid configuration file
unlink $banned_users;
sysopen(FILE, "$banned_users", O_WRONLY | O_EXCL | O_CREAT, 0650) || die "can't open file $banned_users: $!";
foreach(keys %traffic_limit) {
        if($traffic_limit{$_} == 0) {
                print FILE "$_
";
                next;
        }

        if($monthly_stats{$_} > $traffic_limit{$_}) {
                print FILE "$_
";
        }
}
close(FILE);

# Make proxy group owner of the target file
if (chown(0, 13, "$banned_users" ) == -1) {
        print "Chown $banned_users file failure
";
}

# chmod it
if (chmod(0640, "$banned_users" ) == -1) {
        print "Chown $banned_users file failure
";
}

# Make squid reload configuration
system("/etc/init.d/squid reload 1>/dev/null");
if ($? == -1) {
        print "squid reload failure
"

как я понимаю, он блокирует юзеров превышевших лимит.

ещё там же есть файлик overusers, он пустой, я не понимаю зачем он ))

Пользователь решил продолжить мысль 05 Августа 2009, 06:23:14:
вот, нашёл,в overusers помещаются забаненые юзеры.
« Последнее редактирование: 05 Августа 2009, 13:31:46 от mr_lexus »

Оффлайн mr_lexus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #11 : 05 Августа 2009, 13:36:07 »
Т.е. получается, как я понимаю, эти 2 скрипта запущаются в cron через определённый промежуток времени и сканируют на наличие данных, после чего передают управление squid, либо забанить либо добавить лимит ? так ?

Оффлайн Tokh

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #12 : 05 Августа 2009, 17:56:23 »
После беглого прочтения я понял, что первый скрипт, написанный на shell (оболочка SH), вытягивает из AD лимиты через программу ldapsearch ( http://angel.cs.msu.su/cgi-bin/man/man2html?1+ldapsearch ) и пишет данные в файл, на каждую строку по паре: логин лимит.

Второй скрип, на Перле, вычисляет израсходованный трафик по записям lightsquid ( http://lightsquid.sourceforge.net/ ) анализатора логов для Сквида и сравнивает с лимитом из ранее созданного файла. Если лимит превышен, то логин записывается в Сквидовский список забаненых. И в самом конце перезагруза конфигурации Сквида.

Думаю, что да, в cron должен быть прописан регулярный запуск обоих скриптов. Причём запуск второго скрипта должен быть так част, чтобы пользователь не успел перерасходовать чрезмерно много трафика. Но если пользователей очень много, то время выполнения второго скрипта должно быть меньше чем интервал между запусками. Для небольших коллективов и небыстрых интернет каналов должно неплохо работать.
StarDict и Mueller помогут против английского мануала.

Оффлайн mr_lexus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #13 : 06 Августа 2009, 05:07:58 »
Так, с этим разобрались :)
А как ещё можно ограничивать юзеров по лимитам ? Есть ещё какие нибудь предложения ? :) Давайте делиться =)

Оффлайн Nebulosa

  • Активист
  • *
  • Сообщений: 397
    • Просмотр профиля
Re: ограничение траффика через AD
« Ответ #14 : 06 Августа 2009, 11:03:24 »
netams?

 

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