ppoe + минусовый баланс+личный кабинет

Технические вопросы по UTM 5.0
adeep
Сообщения: 79
Зарегистрирован: Пт июн 24, 2005 18:59

Сообщение adeep »

ZeM писал(а):taf
Верил в опцию в ядре COMPAT_LINUX))
работает. надо только библиотек подтащить и brandelf сделать, если ругается.

kara
Сообщения: 125
Зарегистрирован: Вс мар 21, 2010 21:02

Сообщение kara »

mrmix25 писал(а): Повторюсь используем коммутируемый доступ, в УТМ нельзя авторизовываться заблокированным клиентам использующим услугу коммутируемый доступ, есть только один способ их авторизовать = это второй пул по другому ни как!
Скажите, а вот если абонент попросил статический IP адрес, что в таком случае вы делаете?

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

kara писал(а): Скажите, а вот если абонент попросил статический IP адрес, что в таком случае вы делаете?
если абонент попросил статический IP = выдаем, но на статике у нас всего 30-40 абонентов из ~1500 сидит и то 90% из них это Юр лица, а они платят по безналу, так что им доступ к Личному кабинету в заблокированном состоянии не предоставляем. Если ситуация измениться и более 250 абонентов не Юр лица перейдут на статику тогда скорее всего для них реализуем способ описанный выше в этой теме ну или что-то подобное что будет подходить для наших нужд.
Последний раз редактировалось mrmix25 Вт июн 18, 2013 12:17, всего редактировалось 1 раз.

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

dixanl писал(а): большое спасибо да ваша схема подходит сами решили так и сделать! если нетрудно опишите процедуру
и так что имеем
Utm 5.2.1.009
freebsd 8.2
mysql 5.1.55
и НАС
freebsd 9.1
mpd5
pf

у Меня настроено так Тарифы состоят из коммутируемый доступ в связке с передача IP трафика, расчетный период с 1 по 1 число, используем только безлимитные тарифы, абоненты не уходят в минус. Работает это примерно так 30 или 31 числа в зависимости от месяца скрипт в 23-40 блокирует всех абонентов у которых не хватает средств для списания абонентской платы далее 1 числа в 00-00 билинг списывает средства у не заблокированных абонентов затем 1 числа в 00-15 скрипт разрывает сессии всех заблокированных они переподключаются и получают ip для заблокированных абонентов, таким образом абоненты заблокированные не ушли в минус и могут подключиться чтоб проверить свой баланс и совершить онлайн платеж. Абонент пополнил свой баланс до абонентской платы скрипт его разблокирует билинг списывает средства и после этого скрипт рвет сессию абоненту чтоб абонент переподключился и получил IP для разблокированных.

UTM 5.2.1-009 - обязательно (в версиях ниже не работает это функционал)
необходимо установить freeRADIUS2 на сервер с билингом нам нужна его утилита, а именно /usr/local/bin/radclient, после установки freeRADIUS2 убираем его из авто загрузки

1) в интерфейсе администратора - настройки -IP пулы = создаем 2 пула (например: ok (пул 172.16.0.0/19 -8000 ip адресов) -для не заблокированных, block (пул 172.16.32.0/19 -8000 ip адресов)-для заблокированных)
2) в интерфейсе администратора - Тарификация - Шаблоны услуг = редактируем коммутируемый доступ во вкладке Параметры услуги = название пула указываем пул для не заблокированных пользователей ok
3)создаем тарифы точно такие как и были, но уже с пулом
4) в интерфейсе администратора - Пользователи и группы = с помощью операций над группами меняем всем пользователям одного тарифа следующий тариф на такой же только с пулом не забываем отлючить самостоятельную смену тарифов в личном кабинете(у меня расчетный период с 1 по 1, этим действием все пользователи с 1 числа перейдут на тариф с пулом)
5)в файле /netup/utm5/radius5.cfg добавить blocked_pool_name=block этим разрешим авторизацию заблокированных абонентов (незабываем ребут радиус) утм начнет авторизировать заблокированных только тех пользователей у которых в услуги коммутируемый доступ стоит пул для не заблокированных... если в услуге коммутируемый доступ пул не указан авторизировать заблокированных утм не будет
6) на Насе(FreeBSD pf) создаем правила для pf что-то типа такого
/etc/pf.conf

