Перейти до

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

Опубліковано:

Мои скрипты, всё в куче, и 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 а те что по трафику ходят напрямую.

  • 1 month later...
Опубліковано:

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

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

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

  • 3 weeks later...
Опубліковано:
При авторизации 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

  • 2 months later...
Опубліковано:

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

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

 

Можно написать на 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 Темнота

  • 3 weeks later...
Опубліковано:
Вот без запроса пароля:

$ 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 теги не работают

  • 4 weeks later...
  • 2 months later...
  • 3 months later...
Опубліковано:

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

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

 

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

 

кусок 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 пришлось закрыть, т.к. сервер с неопрееленной переодичностью виснет.

  • 1 month later...
Опубліковано:

Поделитесь пожалуйста скриптами для 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`

 

 

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

  • 5 weeks later...
Опубліковано:

Ребят может есть у кого готовое решение на данный момент сижу на 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:

  • 1 month later...
Опубліковано:

Скрипт получения одного из параметров пользователя по его логину (в данном случае - группа) из 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'`

  • 2 weeks later...
Опубліковано:

Мои скрипты для 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

Опубліковано:

Начиная с 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 локальных приходился один реальник - не проблема)

Опубліковано:

Для использования белых IP делайте алиасы и потом при помощи iptables :

iptables -t nat -A PREROUTING -i ethX -d $whiteIP -j DNAT --to $userIP
iptables -t nat -A POSTROUTING -s $userIP -j SNAT --to $whiteIP

ethX - смотрит в инет.

$whiteIP - Ваш внешний IP (XX.XXX.22.1-15)

$userIP - IP юзера (192.168.10.2)

 

А если просто выделить несколько внешних IP можно :

iptables -t nat -A POSTROUTING -s $userNET/24 -j SNAT --to $someIP

где:

$userNET/24 - подсеть юзеров (возможно не только /24 а и /32 и /26)

$someIP - несколько внешних IP , например XX.XXX.22.1-15 (с 1 по 15 - будут выдаваться рендомно)

+ этого способа - будет внешних не 1 на всех , а 15 на всех.

Или делать VLAN на юзера или свитчем его прямо в сеть с реал IP.

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

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

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

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

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

Вхід

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

Войти сейчас
  • Зараз на сторінці   0 користувачів

    • Немає користувачів, що переглядають цю сторінку.
×
×
  • Створити нове...