Jump to content

Скрипты onConnect/onDisconnect


Recommended Posts

  • Replies 91
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

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

Как корректно настроить маршрутизацию и маскарадинг, чтобы, скажем, 192.168.10.2 на eth1 имел реальник XX.XXX.22.15 на eth0

/sbin/iptables -t nat -I PREROUTING -i eth0 -d XX.XXX.22.15 -j DNAT --to 192.168.10.2
/sbin/iptables -t nat -I POSTROUTING -s 192.168.10.2 -o eth0 -j SNAT --to XX.XXX.22.15

А так ?

ключ -I проставлен, чтобы если у Вас прописан маскарад это правило было выше. (или уберите маскарад или СНАТ для этих адресов в старом фаерволе).

Link to post
Share on other sites

Как корректно настроить маршрутизацию и маскарадинг, чтобы, скажем, 192.168.10.2 на eth1 имел реальник XX.XXX.22.15 на eth0

/sbin/iptables -t nat -I PREROUTING -i eth0 -d XX.XXX.22.15 -j DNAT --to 192.168.10.2
/sbin/iptables -t nat -I POSTROUTING -s 192.168.10.2 -o eth0 -j SNAT --to XX.XXX.22.15

А так ?

ключ -I проставлен, чтобы если у Вас прописан маскарад это правило было выше. (или уберите маскарад или СНАТ для этих адресов в старом фаерволе).

 

Урааа - огромное спасибо, заработало.

Link to post
Share on other sites
  • 7 months later...

Люди помогите настроить билинг

мне надо чтоб было ограничение по скорости

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

может кто сможет со мной связаться по скайпу tolia_katsubo

или оставьте свои данные я вам наберу

Link to post
Share on other sites
  • 7 months later...
Можете подсказать как сделать авторизацию с проверкой мак? просто в баше не очень силен, бы л бы очень благодарен если бы кинули огрызок такого кода, и обяснили что нужно создавать, и в каких файлах. ОСь у меня 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

Link to post
Share on other sites

чтобы промерять по маку есть 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

Link to post
Share on other sites

чтобы промерять по маку есть 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 ?

Link to post
Share on other sites

Нужна жесткая привязка по мак, т.е. разрешить форвард по мак и 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 = '$login'"`
   MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = '$login'"`
   LOCKED=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Down FROM users WHERE login = '$login'"`
   if [ $LOCKED = 0 ]; then
       /usr/sbin/arp -d $IP
       /usr/sbin/arp -s $IP $MAC
   fi
done
lan4 done"

echo "arp table fixed"

Link to post
Share on other sites

Нужна жесткая привязка по мак, т.е. разрешить форвард по мак и 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 попросту не сработает)

- если же мак в базе и реальный мак разные тогда в базу заносится новый, сделано для того кто меняет сетевушку, всё равно кто то левый не сможет достучаться до сервера чтобы это сделать :)

 

собственно вот, а так ещё раз в сутки по крону отрабатывает скрипт

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 = '$login'"`
   MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = '$login'"`
   LOCKED=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Down FROM users WHERE login = '$login'"`
   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

Link to post
Share on other sites

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

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

 

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

Link to post
Share on other sites
  • 3 months later...

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`

Link to post
Share on other sites

Предлагаю заменить

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. И в них и так проблелов быть не может, это сгенерированные значения.

Edited by madf
опечатка
Link to post
Share on other sites
  • 2 weeks later...

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

Плнаруется перевод БД на MySQL, поэтому вряд ли...

Возможно у кого-то есть примеры ограничения скорости для каждой учетки под mysql?

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 3 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...