wan="em0" # - смотрит в инет
lan="em1" # - смотрит на абонентов
lan2="em2" # - управление
ip_pool="172.16.0.0/19" #- для не заблокированных
ip_block="172.16.32.0/19" #- для заблокированных
reder="xxx.xxx.xxx.xxx" # - обязательно внешний IP Личного кабинета на внутренний IP редирек не будет работать
robokassa="212.24.63.0/24" # - если используете сервис онлайн оплаты в личном кабинете
bpool="172.16.0.0/12,10.0.0.0/8,192.168.0.0/16,0.0.0.0/8,169.254.0.0/16,192.0.0.2/24,204.152.64.0/23,224.0.0.0/3" # - пулы ip адресов чтоб абоненты не лазили куда не надо
############################OPTIONS###############################
set block-policy drop
set skip on lo0
set skip on lan2
scrub in all
###########################NAT_RULES##############################
nat on $wan from $ip_pool to any -> $wan round-robin sticky-address # -натим не заблокированных абонентов в инет
nat on $wan from $ip_block to any -> $wan round-robin sticky-address # -натим заблокированных абонентов в инет
no rdr proto tcp from $ip_block to $robokassa # - не редиректим абонентов которые пошли платить онлайн
rdr proto tcp from $ip_block to !$reder port 80 -> $reder port 8080 # -редиректим все запросы от абонентов на страничку у вас закончились деньги
#########################FILTER_RULES#############################
pass log quick proto { udp } from $ip_block to any port 53 # разрешаем заблокированным абонентам DNS
pass log quick proto { tcp } from $ip_block to $reder keep state # разрешаем заблокированным абонентам Личный кабинет
pass log quick proto { tcp } from $ip_block to $robokassa keep state # разрешаем заблокированным абонентам онлайн платежи
block log quick from $ip_block to any # запрещаем заблокированным абонентам все остальное
block quick to {$bpool} # - чтоб абоненты не лазили куда не надо
pass all keep state (source-track rule, max-src-states 1500) # - разрешаем не заблокированным абонентам все !!!

7) на Насе(FreeBSD mpd5) в /usr/local/etc/mpd5/mpd.conf в раздел startup добавляем:

set radsrv peer 192.168.1.2 pass - откуда будут приходить радиус атрибуты, pass - пароль
set radsrv self 192.168.1.1 3799 - на каком ip и порту будет слушать mpd5 (если не указывать будет слушать на всех сетевых установленных на Насе)
set radsrv open

рестарт mpd5

это делается для того чтоб скрип смог автоматически рвать сессии.
8)в Апаче на котором крутится Личный кабинет в конфиге /usr/local/etc/apache22/httpd.conf дописываем
Listen 8080
<VirtualHost ххх.ххх.ххх.ххх:8080>
DocumentRoot /usr/local/www/noaccess
<Directory /usr/local/www/noaccess>
DirectoryIndex index.html
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>


где ххх.ххх.ххх.ххх - Внешний IP адрес Личного кабинета
в директории /usr/local/www/ создаем папку noaccess в ней файл index.html в файле index.html пишем что-то вроде этого

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<META HTTP-EQUIV="Refresh" CONTENT="60; URL=http://ВашЛичныйкабинет.ru/">
<title>ВашЛичныйкабинет.ru | недостаточно средств</title>
</head>
<body bgcolor="#f5f5f5">
<table align="center">
<rt><td height="500">
<table width=900 align="center">
<tr>
<td>
<h3 align="center">ООО "Интернет Провайдер"</h3>
<h2 style="color:red" align="center">Доступ заблокирован</h2>

<p align="center">Уважаемый абонент, на Вашем лицевом счете недостаточно средств, для включения доступа к сети Интернет.<br>

Для уточнения суммы задолженности Вы можете зайти в Личный кабинет по адресу: <a href="http://ВашЛичныйкабинет.ru/">ВашЛичныйкабинет.ru</a>.<br></p>

