Перейти к содержимому

DeepNet

ASP24.com.ua - Вся линейка моделей Ubiquiti для создания идеальной сети. Звоните! 050-225-7770
Фото

Скрипты onConnect/onDisconnect


  • Чтобы отвечать, сперва войдите на форум
92 ответов в теме

#81 trend

trend

    Пролетал Мимо

  • Маглы
  • Фишка
  • 3 Сообщений:

Опубликовано 27 Июнь 2011 - 10:50

Можете подсказать как сделать авторизацию с проверкой мак? просто в баше не очень силен, бы л бы очень благодарен если бы кинули огрызок такого кода, и обяснили что нужно создавать, и в каких файлах. ОСь у меня ubuntu server, использую iptables.

При авторизации MAC не проверяется. Но можно сделать дополнительную проверку в OnConnect. Описываем MAC, например, в в одном из полей UserData. При вызове скрипта получаем реальный MAC с помощью arp -n $IP (ну там еще tail'ом и cut'ом немножко поработать), и вычитываем соответствующий UserData из БД (файловой или SQL'ной). Если совпадает - разрешаем юзера в файрволле.

Привет всем, помогите с кодом в OnConnect для проверки mac адреса при подключении, уже все перечисленные примеры перепробовал, не получается никак.
система fedora 15
вот мой onconnect, шейпер работает прекрасно, а вот проверка по маку не работает

#!/bin/bash

iface_cli=em1

# Login
LOGIN=$1

#user IP
IP=$2

#cash
CASH=$3

#user ID
ID=$4

#Selected dirs to connect
DIRS=$5

default_speed=32kbit

# =========== shaping by tariff ===========
#tariff=$(grep -i "^tariff=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")
#echo "tariff=$tariff" > /var/stargazer/users/$LOGIN/connect.log
#case $tariff in
# minimum) speedkb=128kbit;; # 128 kbit
# middle) speedkb=256kbit;; # 256 kbi
# maximum) speedkb=512kbit;; # 512 kbit
# *) speedkb=$default_speed;; # default speed
#esac
# ========= shaping by tariff end =========

# ========= shaping by userdata0 ==========
speedR=$(grep -i "^Userdata0=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")
speed=$(echo $speedR | grep "^[0-9]*[0-9]$")
MAC=$(grep -i "^Userdata1=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")

if [ -z "$speed" ]
then
speedkb=$default_speed
else
speedkb="$speed"kbit
fi
# ======= shaping by userdata0 end ========

declare -i mark=$ID+10

echo "$mark" > /var/stargazer/users/$LOGIN/shaper_mark
echo "$speedkb" > /var/stargazer/users/$LOGIN/shaper_rate

iptables -t mangle -A FORWARD -d $IP -j MARK --set-mark $mark

tc class add dev $iface_cli parent 1:1 classid 1:$mark htb rate $speedkb burst 40k
tc filter add dev $iface_cli parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark

if [ -n "$MAC" ]
then
/sbin/iptables -A FORWARD -s $IP -j ACCEPT
/sbin/iptables -A FORWARD -d $IP -j ACCEPT
else
/sbin/iptables -A FORWARD -s $IP -m mac --mac-source $MAC -j ACCEPT
/sbin/iptables -A FORWARD -d $IP -j ACCEPT


/sbin/iptables -t filter -A FORWARD -s $IP -j ACCEPT
/sbin/iptables -t filter -A FORWARD -d $IP -j ACCEPT
/sbin/iptables -t filter -A INPUT -s $IP -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -d $IP -j ACCEPT
fi
fi
  • 0

DEPS

#82 yKpon

yKpon

    Оборотень

  • Сitizens
  • ФишкаФишкаФишкаФишка
  • 427 Сообщений:
  • Пол:Мужчина

Опубликовано 27 Июнь 2011 - 12:06

чтобы промерять по маку есть 2 варианта:
1. ip адреса жёстко привязаны к маку по ARP тогда проверка при авторизации не нужна, просто никто другой не сможет подключиться
2. ip не привязаны, но при авторизации проверяется MAC сетевой
я у себя еспользую 1-ый вариант, если у вас 2-ой случай, то можно просто их сравнивать, узнать текущий мак можно через

arp -a $IP | cut -f 4 -d " "

или нужно именно разрешить форвард по мак?

ещё не понятно зачем 2 раза одно и то же

/sbin/iptables -A FORWARD -s $IP -j ACCEPT
/sbin/iptables -A FORWARD -d $IP -j ACCEPT
это же и есть filter
  • 0

#83 trend

trend

    Пролетал Мимо

  • Маглы
  • Фишка
  • 3 Сообщений:

Опубликовано 27 Июнь 2011 - 13:00

чтобы промерять по маку есть 2 варианта:
1. ip адреса жёстко привязаны к маку по ARP тогда проверка при авторизации не нужна, просто никто другой не сможет подключиться
2. ip не привязаны, но при авторизации проверяется MAC сетевой
я у себя еспользую 1-ый вариант, если у вас 2-ой случай, то можно просто их сравнивать, узнать текущий мак можно через

arp -a $IP | cut -f 4 -d " "

или нужно именно разрешить форвард по мак?

ещё не понятно зачем 2 раза одно и то же

/sbin/iptables -A FORWARD -s $IP -j ACCEPT
/sbin/iptables -A FORWARD -d $IP -j ACCEPT
это же и есть filter


Нужна жесткая привязка по мак, т.е. разрешить форвард по мак и IP, DHCP нету
а, ну тогда надо создать постоянную таблицу arp ?(если честно, еще плаваю в линуксе)
Не могли бы вы поделиться кодом OnConnect ?
  • 0

NG Optics

#84 yKpon

yKpon

    Оборотень

  • Сitizens
  • ФишкаФишкаФишкаФишка
  • 427 Сообщений:
  • Пол:Мужчина

Опубликовано 27 Июнь 2011 - 14:45

Нужна жесткая привязка по мак, т.е. разрешить форвард по мак и IP, DHCP нету
а, ну тогда надо создать постоянную таблицу arp ?(если честно, еще плаваю в линуксе)
Не могли бы вы поделиться кодом OnConnect ?

жёсткая привязка по мак это ARP

arp -s 192.168.1.2 00:1a:6a:00:00:00

в таком случае у абонента с айпи 192.168.1.2 и мак адресом отличным от 00:1a:6a:00:00:00 доступа к серверу не будет, он не будет даже пинговаться
в вашем же примере скрипта проверка по маку учавствует только между обменом (цепочка FORWARD)

приведу свой пример, база у меня в MySQL
вот часть скрипта OnConnect отвечающая на мак
MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = '$login'"`
    /usr/bin/arping -I eth_local $IP -c 1 -w 0
    newMAC=`/usr/sbin/arp -a $IP | cut -f 4 -d " "`
    /usr/sbin/arp -d $IP
    /usr/sbin/arp -s $IP $newMAC
    if [ -z "`/bin/echo $MAC | grep $newMAC`" ]; then
        /etc/stargazer/sgconf set -s 127.0.0.1 -p 4446 -a $STGADM -w $STGPASS -u $login --ud0 $newMAC
    fi
принцип работы:
- берём МАС прописаный в карточке юзера
- делаем arping чтобы мак "прорезался" на сервере, так сказать засветился
- выделяем этот мак
- статиески привязываем его (сначала опустошаем потом привязываем это для тех кому мак не нужно привязывать, команда -s попросту не сработает)
- если же мак в базе и реальный мак разные тогда в базу заносится новый, сделано для того кто меняет сетевушку, всё равно кто то левый не сможет достучаться до сервера чтобы это сделать :unsure:

собственно вот, а так ещё раз в сутки по крону отрабатывает скрипт
macfix
#!/bin/sh

source /etc/stargazer/sql.conf

# lan0
for ((ip=2;ip<255;ip++));
do /usr/sbin/arp -s 192.168.0.${ip} ${firmmac}
done;
echo "lan0 done"

# lan1
for ((ip=2;ip<31;ip++));
do /usr/sbin/arp -s 192.168.1.${ip} ${firmmac}
done;
echo "lan1 done"

# lan2
for ((ip=2;ip<15;ip++));
do /usr/sbin/arp -s 192.168.2.${ip} ${firmmac}
done;
echo "lan2 done"

LOGINS=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT login FROM users"`
for login in $LOGINS
do
    IP=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT IP FROM users WHERE login = &#39;$login&#39;"`
    MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = &#39;$login&#39;"`
    LOCKED=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Down FROM users WHERE login = &#39;$login&#39;"`
    if [ $LOCKED = 0 ]; then
        /usr/sbin/arp -d $IP
        /usr/sbin/arp -s $IP $MAC
    fi
done
lan4 done"

echo "arp table fixed"

  • 0

#85 trend

trend

    Пролетал Мимо

  • Маглы
  • Фишка
  • 3 Сообщений:

Опубликовано 28 Июнь 2011 - 12:01

Нужна жесткая привязка по мак, т.е. разрешить форвард по мак и IP, DHCP нету
а, ну тогда надо создать постоянную таблицу arp ?(если честно, еще плаваю в линуксе)
Не могли бы вы поделиться кодом OnConnect ?

жёсткая привязка по мак это ARP

arp -s 192.168.1.2 00:1a:6a:00:00:00

в таком случае у абонента с айпи 192.168.1.2 и мак адресом отличным от 00:1a:6a:00:00:00 доступа к серверу не будет, он не будет даже пинговаться
в вашем же примере скрипта проверка по маку учавствует только между обменом (цепочка FORWARD)

приведу свой пример, база у меня в MySQL
вот часть скрипта OnConnect отвечающая на мак
MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = &#39;$login&#39;"`
    /usr/bin/arping -I eth_local $IP -c 1 -w 0
    newMAC=`/usr/sbin/arp -a $IP | cut -f 4 -d " "`
    /usr/sbin/arp -d $IP
    /usr/sbin/arp -s $IP $newMAC
    if [ -z "`/bin/echo $MAC | grep $newMAC`" ]; then
        /etc/stargazer/sgconf set -s 127.0.0.1 -p 4446 -a $STGADM -w $STGPASS -u $login --ud0 $newMAC
    fi
принцип работы:
- берём МАС прописаный в карточке юзера
- делаем arping чтобы мак "прорезался" на сервере, так сказать засветился
- выделяем этот мак
- статиески привязываем его (сначала опустошаем потом привязываем это для тех кому мак не нужно привязывать, команда -s попросту не сработает)
- если же мак в базе и реальный мак разные тогда в базу заносится новый, сделано для того кто меняет сетевушку, всё равно кто то левый не сможет достучаться до сервера чтобы это сделать :)

собственно вот, а так ещё раз в сутки по крону отрабатывает скрипт
macfix
#!/bin/sh

source /etc/stargazer/sql.conf

# lan0
for ((ip=2;ip<255;ip++));
do /usr/sbin/arp -s 192.168.0.${ip} ${firmmac}
done;
echo "lan0 done"

# lan1
for ((ip=2;ip<31;ip++));
do /usr/sbin/arp -s 192.168.1.${ip} ${firmmac}
done;
echo "lan1 done"

# lan2
for ((ip=2;ip<15;ip++));
do /usr/sbin/arp -s 192.168.2.${ip} ${firmmac}
done;
echo "lan2 done"

LOGINS=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT login FROM users"`
for login in $LOGINS
do
    IP=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT IP FROM users WHERE login = &#39;$login&#39;"`
    MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = &#39;$login&#39;"`
    LOCKED=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Down FROM users WHERE login = &#39;$login&#39;"`
    if [ $LOCKED = 0 ]; then
        /usr/sbin/arp -d $IP
        /usr/sbin/arp -s $IP $MAC
    fi
done
lan4 done"

echo "arp table fixed"


спасибо за подробный ответ, а можно сделать так, чтобы если мак в базе и реальный мак разные тогда доступ не предоставлялся?

как я понял надо взять ваш код (только у меня база в текстовиках пока)

