Dim-on-yga 0 Опубліковано: 2008-09-21 11:21:51 Share Опубліковано: 2008-09-21 11:21:51 Мои скрипты, всё в куче, и 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 11 Опубліковано: 2008-11-02 12:12:53 Share Опубліковано: 2008-11-02 12:12:53 Можете подсказать как сделать авторизацию с проверкой мак? просто в баше не очень силен, бы л бы очень благодарен если бы кинули огрызок такого кода, и обяснили что нужно создавать, и в каких файлах. ОСь у меня ubuntu server, использую iptables. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2008-11-03 09:02:01 Share Опубліковано: 2008-11-03 09:02:01 Можете подсказать как сделать авторизацию с проверкой мак? просто в баше не очень силен, бы л бы очень благодарен если бы кинули огрызок такого кода, и обяснили что нужно создавать, и в каких файлах. ОСь у меня ubuntu server, использую iptables. При авторизации MAC не проверяется. Но можно сделать дополнительную проверку в OnConnect. Описываем MAC, например, в в одном из полей UserData. При вызове скрипта получаем реальный MAC с помощью arp -n $IP (ну там еще tail'ом и cut'ом немножко поработать), и вычитываем соответствующий UserData из БД (файловой или SQL'ной). Если совпадает - разрешаем юзера в файрволле. Ссылка на сообщение Поделиться на других сайтах
Dim-on-yga 0 Опубліковано: 2008-11-23 04:26:59 Share Опубліковано: 2008-11-23 04:26:59 При авторизации 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 2 Опубліковано: 2009-02-05 00:48:57 Share Опубліковано: 2009-02-05 00:48:57 Подыму вопрос, прозвучавший выше. Надо на баше вытащить из мускуля данные для онконнект (тариф и/или юзердату) Можно написать на bash, используя клиент mysqlman mysql А можно примерчик? а то не могу сообразить как правильно это написать. Или может вызывать другой скрипт, написанный на php (пример коннекта в мускуль я видел, под себя переделаю). Тогда как передать переменные туда и обратно? К сожалению я не программист, посему прошу помощи. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2009-02-05 10:28:43 Share Опубліковано: 2009-02-05 10:28:43 $ 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 279 Опубліковано: 2009-02-05 10:30:43 Share Опубліковано: 2009-02-05 10:30:43 Вот без запроса пароля: $ mysql -Ns -u stg --password=123456 abstract_catalogue -e 'SELECT name, title FROM tb_pages' lightness Свет darkness Темнота Ссылка на сообщение Поделиться на других сайтах
Paganel 2 Опубліковано: 2009-02-23 19:58:28 Share Опубліковано: 2009-02-23 19:58:28 Вот без запроса пароля:$ 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 0 Опубліковано: 2009-03-02 13:05:00 Share Опубліковано: 2009-03-02 13:05:00 Вот мой простенький скрипт для создания пользователей автоматом ( замахался по штуке создавать ) кидаем в папку пустой 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 8 Опубліковано: 2009-03-30 09:35:08 Share Опубліковано: 2009-03-30 09:35:08 под линукс есть у кого скрипты с выбором направлений? Ссылка на сообщение Поделиться на других сайтах
feducha 0 Опубліковано: 2009-06-29 09:23:46 Share Опубліковано: 2009-06-29 09:23:46 Откуда или как формируется параметр ID=$4? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2009-06-29 10:11:13 Share Опубліковано: 2009-06-29 10:11:13 Внутренний счетчик пользователей. Ссылка на сообщение Поделиться на других сайтах
trinux 3 Опубліковано: 2009-10-17 11:05:31 Share Опубліковано: 2009-10-17 11:05:31 Относительно стг вопросов нет, но вот конкретно по скриптам, дело в том, что бывает виснет сервер при срабатывании скрипта дисконнекта. Это связанно непосредственно с правилами убиения входящей скорости... переломал все глаза уже не могу найти причину глюка. Выкладываю на ваш суд, может найдет кто-то чего страшного. Относительно Шейпинга при старте кусок 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 0 Опубліковано: 2009-12-08 08:38:24 Share Опубліковано: 2009-12-08 08:38:24 Поделитесь пожалуйста скриптами для mysql на Freedsd 7.1, что бы можно было вытянуть параметр логин, айпи, скорость Ссылка на сообщение Поделиться на других сайтах
nightfly 1 241 Опубліковано: 2009-12-08 09:11:09 Share Опубліковано: 2009-12-08 09:11:09 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 0 Опубліковано: 2010-01-07 19:00:33 Share Опубліковано: 2010-01-07 19:00:33 Ребят может есть у кого готовое решение на данный момент сижу на traffic inspector под windows что реализованно: 2 интернет канала, динамический шейпер на каждый канал, возможность указание пользователю максимальной скорости, а при достижение определённого порога снижение скорости до указанной велечины. Тоесть есть тариф Unlime5 максимальная возможная скорость 3мб/с, но при достижении скаченной информации в 5гб скорость становиться максимально возможная 128кБ/с. Поставил stargazer c базой firebird. Очень охото спрыгнуть с traffic inspectora на stargazer. Если разберусь сам быстрее то обезательно выложу свой пример. Ссылка на сообщение Поделиться на других сайтах
Kucher2 122 Опубліковано: 2010-01-08 09:03:59 Share Опубліковано: 2010-01-08 09:03:59 Для 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 0 Опубліковано: 2010-02-23 05:22:22 Share Опубліковано: 2010-02-23 05:22:22 Скрипт получения одного из параметров пользователя по его логину (в данном случае - группа) из 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 0 Опубліковано: 2010-03-05 08:11:33 Share Опубліковано: 2010-03-05 08:11:33 Мои скрипты для Stargazer'a 1. OC - Debian Linux, iptables, iproute на борту 2. База хранится в MySQL, скрипты считывают недостающие параметры запросом из базы 3. Реализовано вкл./выкл. абонента, работа с несколькими IP для каждого абонента, привязка MAC к IP, установка шейпера в зависимости от пакета или индивидуально для каждого клиента 4. Дополнительно - скрипты инициализации/удаления шейпера, периодической проверки привязки MAC-IP. монитора (watchdog'a) для stargazer'a, скрипт запуска/остановки stargazer'a Скрипты брать здесь, читать подробности здесь Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2010-03-05 08:52:19 Share Опубліковано: 2010-03-05 08:52:19 Мои скрипты для 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 3 Опубліковано: 2010-03-05 10:24:54 Share Опубліковано: 2010-03-05 10:24:54 Мои скрипты для 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 0 Опубліковано: 2010-03-05 13:26:52 Share Опубліковано: 2010-03-05 13:26:52 Fri Mar 05 12:23:37 2010 550 pub/stg/etc/stargazer/OnConnect: Permission denied Подправил права, должно грузиться Ссылка на сообщение Поделиться на других сайтах
iom 0 Опубліковано: 2010-03-05 13:31:36 Share Опубліковано: 2010-03-05 13:31:36 Начиная с 2.405 Stargazer сам пишет pid-файл (смотри в конфиге параметр PIDFile). Так что строка ps x | grep $DAEMON | grep -v grep | cut -f1 -d" " > $PIDFILE не нужна И то верно. Скрипт по сути один в один из пакета с исходниками, должно быть, со старых версий не переписывался. Я добавил только инициализацию/удаление правил шейпера. Ссылка на сообщение Поделиться на других сайтах
heavydude 0 Опубліковано: 2010-03-13 01:49:20 Share Опубліковано: 2010-03-13 01:49:20 Подскажите пожалуйста решение данного вопроса, если кто сталкивался. Провайдер дал 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 36 Опубліковано: 2010-03-13 16:26:29 Share Опубліковано: 2010-03-13 16:26:29 Для использования белых 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. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас