Страница 1 из 1

Проверка депозита

Добавлено: Чт фев 03, 2011 11:29 am
anstep
Доброго времени суток.
Положил такой скрипт в /etc/ppp/ip-up.d/ для проверки депозита, но проверяется не у всех клиентов, даже в no_money.log не всех пишет. У клиентов на депозите 0.01. Подскажите где искать проблему.

Код: Выделить всё

#!/bin/sh
export CDATE=$(date "+%Y-%m-%d_%H:%M:%S")
FILTERS=`/usr/bin/awk   '/Filter-Id/    {print $2}'     /var/run/radattr.$1`
IP_PPTP=${PPP_REMOTE}
IF_PPTP=${PPP_IFACE}
UNAME=`/usr/bin/radwho|grep ${IP_PPTP}|awk '{print $2}'|head -n 1`
USERBALANCE=$( /usr/bin/mysql -uroot -p111111 -B abills -e \
            "SELECT SUM(users.credit + bills.deposit) FROM users \
            INNER JOIN bills ON (users.uid=bills.uid) \
            INNER JOIN dv_main ON (dv_main.uid=users.uid) \
            WHERE users.id='$UNAME' AND dv_main.tp_id!=1" | /usr/bin/tail -n 1 )

        iptables -A FORWARD -i ${IF_PPTP} -o eth3 -s ${IP_PPTP} -j ACCEPT
        iptables -A FORWARD -i eth3 -o ${IF_PPTP} -d ${IP_PPTP} -m state --state RELATED,ESTABLISHED -j ACCEPT
if [ "$FILTERS" = "no_money" ]; then
    echo "$CDATE User [$1] $FILTERS / $UNAME (${IP_PPTP}) add rules (no_money filter)" >> /var/log/no_money.log

elif [ "x$USERBALANCE" != "x" ] && [ "x$USERBALANCE" != "xNULL" ]; then
    echo "$CDATE $UNAME $USERBALANCE negative" >> /var/log/no_money.log
if [ "x$( /usr/bin/awk 'BEGIN { if('$USERBALANCE'<=0.1) print("NEGATIVE") }' )" = "xNEGATIVE" ]; then
                echo "$CDATE User [$1] $FILTERS / $UNAME [${IP_PPTP}] add rules (negative deposit $USERBALANCE)" >> /var/log/no_money.log
                iptables -D FORWARD -i ${IF_PPTP} -o eth3 -s ${IP_PPTP}  -j ACCEPT
                iptables -D FORWARD -i eth3 -o ${IF_PPTP} -d ${IP_PPTP} -m state --state RELATED,ESTABLISHED -j ACCEPT
                iptables -t nat -A PREROUTING -s ${IP_PPTP} -p tcp -m multiport --dport 80,81,82,8080,3128,443 -j DNAT --to-destination 10.0.0.1:81
        else
                echo "$CDATE User [$1] $FILTERS / $UNAME [${IP_PPTP}] logged in (deposit: $USERBALANCE)" >> /var/log/no_money.log
        fi
fi

Re: Проверка депозита

Добавлено: Чт фев 03, 2011 11:47 pm
anstep
убрал соответствие в таблице dv_main, проблема отпала

Re: Проверка депозита

Добавлено: Вт июн 14, 2011 3:57 pm
triton4ik
так собственно вот чего Вам не хватает:
Нужно создать цепочку проверки
например назовем ее NO_MONEY в основном скрипте айпитейлс в системе
например вот так (Для примера возьмем сеть 192.168.1.0 с маской 255.255.255.0

iptables -t nat -N NO_MONEY
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j NO_MONEY
iptables -t nat -A NO_MONEY -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 8080

Далее нам требуется добавить правила уже в ip-up это в случае если не нужно перенаправлять на страницу заглушку

iptables -t nat -D NO_MONEY -s ${IP_PPTP} -j RETURN
iptables -I FORWARD -s %IP -d 0/0 -j ACCEPT
iptables -I FORWARD -s 0/0 -d ${IP_PPTP} -j ACCEPT


а это в случае если нужно вернуть обратно на проверку, так, как если вы не удалите цепочку до до следующей очистки он у Вас не попадет на страницу заглушку при следующем подключении

iptables -t nat -I NO_MONEY -s ${IP_PPTP} -j RETURN
iptables -I FORWARD -s ${IP_PPTP} -d 0/0 -j DROP
iptables -I FORWARD -s 0/0 -d ${IP_PPTP} -j DROP

вот все что Вам нужно, удачи))

Re: Проверка депозита

Добавлено: Вт июн 14, 2011 8:02 pm
triton4ik
и эту строчку изменить нужно

UNAME=`/usr/bin/radwho|grep ${IP_PPTP}|awk '{print $2}'|head -n 1`

нужно привести к следующему виду:
UNAME=`/usr/bin/radwho|grep -w ${IP_PPTP}`

Re: Проверка депозита

Добавлено: Ср июн 15, 2011 6:42 pm
NiTr0
А зачем столь зловещие костыли-то изобретать? Фильтры негативного депозита что, не катят?

Re: Проверка депозита

Добавлено: Чт июн 16, 2011 10:26 am
triton4ik
NiTr0 писал(а):А зачем столь зловещие костыли-то изобретать? Фильтры негативного депозита что, не катят?
тут было описана проблема не работы, то что я увидел, то и написал где ошибка, я не разбирался че там за велосепед был изобретен