mpd и привязка клиента к его IP

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

mpd и привязка клиента к его IP

Непрочитанное сообщение savio » 2010-01-13 13:53:31

FreeBSD 7.0.
mpd5+freeraduis
нужно разрешить клиенту подключаться к интернету по vpn только со своего рабочего места(компьютера).
другими словами привязать аккаунт(логин и пароль) к конкретному IP-адресу в локальной сети.
есть идеи?
Помни о смерти, все суета сует....

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение Гость » 2010-01-13 14:17:44

mp5 этим точно нет смысла заниматься
этим должен заниматься ваш биллинг
который получив IP клиента должен проверять по своей базе а потом уже смотреть на денежки итд
и разрешать авторизацию или делать денай

_Deja Vu
проходил мимо

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение _Deja Vu » 2010-01-13 14:53:20

в таком виде не пойдет?

Код: Выделить всё

client 192.168.0.55 {
secret          = parol
shortname       = my_device_name
nastype     = other
}
полтора года прошло: RADIUS - что? где? и как?

Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение savio » 2010-01-13 14:57:42

да, прошло, вопрос снова актуален. а решения пока не нашел. такой не подойдет, так как у меня логины и пароли в БД MySql
Помни о смерти, все суета сует....

_за_Нерзула
проходил мимо

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение _за_Нерзула » 2010-01-13 15:05:19

во че-то там с базой этой майэскюэльной:
FreeRadius+MySQL

а вот еще со скриптами:
mpd + freeradius + mysql

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение schizoid » 2010-01-13 18:04:13

ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение savio » 2010-01-13 22:49:22

скрипт конечно ваш хорош, только мне нужно что бы впн соединение разрывалось... сколько не пытался сделать это полтора года назад, не получилось......
Помни о смерти, все суета сует....

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение schizoid » 2010-01-14 11:53:16

Код: Выделить всё

ipfw add deny tcp from IP to me port 1723
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение savio » 2010-01-14 12:16:58

неа, не подойдет.
ситуация.
клиент на работе и дома пользуется нашим инетом. начальство хочет что бы он брал один аккаунт на работе и один дома.
я пробовал через up-script рвать только что подключенное соединение, но что-то ничего не получилось у меня тогда....
Помни о смерти, все суета сует....

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение schizoid » 2010-01-14 12:29:06

алгоритм опишите, что вы хотите сделать. по пунктам.
в моем скрипте.
1. при подключении клиента определяется ИП с которого подключился, мак-адрес
2. дальше идет проверка на валидность
3. выносится решение

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

Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение savio » 2010-01-14 12:33:48

1. при подключении клиента определяется ИП с которого он подключился
2. дальше идет проверка на валидность(каждому логину соответсвует конкретный ИП)
3. если ИП с которого он подключился не равен ранее заданому(в БД) то reject
Помни о смерти, все суета сует....

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение schizoid » 2010-01-14 12:46:12

savio писал(а):1. при подключении клиента определяется ИП с которого он подключился
2. дальше идет проверка на валидность(каждому логину соответсвует конкретный ИП)
3. если ИП с которого он подключился не равен ранее заданому(в БД) то reject
Надеюсь пользователи в базе? если радиус - то вообще песня.
1. Определить Ип можно к примеру из таблички CallingStationId. Делаем запрос:

Код: Выделить всё

r_ip=`/bin/echo "select CallingStationId from freeradius.radacct where UserName='$5' and date(AcctStartTime)='$date' and AcctStopTime='0000-00-00 00:00:00' ORDER BY CallingStationId DESC limit 1;" |mysql -s -uЮЗЕР -pПАРОЛЬ`
2. ТУт вытягиваем ИП, который должен быть. ХЗ где там он у вас лежит, что-ти типа такого:

Код: Выделить всё

ip=`/bin/echo "select ip from freeradius.radcheck where UserName='$5';" |mysql -s -uЮЗЕР -pПАРОЛЬ`
3. Производим проверку

Код: Выделить всё