<p align="center"><font size="-1">Эта страница автоматически переадресуется на Личный кабинет через 60 секунд.</font></p>

</td>
</tr>
</table>
<table align="right">
<td>
</td>
<td>
</td>
<td>
<p align="left"><b>Техподдержка:</b><br>
Телефоны: 8088888888888<br>
e-mail: 1@1.ru</p>
</td>
</tr>
</table>
</td></rt>
</table>
</body>
</html>


9) Создаем скрипт который будет рвать сессии абонентов пополнивших свой баланс, так как я у себя настроили чтоб абоненты не уходили в минус скрипты я брал из этой темы(авторам скриптов огромное спасибо!) и переделал их под свои нужды выглядит он примерно так


#!/bin/sh
MYUSER="root"
MYPASS="pass"
MYHOST="127.0.0.1"
UTM5DB="UTM5"
dat=`date +%Y%m%d,%H:%M:%S`
day=`date -j +%H%M`
log="/netup/utm5/log/on.log"

RES_AID=`echo "SELECT users.basic_account AS aid FROM users INNER JOIN accounts ON (users.basic_account = accounts.id) \
INNER JOIN account_tariff_link ON (accounts.id = account_tariff_link.account_id) \
INNER JOIN tariffs_services_link ON (account_tariff_link.next_tariff_id = tariffs_services_link.tariff_id) \
LEFT OUTER JOIN periodic_services_data ON (tariffs_services_link.service_id = periodic_services_data.id) \
WHERE users.is_deleted = 0 AND accounts.is_deleted = 0 AND \
account_tariff_link.is_deleted = 0 AND tariffs_services_link.is_deleted = 0 AND \
periodic_services_data.is_deleted = 0 AND periodic_services_data.discount_method = 1 AND \
periodic_services_data.cost > 0 AND accounts.balance >= periodic_services_data.cost AND \
accounts.unlimited < 1 AND \
accounts.is_blocked = 256 ORDER BY aid" | \
mysql -h $MYHOST -u $MYUSER -p$MYPASS -D $UTM5DB`

if [ $day -ge 2300 ]; then
echo "$dat not now!!!" >> $log
elif [ $day -le 0059 ]; then
echo "$dat not now!!!" >> $log
else
for i in $RES_AID;
do
echo "$dat Unlockin accounts - $i" >> $log
ourfa_client -S rsa_cert -a edit_account -account_id $i -is_blocked 0 -int_status 1
sleep 1
c=`echo "SELECT users.login AS user \
FROM users \
WHERE users.basic_account = $i ORDER BY user" | \
mysql -h $MYHOST -u $MYUSER -p$MYPASS -D $UTM5DB`
for a in $c
do
echo "login = $a" >> $log
echo "User-Name = $a" | /usr/local/bin/radclient -r 1 192.168.1.1:3799 40 pass

done
done
fi


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

###################
На идеальную версию не претендую!
Не говорю что это единственное правильное решение этого вопроса, но Нам оно полностью подходит, настроено так на боевых серверах, абонентов ~1500 работает все уже 3-5 месяцев полет нормальный.
может Кому-нибудь пригодится.... пусть и не вся инструкция, а какая-нибудь её часть :)

garik0783
Сообщения: 25
Зарегистрирован: Пт сен 06, 2013 10:41

Сообщение garik0783 »

taf писал(а):
mrmix25 писал(а):у себя настроил такую штуку. Используем коммутируемый доступ версия УТМ 009 (в версиях ниже не работает этот функционал) в ней создаем 2 пула один для не заблокированных абонентов второй для заблокированных далее
I. Клиент, завернутый в л/к, произвел оплату через карту предоплаты. И....? Только не говрите, что ему придется переподключаться. Дополним ситуацию роутером. Заставлять клиента дергать его по питанию это не дело.

II. У клиент кончились деньги на л/с, но сессия все еще живая. Как быть?

