Dim-on-yga Posted September 21, 2008 Posted September 21, 2008 Мои скрипты, всё в куче, и Squid и HTB на линюхе с Iptables. Squid собран из сырцов с поддержкой транспарент и в нестандартном каталоге. Часть идей отсюда, часть идей своих. squid.conf acl client src "/utils/squid/users"http_access allow client OnConnect #!/bin/shIPTABLES="/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/shIPTABLES = "/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/bashiptables -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/shtc 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 а те что по трафику ходят напрямую.
Ziki Posted November 2, 2008 Posted November 2, 2008 Можете подсказать как сделать авторизацию с проверкой мак? просто в баше не очень силен, бы л бы очень благодарен если бы кинули огрызок такого кода, и обяснили что нужно создавать, и в каких файлах. ОСь у меня ubuntu server, использую iptables.
madf Posted November 3, 2008 Posted November 3, 2008 Можете подсказать как сделать авторизацию с проверкой мак? просто в баше не очень силен, бы л бы очень благодарен если бы кинули огрызок такого кода, и обяснили что нужно создавать, и в каких файлах. ОСь у меня ubuntu server, использую iptables. При авторизации MAC не проверяется. Но можно сделать дополнительную проверку в OnConnect. Описываем MAC, например, в в одном из полей UserData. При вызове скрипта получаем реальный MAC с помощью arp -n $IP (ну там еще tail'ом и cut'ом немножко поработать), и вычитываем соответствующий UserData из БД (файловой или SQL'ной). Если совпадает - разрешаем юзера в файрволле.
Dim-on-yga Posted November 23, 2008 Posted November 23, 2008 При авторизации MAC не проверяется. Но можно сделать дополнительную проверку в OnConnect. Описываем MAC, например, в в одном из полей UserData. При вызове скрипта получаем реальный MAC с помощью arp -n $IP (ну там еще tail'ом и cut'ом немножко поработать), и вычитываем соответствующий UserData из БД (файловой или SQL'ной). Если совпадает - разрешаем юзера в файрволле. зачем всё так сложно. можно мак адрес просто добавлять в Iptables , вот мой обновлённый OnConnect с мак адресами, он лежит в UserData0. #!/bin/shIPTABLES="/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
Paganel Posted February 5, 2009 Posted February 5, 2009 Подыму вопрос, прозвучавший выше. Надо на баше вытащить из мускуля данные для онконнект (тариф и/или юзердату) Можно написать на bash, используя клиент mysqlman mysql А можно примерчик? а то не могу сообразить как правильно это написать. Или может вызывать другой скрипт, написанный на php (пример коннекта в мускуль я видел, под себя переделаю). Тогда как передать переменные туда и обратно? К сожалению я не программист, посему прошу помощи.
madf Posted February 5, 2009 Posted February 5, 2009 $ 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 Темнота
madf Posted February 5, 2009 Posted February 5, 2009 Вот без запроса пароля: $ mysql -Ns -u stg --password=123456 abstract_catalogue -e 'SELECT name, title FROM tb_pages' lightness Свет darkness Темнота
Paganel Posted February 23, 2009 Posted February 23, 2009 Вот без запроса пароля:$ 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
Shtorm Posted March 2, 2009 Posted March 2, 2009 Вот мой простенький скрипт для создания пользователей автоматом ( замахался по штуке создавать ) кидаем в папку пустой 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 теги не работают
yKpon Posted March 30, 2009 Posted March 30, 2009 под линукс есть у кого скрипты с выбором направлений?
trinux Posted October 17, 2009 Posted October 17, 2009 Относительно стг вопросов нет, но вот конкретно по скриптам, дело в том, что бывает виснет сервер при срабатывании скрипта дисконнекта. Это связанно непосредственно с правилами убиения входящей скорости... переломал все глаза уже не могу найти причину глюка. Выкладываю на ваш суд, может найдет кто-то чего страшного. Относительно Шейпинга при старте кусок 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 пришлось закрыть, т.к. сервер с неопрееленной переодичностью виснет.
DEZ Posted December 8, 2009 Posted December 8, 2009 Поделитесь пожалуйста скриптами для mysql на Freedsd 7.1, что бы можно было вытянуть параметр логин, айпи, скорость
nightfly Posted December 8, 2009 Posted December 8, 2009 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` и так далее по аналогии.
Sem-e-n Posted January 7, 2010 Posted January 7, 2010 Ребят может есть у кого готовое решение на данный момент сижу на traffic inspector под windows что реализованно: 2 интернет канала, динамический шейпер на каждый канал, возможность указание пользователю максимальной скорости, а при достижение определённого порога снижение скорости до указанной велечины. Тоесть есть тариф Unlime5 максимальная возможная скорость 3мб/с, но при достижении скаченной информации в 5гб скорость становиться максимально возможная 128кБ/с. Поставил stargazer c базой firebird. Очень охото спрыгнуть с traffic inspectora на stargazer. Если разберусь сам быстрее то обезательно выложу свой пример.
Kucher2 Posted January 8, 2010 Posted January 8, 2010 Для 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 или заморозить/разморозить, чтоб правила обновились. Ну, для СТГ с базами не в файлах - идея аналогична.
drewhka Posted February 23, 2010 Posted February 23, 2010 Скрипт получения одного из параметров пользователя по его логину (в данном случае - группа) из 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'`
iom Posted March 5, 2010 Posted March 5, 2010 Мои скрипты для Stargazer'a 1. OC - Debian Linux, iptables, iproute на борту 2. База хранится в MySQL, скрипты считывают недостающие параметры запросом из базы 3. Реализовано вкл./выкл. абонента, работа с несколькими IP для каждого абонента, привязка MAC к IP, установка шейпера в зависимости от пакета или индивидуально для каждого клиента 4. Дополнительно - скрипты инициализации/удаления шейпера, периодической проверки привязки MAC-IP. монитора (watchdog'a) для stargazer'a, скрипт запуска/остановки stargazer'a Скрипты брать здесь, читать подробности здесь
madf Posted March 5, 2010 Posted March 5, 2010 Мои скрипты для 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 не нужна
trinux Posted March 5, 2010 Posted March 5, 2010 Мои скрипты для 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
iom Posted March 5, 2010 Posted March 5, 2010 Fri Mar 05 12:23:37 2010 550 pub/stg/etc/stargazer/OnConnect: Permission denied Подправил права, должно грузиться
iom Posted March 5, 2010 Posted March 5, 2010 Начиная с 2.405 Stargazer сам пишет pid-файл (смотри в конфиге параметр PIDFile). Так что строка ps x | grep $DAEMON | grep -v grep | cut -f1 -d" " > $PIDFILE не нужна И то верно. Скрипт по сути один в один из пакета с исходниками, должно быть, со старых версий не переписывался. Я добавил только инициализацию/удаление правил шейпера.
heavydude Posted March 13, 2010 Posted March 13, 2010 Подскажите пожалуйста решение данного вопроса, если кто сталкивался. Провайдер дал 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 локальных приходился один реальник - не проблема)
DarkSpider Posted March 13, 2010 Posted March 13, 2010 Для использования белых 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.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now