if [ "$r_ip" = "$ip" ]; then
echo "Good"
else
ipfw table 1 add $r_ip
fi
где в фаерволе есть правило

Код: Выделить всё

ipfw add deny tcp from 'table(1)' to me port 1723
далее, что бы с этого ИПа можно было подключиться вновь, в down-скрипте убираем этот ИП из таблицы
само правило аля:

Код: Выделить всё

ipfw table 1 delete $r_ip

как-то так
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
savio
лейтенант
Сообщения: 813
Зарегистрирован: 2007-11-08 15:46:43
Откуда: UA

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение savio » 2010-01-14 12:49:45

хм.... интересная идея.... буду пробовать :good:
Помни о смерти, все суета сует....

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: mpd и привязка клиента к его IP

Непрочитанное сообщение schizoid » 2010-01-14 13:00:15

выложу текущий up и down скрипт, может что-то еще почерпнете...

Код: Выделить всё

# cat /usr/local/etc/mpd4/up.sh                                                                                                                   
#!/bin/sh                                                                                                                                                                          
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin                                                                                                                  
###параметры получаемые при выполнении скрипта###                                                                                                                                  
##$1   $2        $3            $4      $5                                                                                                                                          
##ng0 inet 192.168.10.100/32 10.0.0.1 eugene                                                                                                                                       

#номер правила
i=`/bin/echo "select id from freeradius.radcheck where UserName='$5';" |mysql -s -uЮЗЕР -pПАРОЛЬ` >> /usr/local/etc/mpd4/test 2>&1
#пакет скорости интернета                                                                                                                   
bw=`/bin/echo "select bw from freeradius.radcheck where UserName='$5';" |mysql -s -uЮЗЕР -pПАРОЛЬ` >> /usr/local/etc/mpd4/test 2>&1

time=`date "+%H"`
time_start="00"  
time_stop="10"   

# Увеличение скорости клиентам с полуночи до 10-ти утра

if  ( [ $time -lt $time_stop ] && [ $time -ge $time_start ] )
 then                                                        
    if [ $bw = "bw_128" ]                                    
    then                                                     
    bw="bw_384"                                              
        elif [ $bw = "bw_384" ]                              
        then                                                 
        bw="bw_768"                                          
            elif [ $bw = "bw_512" ]                          
            then                                             
            bw="bw_1024"                                     
                elif [ $bw = "bw_1024" ]                     
                then                                         
                bw="bw_1536"                                 
 fi                                                          
fi                                                           
                                                             
echo ""  >> /usr/local/etc/mpd4/test 2>&1                    
date=`date "+%Y-%m-%d"`                                      
r_ip=`/bin/echo "select CallingStationId from freeradius.radacct where UserName='$5' and date(AcctStartTime)='$date' and AcctStopTime='0000-00-00 00:00:00' ORDER BY CallingStationId DESC limit 1;" |mysql -s -uЮЗЕР -pПАРОЛЬ` >> /usr/local/etc/mpd4/test 2>&1                                                                                            
echo "r_ip=$r_ip" >> /usr/local/etc/mpd4/test                                                                                                                                      
r_mac=`/usr/sbin/arp -n $r_ip|awk '{print $4}'` >> /usr/local/etc/mpd4/test 2>&1                                                                                                   
echo "r_mac=$r_mac" >> /usr/local/etc/mpd4/test                                                                                                                                    
mac1=`/bin/echo "select mac1 from freeradius.radcheck where UserName='$5';" |mysql -s -uЮЗЕР -pПАРОЛЬ` >> /usr/local/etc/mpd4/test 2>&1                                  
mac2=`/bin/echo "select mac2 from freeradius.radcheck where UserName='$5';" |mysql -s -uЮЗЕР -pПАРОЛЬ` >> /usr/local/etc/mpd4/test 2>&1                                  
mac3=`/bin/echo "select mac3 from freeradius.radcheck where UserName='$5';" |mysql -s -uЮЗЕР -pПАРОЛЬ` >> /usr/local/etc/mpd4/test 2>&1                                  