Все-таки идеологически правильнее будет не менять клиентам адреса. На БРАСе просто создаем заворот на л/к всем адресам. Клиенты, у которых интернет включен/плюсовой баланс, обходят этот заворот через разрешительное правило. Клиенты с отрицательным балансом/выключеным интернетом в разрешенных отсуствуют, и по-умолчанию попадают на редирект.

Никаких двойных пулов, никаких требований по переподключению для клиентов, никаких костылей по принудительному прерыванию сессий клиентов в случае включить/выключить интернет.

Пример.

Создаем правила для заворота:

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

-A PREROUTING -t nat -m set --match-set station src -j ACCEPT
-A PREROUTING -t nat -m set --match-set station dst -j ACCEPT
-A PREROUTING -t nat  -i ppp+ -p tcp -m tcp --dport 80 -j DNAT --to-destination IP_ADDR_BILLING
Создаем правила фильтрации:

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

-A FORWARD -i ppp+ -m set --match-set mandatory dst -j ACCEPT
-A FORWARD -i ppp+ -m set --match-set station src -j ACCEPT
-A FORWARD -i ppp+ -j DROP
в set'е mandatory прописываем все адреса, на которые клиент должен иметь доступ при любом состоянии баланса. У нас это сервера DNS, адрес сервера с личным кабинетом и адреса онлайновых платежных систем, по которым клиент может произвести оплату (сбербанки всякие и еще какая-то шняга)

в set'е station перечисляются IP клиентов. Адреса туда заносит utm_rfw. У нас клиентам назначаются фиксированные адреса, но все должно так же работать и при использовании динамических пулов + utm5_radius
А эти правила пишится в utm или на НАС ( в моем случае это циска )?

Andrei12
Сообщения: 1
Зарегистрирован: Пт июн 03, 2016 10:39

Сообщение Andrei12 »

mrmix25 писал(а):
dixanl писал(а): большое спасибо да ваша схема подходит сами решили так и сделать! если нетрудно опишите процедуру
и так что имеем
Utm 5.2.1.009
freebsd 8.2
mysql 5.1.55
и НАС
freebsd 9.1
mpd5
pf

у Меня настроено так Тарифы состоят из коммутируемый доступ в связке с передача IP трафика, расчетный период с 1 по 1 число, используем только безлимитные тарифы, абоненты не уходят в минус. Работает это примерно так 30 или 31 числа в зависимости от месяца скрипт в 23-40 блокирует всех абонентов у которых не хватает средств для списания абонентской платы далее 1 числа в 00-00 билинг списывает средства у не заблокированных абонентов затем 1 числа в 00-15 скрипт разрывает сессии всех заблокированных они переподключаются и получают ip для заблокированных абонентов, таким образом абоненты заблокированные не ушли в минус и могут подключиться чтоб проверить свой баланс и совершить онлайн платеж. Абонент пополнил свой баланс до абонентской платы скрипт его разблокирует билинг списывает средства и после этого скрипт рвет сессию абоненту чтоб абонент переподключился и получил IP для разблокированных.

UTM 5.2.1-009 - обязательно (в версиях ниже не работает это функционал)
необходимо установить freeRADIUS2 на сервер с билингом нам нужна его утилита, а именно /usr/local/bin/radclient, после установки freeRADIUS2 убираем его из авто загрузки

1) в интерфейсе администратора - настройки -IP пулы = создаем 2 пула (например: ok (пул 172.16.0.0/19 -8000 ip адресов) -для не заблокированных, block (пул 172.16.32.0/19 -8000 ip адресов)-для заблокированных)
2) в интерфейсе администратора - Тарификация - Шаблоны услуг = редактируем коммутируемый доступ во вкладке Параметры услуги = название пула указываем пул для не заблокированных пользователей ok
3)создаем тарифы точно такие как и были, но уже с пулом
4) в интерфейсе администратора - Пользователи и группы = с помощью операций над группами меняем всем пользователям одного тарифа следующий тариф на такой же только с пулом не забываем отлючить самостоятельную смену тарифов в личном кабинете(у меня расчетный период с 1 по 1, этим действием все пользователи с 1 числа перейдут на тариф с пулом)
5)в файле /netup/utm5/radius5.cfg добавить blocked_pool_name=block этим разрешим авторизацию заблокированных абонентов (незабываем ребут радиус) утм начнет авторизировать заблокированных только тех пользователей у которых в услуги коммутируемый доступ стоит пул для не заблокированных... если в услуге коммутируемый доступ пул не указан авторизировать заблокированных утм не будет
6) на Насе(FreeBSD pf) создаем правила для pf что-то типа такого
/etc/pf.conf

