Страница 1 из 1
mpd и привязка клиента к его IP
Добавлено: 2010-01-13 13:53:31
savio
FreeBSD 7.0.
mpd5+freeraduis
нужно разрешить клиенту подключаться к интернету по vpn только со своего рабочего места(компьютера).
другими словами привязать аккаунт(логин и пароль) к конкретному IP-адресу в локальной сети.
есть идеи?
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-13 14:17:44
Гость
mp5 этим точно нет смысла заниматься
этим должен заниматься ваш биллинг
который получив IP клиента должен проверять по своей базе а потом уже смотреть на денежки итд
и разрешать авторизацию или делать денай
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-13 14:53:20
_Deja Vu
в таком виде не пойдет?
Код: Выделить всё
client 192.168.0.55 {
secret = parol
shortname = my_device_name
nastype = other
}
полтора года прошло:
RADIUS - что? где? и как?
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-13 14:57:42
savio
да, прошло, вопрос снова актуален. а решения пока не нашел. такой не подойдет, так как у меня логины и пароли в БД MySql
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-13 15:05:19
_за_Нерзула
во че-то там с базой этой майэскюэльной:
FreeRadius+MySQL
а вот еще со скриптами:
mpd + freeradius + mysql
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-13 18:04:13
schizoid
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-13 22:49:22
savio
скрипт конечно ваш хорош, только мне нужно что бы впн соединение разрывалось... сколько не пытался сделать это полтора года назад, не получилось......
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-14 11:53:16
schizoid
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-14 12:16:58
savio
неа, не подойдет.
ситуация.
клиент на работе и дома пользуется нашим инетом. начальство хочет что бы он брал один аккаунт на работе и один дома.
я пробовал через up-script рвать только что подключенное соединение, но что-то ничего не получилось у меня тогда....
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-14 12:29:06
schizoid
алгоритм опишите, что вы хотите сделать. по пунктам.
в моем скрипте.
1. при подключении клиента определяется ИП с которого подключился, мак-адрес
2. дальше идет проверка на валидность
3. выносится решение
опишите, что вы хотите получить
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-14 12:33:48
savio
1. при подключении клиента определяется ИП с которого он подключился
2. дальше идет проверка на валидность(каждому логину соответсвует конкретный ИП)
3. если ИП с которого он подключился не равен ранее заданому(в БД) то reject
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-14 12:46:12
schizoid
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-скрипте убираем этот ИП из таблицы
само правило аля:
как-то так
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-14 12:49:45
savio
хм.... интересная идея.... буду пробовать
Re: mpd и привязка клиента к его IP
Добавлено: 2010-01-14 13:00:15
schizoid
выложу текущий 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