echo "-------------------------" >> /usr/local/etc/mpd4/test
echo `date` >> /usr/local/etc/mpd4/test                     
s=`/bin/echo "select $bw from freeradius.bw;" |mysql -s -uЮЗЕР -pПАРОЛЬ` >> /usr/local/etc/mpd4/test 2>&1

echo "Speed is $s Kbit/s"  >> /usr/local/etc/mpd4/test
num_in=`expr 500 + $i`
num_out=`expr 700 + $i`
num_block=`expr 800 + $i`
pipe_in=$i
pipe_out=`expr 100 + $i`

echo "For user $5" >> /usr/local/etc/mpd4/test
echo "" >> /usr/local/etc/mpd4/test
#pipe's IN
ipfw add $num_in pipe $pipe_in ip from any to $4 >> /usr/local/etc/mpd4/test 2>&1
#pipe's OUT
ipfw add $num_out pipe $pipe_out ip from $4 to any >> /usr/local/etc/mpd4/test 2>&1
#pipe's speed
ipfw pipe $pipe_in config bw "$s"Kbit/s queue 10 >> /usr/local/etc/mpd4/test 2>&1
ipfw pipe $pipe_out config bw "$s"Kbit/s queue 10 >> /usr/local/etc/mpd4/test 2>&1
echo "" >> /usr/local/etc/mpd4/test
#count
ipfw add $num_in count ip from any to any in via $1 >> /usr/local/etc/mpd4/test 2>&1
ipfw add $num_out count ip from any to any out via $1 >> /usr/local/etc/mpd4/test 2>&1
echo "" >> /usr/local/etc/mpd4/test

echo "Begin test for mac-adress's" >> /usr/local/etc/mpd4/test

if [ "$r_mac" = "$mac1" ]; then
    echo "mac1 Goot" >> /usr/local/etc/mpd4/test
    elif [ "$r_mac" = "$mac2" ]; then
            echo "mac2 Goot" >> /usr/local/etc/mpd4/test
            elif [ "$r_mac" = "$mac3" ]; then
                echo "mac3 Goot" >> /usr/local/etc/mpd4/test
                else
                echo "Пользователь $5 подключился с чужого компьютера IP=$r_ip (MAC=$r_mac). Правильный мак: $mac1, $mac2 или $mac3"| mail -s "Bad connections!!!" admin@domain.net.ua
                echo "Пользователь $5 подключился с чужого компьютера IP=$r_ip (MAC=$r_mac). Правильный мак: $mac1, $mac2 или $mac3" >> /usr/local/etc/mpd4/test
                ipfw add $num_block fwd 192.168.10.100,90 log tcp from $4 to any via vlan113 >> /usr/local/etc/mpd4/test 2>&1
fi

Код: Выделить всё

# cat /usr/local/etc/mpd4/down.sh
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
###параметры получаемые при выполнении скрипта###
##$1   $2    $3
##ng0 inet  eugene

#номер правила
i=`/bin/echo "select id from freeradius.radcheck where UserName='$3';" |mysql -s -uЮЗЕР -pПАРОЛЬ`

num_in=`expr 500 + $i`
num_out=`expr 700 + $i`
num_block=`expr 800 + $i`
pipe_in=$i
pipe_out=`expr 100 + $i`

echo "-------------------------" >> /usr/local/etc/mpd4/test
echo `date` >> /usr/local/etc/mpd4/test
echo "Stop for user $3" >> /usr/local/etc/mpd4/test
echo "" >> /usr/local/etc/mpd4/test
ipfw pipe delete $pipe_in >> /usr/local/etc/mpd4/test 2>&1
ipfw pipe delete $pipe_out >> /usr/local/etc/mpd4/test 2>&1
ipfw delete $num_in >> /usr/local/etc/mpd4/test 2>&1
ipfw delete $num_out >> /usr/local/etc/mpd4/test 2>&1
ipfw delete $num_block >> /usr/local/etc/mpd4/test 2>&1

echo "" >> /usr/local/etc/mpd4/test
ядерный взрыв...смертельно красиво...жаль, что не вечно...