wan="em0" # - смотрит в инет
lan="em1" # - смотрит на абонентов
lan2="em2" # - управление
ip_pool="172.16.0.0/19" #- для не заблокированных
ip_block="172.16.32.0/19" #- для заблокированных
reder="xxx.xxx.xxx.xxx" # - обязательно внешний IP Личного кабинета на внутренний IP редирек не будет работать
robokassa="212.24.63.0/24" # - если используете сервис онлайн оплаты в личном кабинете
bpool="172.16.0.0/12,10.0.0.0/8,192.168.0.0/16,0.0.0.0/8,169.254.0.0/16,192.0.0.2/24,204.152.64.0/23,224.0.0.0/3" # - пулы ip адресов чтоб абоненты не лазили куда не надо
############################OPTIONS###############################
set block-policy drop
set skip on lo0
set skip on lan2
scrub in all
###########################NAT_RULES##############################
nat on $wan from $ip_pool to any -> $wan round-robin sticky-address # -натим не заблокированных абонентов в инет
nat on $wan from $ip_block to any -> $wan round-robin sticky-address # -натим заблокированных абонентов в инет
no rdr proto tcp from $ip_block to $robokassa # - не редиректим абонентов которые пошли платить онлайн
rdr proto tcp from $ip_block to !$reder port 80 -> $reder port 8080 # -редиректим все запросы от абонентов на страничку у вас закончились деньги
#########################FILTER_RULES#############################
pass log quick proto { udp } from $ip_block to any port 53 # разрешаем заблокированным абонентам DNS
pass log quick proto { tcp } from $ip_block to $reder keep state # разрешаем заблокированным абонентам Личный кабинет
pass log quick proto { tcp } from $ip_block to $robokassa keep state # разрешаем заблокированным абонентам онлайн платежи
block log quick from $ip_block to any # запрещаем заблокированным абонентам все остальное
block quick to {$bpool} # - чтоб абоненты не лазили куда не надо
pass all keep state (source-track rule, max-src-states 1500) # - разрешаем не заблокированным абонентам все !!!

7) на Насе(FreeBSD mpd5) в /usr/local/etc/mpd5/mpd.conf в раздел startup добавляем:

set radsrv peer 192.168.1.2 pass - откуда будут приходить радиус атрибуты, pass - пароль
set radsrv self 192.168.1.1 3799 - на каком ip и порту будет слушать mpd5 (если не указывать будет слушать на всех сетевых установленных на Насе)
set radsrv open

рестарт mpd5

это делается для того чтоб скрип смог автоматически рвать сессии.
8)в Апаче на котором крутится Личный кабинет в конфиге /usr/local/etc/apache22/httpd.conf дописываем
Listen 8080
<VirtualHost ххх.ххх.ххх.ххх:8080>
DocumentRoot /usr/local/www/noaccess
<Directory /usr/local/www/noaccess>
DirectoryIndex index.html
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>


где ххх.ххх.ххх.ххх - Внешний IP адрес Личного кабинета
в директории /usr/local/www/ создаем папку noaccess в ней файл index.html в файле index.html пишем что-то вроде этого

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<META HTTP-EQUIV="Refresh" CONTENT="60; URL=http://ВашЛичныйкабинет.ru/">
<title>ВашЛичныйкабинет.ru | недостаточно средств</title>
</head>
<body bgcolor="#f5f5f5">
<table align="center">
<rt><td height="500">
<table width=900 align="center">
<tr>
<td>
<h3 align="center">ООО "Интернет Провайдер"</h3>
<h2 style="color:red" align="center">Доступ заблокирован</h2>

