Перейти к содержимому
Калькуляторы

radius+биллинг Как редиректить на страницу при отрицательном балансе?

Всем доброго времени суток, собственно нужно реализовать редирект при отрицательном балансе юзверей. В наличии самописный биллинг, freeradius, и циска 7200 которая разрешает доступ в интернет, на выходе всего этого микротик, в бд хранятся значения депозита, нужно чтобы при проверке баланса заплативших юзверей выпускало в интернет,а тех кто не заплатил, заворачивало на страницу редиректа, что кто подскажет? в iptables в данный момент только это.

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
TCPMSS     tcp  --  anywhere             anywhere             tcpflags: SYN,RST/SYN tcpmss match 1400:65495 TCPMSS clamp to PMTU

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination  

P.S. У пользователей статический ip, формата 10.0.0.0.

Запрос freeradius к БД, на данный момент не выпускающий при отрицательном балансе

authorize_check_query = "SELECT uid,user,'User-Password' as Attribute,passwd,'==' as op FROM ${authcheck_table} \
           WHERE user = '%{SQL-User-Name}' AND blocked='0' AND active='1' AND macblock='0' AND gid not in (1,5) AND (deposit+credit) > -1 ORDER BY uid"

Где blocked = блокированный пользователь или нет, active = активирован, gid = группа для блокированных и отключенных пользователей.

P.P.S. До этого был вариант пускать на ограниченной скорости, не помогает, пользователи упорно не видят что у них задолженность и звонят в техподдержку или также пользуются интернетом, думая что переустановка винды поможет решить их проблему с низкой скоростью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кто обращается по RADIUSу к биллингу? Микротик?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему не реализовать более стандартное решение, при отрицательном балансе, выдавать IP из другого диапазона, а дальше удобным для Вас методом (cisco/некрот/iptables), заруливать весь трафик с этих адресов на заглушку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему не реализовать более стандартное решение, при отрицательном балансе, выдавать IP из другого диапазона, а дальше удобным для Вас методом (cisco/некрот/iptables), заруливать весь трафик с этих адресов на заглушку.

+1 так же сделал

Freeradius (radusergroup)2 пула - allow|block

radclient во время блокировки отправляет mikrotik (нужно сменить poll).

Изменено пользователем gawric

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему не реализовать более стандартное решение, при отрицательном балансе, выдавать IP из другого диапазона, а дальше удобным для Вас методом (cisco/некрот/iptables), заруливать весь трафик с этих адресов на заглушку.

 

Это не стандартное, а кривое решение. Если у абонента нет средств его IP должен попадать в особый список должников и по нему перенаправляется на ЛК. Как только абонент пополнил счет или взял обещанный платеж, у него тут же включается интернет. А не требуется переподключение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это не стандартное, а кривое решение. Если у абонента нет средств его IP должен попадать в особый список должников и по нему перенаправляется на ЛК. Как только абонент пополнил счет или взял обещанный платеж, у него тут же включается интернет. А не требуется переподключение.

Какое переподключение? Если ТС выдает IP посредством DHCP, можно выдавать IP из группы должников на 1 минуту

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Tau, циска.

FATHER_FBI, У пользователей статические ip за натом(насколько я понимаю), часть пользователей по договору имеют белый выделенный ip.

Saab95,По группам разделение уже есть, но вот что с этой группой делать, хотелось бы реализовать ваш вариант.

Пример.

 

17c1283cd05079c868aaac4447d02055.jpg

 

Изменено пользователем skew_death

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У вас по группам внутри биллинга. Естественно биллинг должен только управлять оборудованием, а не работать софтроутером.

Если IP адреса статические, то когда у абонента есть средства, то на оборудование никаких команд по нему приходить не должно, то есть не нужно делать схему, когда блокируется все, а доступ разрешен тем, кто есть в списке - доступ должен быть разрешен всем, а блокируются те, кто находится в адрес листе должников. Поэтому биллинг по событию перехода баланса в минус, должен отправлять команды на помещение IP адреса в список должников, при этом, если используется радиус, можно помещать абонента сразу в нужный адрес лист, если он вновь подключается и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Saab95, не подскажете как это все реализовать, в общих чертах то все понятно, но дальше все плохо...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Допустим на сервере доступа ничего нет и он авторизует абонентов по статическим IP.

 

Для работы абоненту нужно ограничить скорость - биллинг отправляет команду по SSH на микротик с данными по ограничению скорости, это IP адрес и максимальная входящая и исходящая скорости. Все, после этого абонент может работать. Никакие другие правила не нужны. Разрешено все что не запрещено.

 

Теперь абонента надо заблокировать при отсутствии оплаты - на биллинг отправляется команда по SSH, где IP адрес этого абонента помещается в адрес-лист микротика, в котором содержатся должники.

 

На сервере доступа создается правило, что для всех абонентов из адрес-листа должники, доступ на все сети, кроме IP адреса биллинга и странички заглушки запрещены. Следовательно абонент не может работать в интернете.

Так же создается второе правило, которое перенаправляет все запросы абонентов на 80 порт на веб прокси микротика, который уже перенаправляет их на web страничку блокировки, на этой страничке показана информация для абонента и есть ссылка на личный кабинет биллинга. Сразу на биллинг перенаправлять не стоит, что бы не загружать его зря.

 

