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

Скрипты onConnect/onDisconnect

Рекомендованные сообщения

Неправильно думал. Это не stdin, это командная строка - просто указывай параметры после имени сркипта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мои скрипты, всё в куче, и Squid и HTB на линюхе с Iptables.

Squid собран из сырцов с поддержкой транспарент и в нестандартном каталоге.

Часть идей отсюда, часть идей своих.

squid.conf

acl client src "/utils/squid/users"

http_access allow client

OnConnect

#!/bin/sh

IPTABLES="/sbin/iptables"

LOGIN=$1

IP=$2

CASH=$3

ID=$4

DIRS=$5

USERCFG="/var/stargazer/users/$LOGIN/conf"

MAC=`cat "$USERCFG" | grep "Userdata0=" | cut -d"=" -f2`

ANLIM_KEY="forsage_"

TARIFFNAME=`cat "$USERCFG" | grep "Tariff=" | cut -d"=" -f2`

if [ "${TARIFFNAME}" != "no_inet" ]; then

if [ "${TARIFFNAME}" != "freeze" ]; then

LIMIT_VALUE=${TARIFFNAME#${ANLIM_KEY}}

if [ "${LIMIT_VALUE}" != "${TARIFFNAME}" ]; then

echo "$IP # $LOGIN

" >> /utils/squid/users

/utils/squid/sbin/tsquid -k reconfigure

tc class add dev eth0 parent 1:1 classid 1:1${ID}0 htb rate ${LIMIT_VALUE}kbps

tc filter add dev eth0 parent 1: protocol ip prio 1${ID}0 u32 match ip dst $IP flowid 1:1${ID}0

$IPTABLES -t nat -A PREROUTING -s $IP -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080

fi

if [ -z "$MAC"]; then

$IPTABLES -A FORWARD -s $IP -j ACCEPT

$IPTABLES -A FORWARD -d $IP -j ACCEPT

else

$IPTABLES -A FORWARD -s $IP -m mac --mac-source $MAC -j ACCEPT

$IPTABLES -A FORWARD -d $IP -j ACCEPT

fi

fi

fi

OnDisconnect

#!/bin/sh

IPTABLES = "/sbin/iptables"

LOGIN=$1

IP=$2

CASH=$3

ID=$4

DIRS=$5

IPTABLES="/sbin/iptables"

ANLIM_KEY="forsage_"

USERCFG="/var/stargazer/users/$LOGIN/conf"

MAC=`cat "$USERCFG" | grep "Userdata0=" | cut -d"=" -f2`

TARIFFNAME=`cat "$USERCFG" | grep "Tariff=" | cut -d"=" -f2`

LIMIT_VALUE=${TARIFFNAME#${ANLIM_KEY}}

LIMIT="-m limit --limit ${LIMIT_VALUE}/s --limit-burst ${LIMIT_VALUE}0"

$IPTABLES -D FORWARD -s $IP -j ACCEPT

$IPTABLES -D FORWARD -s $IP -m mac --mac-source $MAC -j ACCEPT

$IPTABLES -D FORWARD -d $IP -j ACCEPT

$IPTABLES -D INPUT -s $IP -p tcp --dport 8080 -j ACCEPT

tc filter del dev eth0 parent 1: protocol ip prio 1${ID}0 u32 match ip dst ${IP} flowid 1:1${ID}0

if [ "${LIMIT_VALUE}" != "${TARIFFNAME}" ]; then

ON=`cat /utils/squid/users | grep -v "$IP # $LOGIN"`

echo "$ON" > /utils/squid/users

/utils/squid/sbin/tsquid -k reconfigure

fi

tc class del dev eth0 parent 1:1 classid 1:1${ID}0 htb rate ${LIMIT_VALUE}kbps

$IPTABLES -t nat -D PREROUTING -i eth0 -s $IP -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080

/etc/rc.d/ipt

#!/bin/bash

iptables -F

iptables -t nat -F

iptables -X

iptables -t nat -X

iptables -P FORWARD DROP

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.14.0/24 -o tun66 -j SNAT --to-source 10.85.210.2

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

iptables -t nat -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

/etc/rc.d/rc.local

#!/bin/sh

> /utils/squid/users

/utils/squid/sbin/tsquid

/etc/rc.d/ipt

/etc/rc.d/cutspeed

/usr/sbin/stargazer

/etc/rc.d/cutspeed

#!/bin/sh

tc qdisc add dev eth0 root handle 1: htb

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit

tc filter add dev eth0 parent 1: prio 2 protocol ip u32 match ip src 192.168.14.252 flowid 1:1

\

Безлимитчики ходят через Squid а те что по трафику ходят напрямую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


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

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

Поделиться сообщением


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

зачем всё так сложно.

можно мак адрес просто добавлять в Iptables , вот мой обновлённый OnConnect с мак адресами, он лежит в UserData0.

#!/bin/sh

IPTABLES="/sbin/iptables"

LOGIN=$1

IP=$2

CASH=$3

ID=$4

DIRS=$5

USERCFG="/var/stargazer/users/$LOGIN/conf"

MAC=`cat "$USERCFG" | grep "Userdata0=" | cut -d"=" -f2`

ANLIM_KEY="forsage_"

TARIFFNAME=`cat "$USERCFG" | grep "Tariff=" | cut -d"=" -f2`

if [ "${TARIFFNAME}" != "no_inet" ]; then

if [ "${TARIFFNAME}" != "freeze" ]; then

LIMIT_VALUE=${TARIFFNAME#${ANLIM_KEY}}

if [ "${LIMIT_VALUE}" != "${TARIFFNAME}" ]; then

echo "$IP # $LOGIN

" >> /utils/squid/users

/utils/squid/sbin/tsquid -k reconfigure

tc class add dev eth0 parent 1:1 classid 1:1${ID}0 htb rate ${LIMIT_VALUE}kbps

tc filter add dev eth0 parent 1: protocol ip prio 1${ID}0 u32 match ip dst $IP flowid 1:1${ID}0

tc filter add dev eth0 parent 1: protocol ip prio 1${ID}0 u32 match ip src $IP flowid 1:1${ID}0

if [ -z "$MAC"]; then

$IPTABLES -t nat -A PREROUTING -s $IP -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080

else

$IPTABLES -t nat -A PREROUTING -s $IP -m mac --mac-source $MAC -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080

fi

fi

if [ -z "$MAC"]; then

$IPTABLES -A FORWARD -s $IP -j ACCEPT

$IPTABLES -A FORWARD -d $IP -j ACCEPT

else

$IPTABLES -A FORWARD -s $IP -m mac --mac-source $MAC -j ACCEPT

$IPTABLES -A FORWARD -d $IP -j ACCEPT

fi

fi

fi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подыму вопрос, прозвучавший выше.

Надо на баше вытащить из мускуля данные для онконнект (тариф и/или юзердату)

 

Можно написать на bash, используя клиент mysql

man mysql

 

А можно примерчик? а то не могу сообразить как правильно это написать.

 

Или может вызывать другой скрипт, написанный на php (пример коннекта в мускуль я видел, под себя переделаю). Тогда как передать переменные туда и обратно?

К сожалению я не программист, посему прошу помощи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

$ mysql -u stg -p abstract_catalogue -e 'SELECT name, title FROM tb_pages'

Enter password:

+-----------+----------------+

| name | title |

+-----------+----------------+

| lightness | Свет |

| darkness | Темнота |

+-----------+----------------+

 

$ mysql -sN -u stg -p abstract_catalogue -e 'SELECT name, title FROM tb_pages'

Enter password:

lightness Свет

darkness Темнота

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот без запроса пароля:

$ mysql -Ns -u stg --password=123456 abstract_catalogue -e 'SELECT name, title FROM tb_pages'

lightness Свет

darkness Темнота

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Вот без запроса пароля:

$ mysql -Ns -u stg --password=123456 abstract_catalogue -e 'SELECT name, title FROM tb_pages'

lightness Свет

darkness Темнота

Спасибо!!!!

Сделал так (может кому пригодится, у меня работает):

 

set `mysql -Ns -u stg_user --password=123456 db_stg -e 'SELECT Tariff, Userdata0 FROM users WHERE login="'$LOGIN'"'`

tar=$1

mac=$2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот мой простенький скрипт для создания пользователей автоматом

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

кидаем в папку пустой conf (c пустыми IP и PASSWORD ) - IP= - вот так

и пустой stat

 

запускаем users_creator №подсети начало конец диапазона

пример users_creator 6 20 30

создает 10 штук пользователей 6020-6030 с IP 192.168.6.20-192.168.6.30

( если другие адреса исправьте в скрипте )

 

users_creator

 

#!/bin/bash

#3 октета

subnetwork=$1

#user IP

start_adress=$2

end_adress=$3

stg_folder=/var/stargazer/users/

for i in $(seq $start_adress $end_adress);.

do

if [ $i -lt 100 ]

then usr_folder="$subnetwork"0"$i"

else usr_folder="$subnetwork""$i"

fi

## создать папку.

mkdir $stg_folder$usr_folder

## создать файлы

conf=$stg_folder$usr_folder/conf

##

cp ./conf $conf

####

stat=$stg_folder$usr_folder/stat

####

cp ./stat $stat

## изменить ip

ip=192.168.$1.$i

#cat $conf | sed -e 's/IP=/IP='$ip'/'> $conf

## изменить пароль

MATRIX="0123456789"

LENGTH="8"

# ==> 'LENGTH' можно увеличить, для генерации более длинных паролей.

n=1

PASS=

while [ "${n:=1}" -le "$LENGTH" ]

do

PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"

let n+=1 # ==> Увеличить 'n' перед началом следующей итерации.

done

sed -i -e 's/IP=/IP='$ip'/' $conf.

sed -i -e 's/Password=/Password='$PASS'/' $conf.

conf_size=cat $conf | wc $conf | awk '{print $3}'

done

 

+ чтение всех паролей в файл , вызов по аналогии

 

read_users_pass

 

#!/bin/bash

#3 октета

subnetwork=$1

#user IP

start_adress=$2

end_adress=$3

stg_folder=/var/stargazer/users/

echo >users.

for i in $(seq $start_adress $end_adress);.

do

if [ $i -lt 100 ]

then usr_folder="$subnetwork"0"$i"

else usr_folder="$subnetwork""$i"

fi

ip=192.168.$1.$i

conf=$stg_folder$usr_folder/conf

##

pass=`cat "$conf" | grep "Password=" | cut -d"=" -f2`

echo $ip = $pass >> users

done

 

 

PS теги не работают

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Откуда или как формируется параметр ID=$4?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Внутренний счетчик пользователей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Относительно стг вопросов нет, но вот конкретно по скриптам, дело в том, что бывает виснет сервер при срабатывании скрипта дисконнекта. Это связанно непосредственно с правилами убиения входящей скорости... переломал все глаза уже не могу найти причину глюка.

Выкладываю на ваш суд, может найдет кто-то чего страшного.

 

Относительно Шейпинга при старте

 

кусок rc.local

 

/sbin/modprobe ifb

/sbin/modprobe sch_htb

/sbin/modprobe sch_cbq

/sbin/ifconfig ifb0 up

/sbin/ifconfig ifb1 up

#IN

#eth3

tc qdisc add dev eth3 root handle 1: cbq avpkt 1000 bandwidth 100Mbit

#eth0

tc qdisc add dev eth0 root handle 2: cbq avpkt 1000 bandwidth 100Mbit

 

#eth3

/sbin/tc qdisc add dev eth3 ingress

/sbin/tc qdisc add dev ifb1 root handle 3: htb

/sbin/tc filter add dev eth3 parent ffff: protocol ip u32 match u32 0 0 flowid 3:1 action mirred egress redirect dev ifb1

 

весь OnConnect

 

#!/bin/bash

# Login

LOGIN=$1

#user IP

IP=$2

#cash

CASH=$3

#user ID

ID=$4

#Selected dirs to connect

DIRS=$5

IPTABLES="/usr/sbin/iptables"

verh="10.1.1.0/24"

eth_local="eth3"

eth_local2="eth0"

#

$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -s $IP -j QUEUE > /dev/null

done

$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -d $IP -j QUEUE > /dev/null

done

##delete_squid_deny

$IPTABLES -D INPUT -p tcp --dport 3128 -j REJECT

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -p tcp --dport 3128 -j REJECT

done

#access_inet

$IPTABLES -A INPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

$IPTABLES -A INPUT -p tcp --dport 3128 -j REJECT

$IPTABLES -t nat -A POSTROUTING -s $IP -j MASQUERADE

$IPTABLES -t filter -A FORWARD -s $IP -j ACCEPT

$IPTABLES -t filter -A FORWARD -d $IP -j ACCEPT

#$IPTABLES -A FORWARD -s $IP -d 0/0 -j ACCEPT

##Open acces to squid port

$IPTABLES -A INPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

$IPTABLES -A OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

$IPTABLES -A FORWARD -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

done

 

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

done

 

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j DROP

done

 

$IPTABLES -D FORWARD -i $eth_local -s $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -i $eth_local -s $IP -j DROP

done

 

$IPTABLES -D FORWARD -o $eth_local -d $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -o $eth_local -d $IP -j DROP

done

 

$IPTABLES -D FORWARD -i $eth_local2 -s $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -i $eth_local2 -s $IP -j DROP

done

 

$IPTABLES -D FORWARD -o $eth_local2 -d $IP -j DROP

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -o $eth_local2 -d $IP -j DROP

done

###Redirect too squid

echo $IP >> /var/stargazer/squid/squid

/usr/local/squid/sbin/squid -k reconfigure

$IPTABLES -t nat -D PREROUTING -p tcp -s $IP -d 0/0 --dport 80 -j DNAT --to-destination 10.1.1.1:80

$IPTABLES -t nat -A PREROUTING -p tcp -s $IP -d 0/0 --dport 80 -j DNAT --to-destination 10.1.1.1:3128

#shaper eth3

tarif=`/etc/stargazer/tarif.php $2`

prioid="${ID}5"

if [ "$tarif" = "64" ]; then

speed=64

elif [ "$tarif" = "128" ]; then

speed=128

elif [ "$tarif" = "255" ]; then

speed=512

elif [ "$tarif" = "256" ]; then

speed=250

elif [ "$tarif" = "1024" ]; then

speed=1024

elif [ "$tarif" = "512" ]; then

speed=512

else

speed=0

fi

prioid1="${ID}1"

prioid2="${ID}2"

prioid22="${ID}3"

prioid11="${ID}4"

mark=`echo $IP | cut -d"." -f4`

mark2=1"$mark"

if [ $speed != 0 ]; then

echo $1 $2 $prioid $speed $tarif >> /var/log/speed

#in

tc class add dev $eth_local parent 1: classid 1:$mark2 cbq rate "$speed"Kbit allot 1500 prio 2 bounded isolated

tc filter add dev $eth_local parent 1: protocol ip prio 2 handle 800::$mark2 u32 match ip dst $IP flowid 1:$mark2

#out

tc class add dev ifb1 parent 3: classid 3:$prioid htb rate 100Kbit ceil 100Kbit

tc filter add dev ifb1 parent 3: protocol ip prio 4 handle 800::$prioid2 u32 match ip src $IP flowid 3:$prioid

fi

##shaper eth0

tarif2=`/etc/stargazer/tarif.php $2`

prioid="${ID}5"

if [ "$tarif2" = "64x" ]; then

speed2=64

elif [ "$tarif2" = "128x" ]; then

speed2=128

elif [ "$tarif2" = "256x" ]; then

speed2=256

elif [ "$tarif2" = "1024x" ]; then

speed2=1024

elif [ "$tarif2" = "512x" ]; then

speed2=512

else

speed2=0

fi

if [ $speed2 != 0 ]; then

#in

tc class add dev $eth_local2 parent 2: classid 2:$mark cbq rate "$speed2"Kbit allot 1500 prio 2 bounded isolated

tc filter add dev $eth_local2 parent 2: protocol ip prio 2 handle 800::$mark u32 match ip dst $IP flowid 2:$mark

#out

tc class add dev ifb0 parent 4: classid 4:$prioid htb rate 100Kbit ceil 100Kbit

tc filter add dev ifb0 parent 4: protocol ip prio 5 handle 800::$prioid22 u32 match ip src $IP flowid 4:$prioid

fi

echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/connect.log

 

 

 

Весь OnDisconnect

 

#!/bin/bash

#On_USER_Disconnect

# Login

LOGIN=$1

#user IP

IP=$2

#cash

CASH=$3

#user ID

ID=$4

IPTABLES="/usr/sbin/iptables"

#Selected dirs to disconnect

DIRS=$4

eth_local="eth3"

eth_local2="eth0"

prioid="${ID}5"

#SQUID ACCESS

$IPTABLES -D INPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -p tcp -s $IP -d 10.1.1.1 --dport 3128 -j ACCEPT

done

#

$IPTABLES -A INPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

$IPTABLES -A OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j DROP

$IPTABLES -A FORWARD -s $IP -p tcp -m multiport --dport 3128 -j DROP

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D INPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

done

 

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D OUTPUT -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

done

 

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -D FORWARD -s $IP -p tcp -m multiport --dport 3128 -j ACCEPT

done

 

$IPTABLES -t nat -D POSTROUTING -s $IP -j MASQUERADE

while [ $? -eq 0 ]

do

$IPTABLES -t nat -D POSTROUTING -s $IP -j MASQUERADE

done

$IPTABLES -t filter -D FORWARD -s $IP -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -s $IP -j ACCEPT

done

$IPTABLES -t filter -D FORWARD -d $IP -j ACCEPT

while [ $? -eq 0 ]

do

$IPTABLES -t filter -D FORWARD -d $IP -j ACCEPT

done

###disable redirect too squid

ON=`cat /var/stargazer/squid/squid | grep -v "$IP"`

echo "$ON" > /var/stargazer/squid/squid

/usr/local/squid/sbin/squid -k reconfigure

#$IPTABLES -t nat -D PREROUTING -p tcp -s $IP -d 10.1.1.1 --dport 80 -j DNAT --to-destination 10.1.1.1:80

$IPTABLES -t nat -D PREROUTING -p tcp -s $IP -d 0/0 --dport 80 -j DNAT --to-destination 10.1.1.1:3128

#access deny page

#$IPTABLES -t nat -A PREROUTING -p tcp -s $IP -d $QQ --dport 80 -j DNAT --to-destination $QQ:80

$IPTABLES -t nat -A PREROUTING -p tcp -s $IP -d 0/0 --dport 80 -j DNAT --to-destination 10.1.1.1:80

#$IPTABLES -t nat -A PREROUTING -p tcp -s $IP -d $ppp0 --dport 80 -j DNAT --to-destination $ppp0:80

###

$IPTABLES -I FORWARD -i $eth_local -s $IP -j DROP > /dev/null

$IPTABLES -I FORWARD -o $eth_local -d $IP -j DROP > /dev/null

$IPTABLES -I FORWARD -i $eth_local2 -s $IP -j DROP > /dev/null

$IPTABLES -I FORWARD -o $eth_local2 -d $IP -j DROP > /dev/null

#disable shaper

mark=`echo $IP | cut -d"." -f4`

mark2=1"$mark"

prioid1="${ID}1"

prioid2="${ID}2"

prioid22="${ID}3"

#shaper eth3

tarif=`/etc/stargazer/tarif.php $2`

if [ "$tarif" = "64" ]; then

speed=64

elif [ "$tarif" = "128" ]; then

speed=128

elif [ "$tarif" = "255" ]; then

speed=512

elif [ "$tarif" = "256" ]; then

speed=250

elif [ "$tarif" = "1024" ]; then

speed=1024

elif [ "$tarif" = "512" ]; then

speed=512

else

speed=0

fi

#

if [ $speed != 0 ]; then

tc filter del dev ifb1 parent 3: protocol ip prio 4 handle 800::$prioid2 u32 match ip src $IP flowid 3:$prioid

tc class del dev ifb1 parent 3: classid 3:$prioid htb rate 100Kbit ceil 100Kbit

sleep 5

#tc filter del dev $eth_local parent 1: protocol ip prio 2 handle 800::$mark2 u32 match ip dst $IP flowid 1:$mark2

#tc class del dev $eth_local parent 1: classid 1:$mark2 cbq rate "$speed"Kbit allot 1500 prio 2 bounded isolated

fi

##shaper eth0

tarif2=`/etc/stargazer/tarif.php $2`

if [ "$tarif2" = "64x" ]; then

speed2=64

elif [ "$tarif2" = "128x" ]; then

speed2=128

elif [ "$tarif2" = "256x" ]; then

speed2=256

elif [ "$tarif2" = "1024x" ]; then

speed2=1024

elif [ "$tarif2" = "512x" ]; then

speed2=512

else

speed2=0

fi

#in

if [ $speed2 != 0 ]; then

tc filter del dev ifb0 parent 4: protocol ip prio 5 handle 800::$prioid22 u32 match ip src $IP flowid 4:$prioid

tc class del dev ifb0 parent 4: classid 4:$prioid htb rate 100Kbit ceil 100Kbit

sleep 5

#tc filter del dev $eth_local2 parent 2: protocol ip prio 2 handle 800::$mark u32 match ip dst $IP flowid 2:$mark

#tc class del dev $eth_local2 parent 2: classid 2:$mark cbq rate "$speed2"Kbit allot 1500 prio 2 bounded isolated

fi

echo $1 `date +"%Y/%m/%d-%T"` >> /var/log/disconnect.log

 

 

 

Убирание tc пришлось закрыть, т.к. сервер с неопрееленной переодичностью виснет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

GetSpeed.php

 

#!/usr/local/bin/php

<?php

$login=$argv[1];

$link = mysql_connect("localhost", "login", "password");

mysql_select_db("stg");

$query = 'SELECT `Userdata0` FROM users where `login`= "'.$login.'"';

$result = mysql_query($query);

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

foreach ($line as $col_value) {

print ($col_value);

}

}

?>

 

# OnConnect

 

IFACE="em0"

LOGIN=$1

IP=$2

CASH=$3

ID=$4

SPEED=`/etc/stargazer/GetSpeed $LOGIN`

 

 

и так далее по аналогии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребят может есть у кого готовое решение на данный момент сижу на traffic inspector под windows что реализованно: 2 интернет канала, динамический шейпер на каждый канал, возможность указание пользователю максимальной скорости, а при достижение определённого порога снижение скорости до указанной велечины. Тоесть есть тариф Unlime5 максимальная возможная скорость 3мб/с, но при достижении скаченной информации в 5гб скорость становиться максимально возможная 128кБ/с. Поставил stargazer c базой firebird. Очень охото спрыгнуть с traffic inspectora на stargazer. Если разберусь сам быстрее то обезательно выложу свой пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для Stargazer это можно реализовать через скрипт OnConnect, засунув туда проверку на кол-во трафика. Например по аналогии:

#!/bin/sh
fwcmd="/sbin/ipfw"
ip=$2
login=$1
id=$4
cash=$3
sgconf="/var/stargazer/cm/sgconf"
trf=`grep 'Tariff=' /var/stargazer/users/$login/conf | cut -d '=' -f2`

...

if [ $trf = '256' ]
then
${fwcmd} pipe `expr $id '*' 20 + 29001` config bw 288Kbit/s
${fwcmd} pipe `expr $id '*' 20 + 29002` config bw 288Kbit/s
${fwcmd} add `expr $id '*' 20 + 29005` pipe `expr $id '*' 20 + 29001` all from any to $ip via rl0
${fwcmd} add `expr $id '*' 20 + 29006` pipe `expr $id '*' 20 + 29002` all from $ip to any via rl0
echo "C `date +%Y.%m.%d-%H.%M.%S``arp $ip` $cash" >> /var/stargazer/users/$login/connect.log
   exit 1
fi
...
   exit 1

Только в Вашем случае можно вытаскивать из файла stat - поля U0 и D0, складывать их и сравнивать с максимумом. Соответственно, если максимум превышен - значит загоняем юзера в pipe.

Поскольку OnConnect выполняется в момент подключения, периодически придётся запускать скрипт, перебирающий юзеров по списку. Если он находит у кого-то превышение трафика, можно просто вкл/выкл юзера через sgconf или заморозить/разморозить, чтоб правила обновились.

Ну, для СТГ с базами не в файлах - идея аналогична. :unsure:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скрипт получения одного из параметров пользователя по его логину (в данном случае - группа) из Firebird . Используется bash, fbsql и awk.

tmpfile=`mktemp`
outfile=`mktemp`
echo "select grp from tb_users where name='$LOGIN';" > $tmpfile
fbsql -u sysdba -p masterkey /var/lib/firebird/databases/stargazer.fdb -i $tmpfile -o $outfile
group=`awk 'NR==4{gsub(/^[ \t]+|[ \t]+$/,"");printf "%s",$0}' $outfile`
rm -f $tmpfile $outfile

 

В частности, кусок кода

awk 'NR==4{gsub(/^[ \t]+|[ \t]+$/,"");printf "%s",$0}' $outfile

оставляет только 4-ю строку результата запроса fbsql, убирает лишние пробелы и перевод строки.

 

Тоже самое, но для mysql, выглядит чуть более компактно:

group=`mysql --user='stg_user' --password='stg_user' --skip-column-names --execute="select stggroup from users where login='$LOGIN' limit 1" stg_database | tr -d '\012'`

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мои скрипты для Stargazer'a

 


  • 1. OC - Debian Linux, iptables, iproute на борту


  • 2. База хранится в MySQL, скрипты считывают недостающие параметры запросом из базы


  • 3. Реализовано вкл./выкл. абонента, работа с несколькими IP для каждого абонента, привязка MAC к IP, установка шейпера в зависимости от пакета или индивидуально для каждого клиента


  • 4. Дополнительно - скрипты инициализации/удаления шейпера, периодической проверки привязки MAC-IP. монитора (watchdog'a) для stargazer'a, скрипт запуска/остановки stargazer'a

 

Скрипты брать здесь, читать подробности здесь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мои скрипты для Stargazer'a

 


  • 1. OC - Debian Linux, iptables, iproute на борту


  • 2. База хранится в MySQL, скрипты считывают недостающие параметры запросом из базы


  • 3. Реализовано вкл./выкл. абонента, работа с несколькими IP для каждого абонента, привязка MAC к IP, установка шейпера в зависимости от пакета или индивидуально для каждого клиента


  • 4. Дополнительно - скрипты инициализации/удаления шейпера, периодической проверки привязки MAC-IP. монитора (watchdog'a) для stargazer'a, скрипт запуска/остановки stargazer'a

 

Скрипты брать здесь, читать подробности здесь

Начиная с 2.405 Stargazer сам пишет pid-файл (смотри в конфиге параметр PIDFile). Так что строка

ps x | grep $DAEMON | grep -v grep | cut -f1 -d" " > $PIDFILE

не нужна :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Мои скрипты для Stargazer'a

 

1. OC - Debian Linux, iptables, iproute на борту

 

 

2. База хранится в MySQL, скрипты считывают недостающие параметры запросом из базы

 

 

3. Реализовано вкл./выкл. абонента, работа с несколькими IP для каждого абонента, привязка MAC к IP, установка шейпера в зависимости от пакета или индивидуально для каждого клиента

 

 

4. Дополнительно - скрипты инициализации/удаления шейпера, периодической проверки привязки MAC-IP. монитора (watchdog'a) для stargazer'a, скрипт запуска/остановки stargazer'a

 

 

 

Скрипты брать здесь, читать подробности здесь

 

Fri Mar 05 12:23:37 2010 550 pub/stg/etc/stargazer/OnConnect: Permission denied

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Fri Mar 05 12:23:37 2010 550 pub/stg/etc/stargazer/OnConnect: Permission denied

 

Подправил права, должно грузиться

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Начиная с 2.405 Stargazer сам пишет pid-файл (смотри в конфиге параметр PIDFile). Так что строка

ps x | grep $DAEMON | grep -v grep | cut -f1 -d" " > $PIDFILE

не нужна :)

И то верно. Скрипт по сути один в один из пакета с исходниками, должно быть, со старых версий не переписывался. Я добавил только инициализацию/удаление правил шейпера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите пожалуйста решение данного вопроса, если кто сталкивался.

 

Провайдер дал IP адрес XX.XXX.20.2 и шлюз XX.XXX.20.1

Плюс дал 16 адресов XX.XXX.22.0 ... XX.XXX.22.15

 

Все это я прописал на порт (ось центос 5.4), все реальники извне пингуются.

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

 

(далее уже по аналогии всю сетку разбросать, чтобы скажем на 10 локальных приходился один реальник - не проблема)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×