<p align="center">Уважаемый абонент, на Вашем лицевом счете недостаточно средств, для включения доступа к сети Интернет.<br>

Для уточнения суммы задолженности Вы можете зайти в Личный кабинет по адресу: <a href="http://ВашЛичныйкабинет.ru/">ВашЛичныйкабинет.ru</a>.<br></p>

<p align="center"><font size="-1">Эта страница автоматически переадресуется на Личный кабинет через 60 секунд.</font></p>

</td>
</tr>
</table>
<table align="right">
<td>
</td>
<td>
</td>
<td>
<p align="left"><b>Техподдержка:</b><br>
Телефоны: 8088888888888<br>
e-mail: 1@1.ru</p>
</td>
</tr>
</table>
</td></rt>
</table>
</body>
</html>


9) Создаем скрипт который будет рвать сессии абонентов пополнивших свой баланс, так как я у себя настроили чтоб абоненты не уходили в минус скрипты я брал из этой темы(авторам скриптов огромное спасибо!) и переделал их под свои нужды выглядит он примерно так


#!/bin/sh
MYUSER="root"
MYPASS="pass"
MYHOST="127.0.0.1"
UTM5DB="UTM5"
dat=`date +%Y%m%d,%H:%M:%S`
day=`date -j +%H%M`
log="/netup/utm5/log/on.log"

RES_AID=`echo "SELECT users.basic_account AS aid FROM users INNER JOIN accounts ON (users.basic_account = accounts.id) \
INNER JOIN account_tariff_link ON (accounts.id = account_tariff_link.account_id) \
INNER JOIN tariffs_services_link ON (account_tariff_link.next_tariff_id = tariffs_services_link.tariff_id) \
LEFT OUTER JOIN periodic_services_data ON (tariffs_services_link.service_id = periodic_services_data.id) \
WHERE users.is_deleted = 0 AND accounts.is_deleted = 0 AND \
account_tariff_link.is_deleted = 0 AND tariffs_services_link.is_deleted = 0 AND \
periodic_services_data.is_deleted = 0 AND periodic_services_data.discount_method = 1 AND \
periodic_services_data.cost > 0 AND accounts.balance >= periodic_services_data.cost AND \
accounts.unlimited < 1 AND \
accounts.is_blocked = 256 ORDER BY aid" | \
mysql -h $MYHOST -u $MYUSER -p$MYPASS -D $UTM5DB`

if [ $day -ge 2300 ]; then
echo "$dat not now!!!" >> $log
elif [ $day -le 0059 ]; then
echo "$dat not now!!!" >> $log
else
for i in $RES_AID;
do
echo "$dat Unlockin accounts - $i" >> $log
ourfa_client -S rsa_cert -a edit_account -account_id $i -is_blocked 0 -int_status 1
sleep 1
c=`echo "SELECT users.login AS user \
FROM users \
WHERE users.basic_account = $i ORDER BY user" | \
mysql -h $MYHOST -u $MYUSER -p$MYPASS -D $UTM5DB`
for a in $c
do
echo "login = $a" >> $log
echo "User-Name = $a" | /usr/local/bin/radclient -r 1 192.168.1.1:3799 40 pass

done
done
fi


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

###################
На идеальную версию не претендую!
Не говорю что это единственное правильное решение этого вопроса, но Нам оно полностью подходит, настроено так на боевых серверах, абонентов ~1500 работает все уже 3-5 месяцев полет нормальный.
может Кому-нибудь пригодится.... пусть и не вся инструкция, а какая-нибудь её часть :)
Сделал все согласно выше написанного, но увы заглушка не появляется у пользователей с отрицательным балансом.

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

Andrei12 писал(а): Сделал все согласно выше написанного, но увы заглушка не появляется у пользователей с отрицательным балансом.
в 2013 году эти костыли были актуальны более 1.5 лет прослужили мне без нареканий.... но после выхода utm 5.3 большая часть из них уже неактуальна.... но заглушка работала ещё долго, это в последнее время режим скорость в минимум, а не блокируем абонентов... что конкретно не получилось настроить ?

Ответить