Тут может появиться вопрос, что если используется оплата через интернет, абонент не может ее совершить, потому что доступ заблокирован. Вместо того, что бы добавлять платежные системы в список разрешенных, можно создать правило, что если IP из списка должников передает данные на IP веб странички и биллинга, то разрешить ему доступ в интернет на 5-10 минут, после чего заблокировать на час или большее время, что бы любители халявы не пользовались этой лазейкой. Реализовать такое можно через несколько адрес листов, в которые и из которых адреса перепрыгивают по таймауту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Saab95, спасибо, буду курить мануалы, а вот нарезать скорость через микротик нужды нету, они уже нарезаны на циске и если пользователь в группе блокированные то ему и так снижается скорость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Saab95, в ходе гугления выяснилось, что просто так из мускуль не получится выгрузить данные и отправить на микротик, или упираемся в актуальность, или будет огромная нагрузка на БД.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А какая там может быть не актуальность? Если абонент подключен у него же никакие параметры не меняются. Вот и отправляйте только новых и удаленных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Saab95, я имел в виду делать выгрузку БД->файл-> микротик, чтобы в меньшей мере нагружать БД ну или делать напряму, тогда можете поделиться мануалом по отправке данных из mysql(centos) на микротик?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В файл-то зачем? Вообще просто так выгружать тоже смысла нет, обычно все происходит по неким событиям, например надо изменить скорость, надо отправить блокировку и т.п. В эти моменты и надо обращаться к БС. Тогда обновления пойдут только по событиям и просматривать все данные БС не требуется, а это экономия ресурсов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Saab95, В конце месяца запускается php файл на кроне, который списывает абонентку, блокирует если не хватает средств на счету, так понимаю что нужно использовать вместе с ним, но как данные из блокированных в этот момент отправить на микротик в адрес лист?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Через SSH или Telnet.

 

/ip firewall address-list add address=10.10.10.10 list=balance_negative

 

Только подставляете нужный IP абонента, так же можно добавить в комментарии номер договора, что бы было удобнее искать в списке абонентов.

 

Но если абоненты будут оплачивать, их из списка нужно удалять. А это тоже из биллинга нужно как-то вытаскивать и удалять записи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Saab95, немного не так выразился, нужно соорудить хотя бы на первое время костыль(БД->файл), через крон раз в 10 минут забираются IP адреса должников, при оплате, собственно убираем из списка, абонентов больше >400 человек, вручную бессмысленно :)

Блокировка, тарифы и все остальное на биллинге, микротик в роли шлюза, циска по радиусу сверяет данные, если все окей то пускает в гугл, собственно еще идея, а если сделать чтобы сам радиус закидывал IP в список микротика? Т.к. он как раз ловит IP при авторизации, и далее выдавать только разрешение на допуск к заглушке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В радиусе можно передавать параметр address-list, там можно указать название, куда помещать.

Но самое лучшее это заливать IP в вашем же скрипте, тем более из него можно и сразу команды на микротик отправить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день!

 

Появилась идея перевести freeradius с файлов на sql, но вылезла проблема, если в username есть "+" - получаю Access-Reject.

Кто что подсказать может? Спасибо!

 

 

radtest "241-28 eth 0/17:3401" password 127.0.1.1 0 secret

Sending Access-Request of id 25 to 127.0.1.1 port 1812
    User-Name = "241-28 eth 0/17:3401"
    User-Password = "password"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 0
    Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.1.1 port 1812, id=25, length=20

 


radtest "Vlan3265+Ethernet1/12" password 127.0.1.1 0 secret

Sending Access-Request of id 78 to 127.0.1.1 port 1812
    User-Name = "Vlan3265+Ethernet1/12"
    User-Password = "password"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 0
    Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.1.1 port 1812, id=78, length=20

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в лог радиус сервера смотрите, ну и дебага добавьте в него

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

чую я что там просто фильтр на username который обрезает много чего и плюс в том числе

Изменено пользователем GrandPr1de

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
On 21.06.2018 at 12:59 PM, GrandPr1de said:

чую я что там просто фильтр на username который обрезает много чего и плюс в том числе

 

Да вот пока не могу найти где.

Изменено пользователем alexmasz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
48 минут назад, alexmasz сказал:

Да вот пока не могу найти где.

policy.conf?

 

Что-то вида:


        deny_realms {
                if (User-Name =~ /@|\\/) {
                        reject
                }
        }
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, alexmasz сказал:

Да вот пока не могу найти где.

 

радиус в sql бд ходит?

ищите где назначаются переменные, который потом в квери пихаются

например:

 

 
	authorize_check_query = "SELECT (@cnt := @cnt + 1) AS `id`, `UserName`, `Attribute`, `Value`, `op` \
          FROM `${authcheck_table}` \
          CROSS JOIN (SELECT @cnt := 0) AS `dummy` \
          WHERE `UserName` = '%{SQL-User-Name}' \
          ORDER BY `id`"

 

	#sql_user_name = "%{%{Stripped-User-Name}:-%{%{User-Name}:-DEFAULT}}"
	#
	sql_user_name = "%{User-Name}"

 

 

Ну и про полиси выше уже сказали. А вообще

radiusd -X в руки и вперед

Изменено пользователем GrandPr1de

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

Войти

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

Войти сейчас