MAC=$(grep -i "^Userdata1=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=")
/usr/bin/arping -I $iface_cli $IP -c 1 -w 0
newMAC=`/usr/sbin/arp -a $IP | cut -f 4 -d " "`
/usr/sbin/arp -d $IP
/usr/sbin/arp -s $IP $newMAC
здесь мас подключившегося связывается с IP и если мак не равняется с маком в базе, то
#как вот тут правильно написать равенство мака в базе и newMAC, подскажите пожалуйста 
if [ -z "$MAC=$newMAC" ]; then
/sbin/iptables -t filter -A FORWARD -s $IP -j ACCEPT

  • 0

#86 yKpon

yKpon

    Оборотень

  • Сitizens
  • ФишкаФишкаФишкаФишка
  • 427 Сообщений:
  • Пол:Мужчина

Опубликовано 04 Июль 2011 - 10:09

спасибо за подробный ответ, а можно сделать так, чтобы если мак в базе и реальный мак разные тогда доступ не предоставлялся?

если по ARP жёстко привязать мак то доступа у человека с другим маком не будет вообще

у меня в DHCP для тех у кого не соответствующие маки сделан отдельный динамисеский пул, удобно когда меняют сетевушку и чтобы был доступ в кабинет пользователя, и больше никуда
  • 0

#87 Irvin

Irvin

    Пролетал Мимо

  • Маглы
  • Фишка
  • 7 Сообщений:

Опубликовано 22 Октябрь 2011 - 16:21

