Jump to content
Калькуляторы

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. До этого был вариант пускать на ограниченной скорости, не помогает, пользователи упорно не видят что у них задолженность и звонят в техподдержку или также пользуются интернетом, думая что переустановка винды поможет решить их проблему с низкой скоростью.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

Edited by gawric

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Tau, циска.

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

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

Пример.

 

17c1283cd05079c868aaac4447d02055.jpg

 

Edited by skew_death

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Через SSH или Telnet.

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Добрый день!

 

Появилась идея перевести 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

 

 

Share this post


Link to post
Share on other sites

On 21.06.2018 at 12:59 PM, GrandPr1de said:

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

 

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

Edited by alexmasz

Share this post


Link to post
Share on other sites

48 минут назад, alexmasz сказал:

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

policy.conf?

 

Что-то вида:


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

Share this post


Link to post
Share on other sites

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 в руки и вперед

Edited by GrandPr1de

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.