onConnect/onDisconnect для текстовых файлов.Парметры скорости для юзера задаются в Userdata0/Userdata1
onConnect
#!/usr/local/bin/bash
#user IP
IP=`cat ip | sed 's/ //g'`
#user ID
ID=`cat id | sed 's/ //g'`
#скорость загрузки
DOWN=`cat conf | grep -i 'Userdata0=' | sed -e "s/^.*=//g"`
#скорость отдачи
UP=`cat conf | grep -i 'Userdata1=' | sed -e "s/^.*=//g"`
ipfw="/sbin/ipfw"
inn='xl0'
 
${ipfw} pipe `expr $ID + 20000` config bw ${DOWN}Kbit/s
${ipfw} pipe `expr $ID + 25000` config bw ${UP}Kbit/s
 
${ipfw} add `expr $ID + 15000` pipe `expr $ID + 20000` ip from any to ${IP}
${ipfw} add `expr $ID + 15000` pipe `expr $ID + 25000` ip from ${IP} to any

onDisconnect
#!/usr/local/bin/bash
#user IP
IP=`cat ip | sed 's/ //g'`#user ID
ID=`cat id | sed 's/ //g'`
ipfw="/sbin/ipfw"
#удаление правил с шейпера
${ipfw} pipe delete `expr $ID + 20000`
${ipfw} pipe delete `expr $ID + 25000`
#удаление правил с файервола
${ipfw} delete `expr $ID + 15000`

  • 0

#88 madf

madf

    Дьявол

  • Сitizens
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 4 075 Сообщений:
  • Пол:Мужчина
  • Город:Дніпро

Опубликовано 23 Октябрь 2011 - 11:26

Предлагаю заменить
DOWN=`cat conf | grep -i 'Userdata0=' | sed -e "s/^.*=//g"`
UP=`cat conf | grep -i 'Userdata1=' | sed -e "s/^.*=//g"`
на
DOWN=`grep -i "userdata0=" conf | tail -c +11`
UP=`grep -i userdata1 conf | tail -c +11`
Меньше на 1 форк и tail по идее быстрее чем sed.
Скрипты, к стати, не полны. Почему бы не привести их в полном, готовом к использованию виде?
Ну и непонятны вот эти телодвижения:
IP=`cat ip | sed 's/ //g'`
ID=`cat id | sed 's/ //g'`
Если ip и id это переменные которые получаем из параметров то нужно делать не cat а echo. И в них и так проблелов быть не может, это сгенерированные значения.

Изменено: madf, 23 Октябрь 2011 - 11:27
опечатка

  • 0

#89 Irvin

Irvin

    Пролетал Мимо

  • Маглы
  • Фишка
  • 7 Сообщений:

Опубликовано 03 Ноябрь 2011 - 14:36

Скрипты, к стати, не полны. Почему бы не привести их в полном, готовом к использованию виде?

Плнаруется перевод БД на MySQL, поэтому вряд ли...
Возможно у кого-то есть примеры ограничения скорости для каждой учетки под mysql?
  • 0

#90 Небесный

Небесный

    Оборотень

  • Сitizens
  • ФишкаФишкаФишкаФишка
  • 390 Сообщений:
  • Пол:Мужчина

Опубликовано 06 Ноябрь 2011 - 18:46

В Ubilling посмотрите примеры нарезки скорости, если я не ошибаюсь и за некоторое отсутствие под руками клавы на меня не отразилось, там нету привязки к файловой базе.
  • 1

#91 Troj

Troj

    Пролетал Мимо

  • Маглы
  • Фишка
  • 1 Сообщений:

Опубликовано 31 Март 2015 - 21:16

Помогите с примерами скриптов onconnect для микротик апи.


  • 0

#92 yKpon

yKpon

    Оборотень

  • Сitizens
  • ФишкаФишкаФишкаФишка
  • 427 Сообщений:
  • Пол:Мужчина

Опубликовано 02 Апрель 2015 - 11:53

предполагаю что нужно изучать само API от микротика, к биллингу это никакого отношения не имеет


  • 0

#93 nightfly

nightfly

    Дьявол

  • Сitizens
  • ФишкаФишкаФишкаФишкаФишкаФишкаФишкаФишка
  • 4 378 Сообщений:
  • Пол:Мужчина
  • Город:wild west

Опубликовано 02 Апрель 2015 - 12:03

https://github.com/n...resets/MikroTik
  • 0

Причинять добро и наносить справедливость | Ubilling - резня в дельфинарии, бобры негодуют | Шапочки из фольги оптом.





0 пользователей читают эту тему

0 members, 0 guests, 0 anonymous users

Local.blog МЕТА - Украина