skew_death Posted February 3, 2017 Всем доброго времени суток, собственно нужно реализовать редирект при отрицательном балансе юзверей. В наличии самописный биллинг, 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. До этого был вариант пускать на ограниченной скорости, не помогает, пользователи упорно не видят что у них задолженность и звонят в техподдержку или также пользуются интернетом, думая что переустановка винды поможет решить их проблему с низкой скоростью. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Tau Posted February 3, 2017 Кто обращается по RADIUSу к биллингу? Микротик? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
FATHER_FBI Posted February 3, 2017 А почему не реализовать более стандартное решение, при отрицательном балансе, выдавать IP из другого диапазона, а дальше удобным для Вас методом (cisco/некрот/iptables), заруливать весь трафик с этих адресов на заглушку. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
gawric Posted February 3, 2017 (edited) А почему не реализовать более стандартное решение, при отрицательном балансе, выдавать IP из другого диапазона, а дальше удобным для Вас методом (cisco/некрот/iptables), заруливать весь трафик с этих адресов на заглушку. +1 так же сделал Freeradius (radusergroup)2 пула - allow|block radclient во время блокировки отправляет mikrotik (нужно сменить poll). Edited February 3, 2017 by gawric Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Saab95 Posted February 3, 2017 А почему не реализовать более стандартное решение, при отрицательном балансе, выдавать IP из другого диапазона, а дальше удобным для Вас методом (cisco/некрот/iptables), заруливать весь трафик с этих адресов на заглушку. Это не стандартное, а кривое решение. Если у абонента нет средств его IP должен попадать в особый список должников и по нему перенаправляется на ЛК. Как только абонент пополнил счет или взял обещанный платеж, у него тут же включается интернет. А не требуется переподключение. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
FATHER_FBI Posted February 4, 2017 Это не стандартное, а кривое решение. Если у абонента нет средств его IP должен попадать в особый список должников и по нему перенаправляется на ЛК. Как только абонент пополнил счет или взял обещанный платеж, у него тут же включается интернет. А не требуется переподключение. Какое переподключение? Если ТС выдает IP посредством DHCP, можно выдавать IP из группы должников на 1 минуту Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skew_death Posted February 6, 2017 (edited) Tau, циска. FATHER_FBI, У пользователей статические ip за натом(насколько я понимаю), часть пользователей по договору имеют белый выделенный ip. Saab95,По группам разделение уже есть, но вот что с этой группой делать, хотелось бы реализовать ваш вариант. Пример. Edited February 6, 2017 by skew_death Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Saab95 Posted February 6, 2017 У вас по группам внутри биллинга. Естественно биллинг должен только управлять оборудованием, а не работать софтроутером. Если IP адреса статические, то когда у абонента есть средства, то на оборудование никаких команд по нему приходить не должно, то есть не нужно делать схему, когда блокируется все, а доступ разрешен тем, кто есть в списке - доступ должен быть разрешен всем, а блокируются те, кто находится в адрес листе должников. Поэтому биллинг по событию перехода баланса в минус, должен отправлять команды на помещение IP адреса в список должников, при этом, если используется радиус, можно помещать абонента сразу в нужный адрес лист, если он вновь подключается и т.п. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skew_death Posted February 6, 2017 Saab95, не подскажете как это все реализовать, в общих чертах то все понятно, но дальше все плохо... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Saab95 Posted February 6, 2017 Допустим на сервере доступа ничего нет и он авторизует абонентов по статическим IP. Для работы абоненту нужно ограничить скорость - биллинг отправляет команду по SSH на микротик с данными по ограничению скорости, это IP адрес и максимальная входящая и исходящая скорости. Все, после этого абонент может работать. Никакие другие правила не нужны. Разрешено все что не запрещено. Теперь абонента надо заблокировать при отсутствии оплаты - на биллинг отправляется команда по SSH, где IP адрес этого абонента помещается в адрес-лист микротика, в котором содержатся должники. На сервере доступа создается правило, что для всех абонентов из адрес-листа должники, доступ на все сети, кроме IP адреса биллинга и странички заглушки запрещены. Следовательно абонент не может работать в интернете. Так же создается второе правило, которое перенаправляет все запросы абонентов на 80 порт на веб прокси микротика, который уже перенаправляет их на web страничку блокировки, на этой страничке показана информация для абонента и есть ссылка на личный кабинет биллинга. Сразу на биллинг перенаправлять не стоит, что бы не загружать его зря. Тут может появиться вопрос, что если используется оплата через интернет, абонент не может ее совершить, потому что доступ заблокирован. Вместо того, что бы добавлять платежные системы в список разрешенных, можно создать правило, что если IP из списка должников передает данные на IP веб странички и биллинга, то разрешить ему доступ в интернет на 5-10 минут, после чего заблокировать на час или большее время, что бы любители халявы не пользовались этой лазейкой. Реализовать такое можно через несколько адрес листов, в которые и из которых адреса перепрыгивают по таймауту. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skew_death Posted February 7, 2017 Saab95, спасибо, буду курить мануалы, а вот нарезать скорость через микротик нужды нету, они уже нарезаны на циске и если пользователь в группе блокированные то ему и так снижается скорость. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skew_death Posted February 8, 2017 Saab95, в ходе гугления выяснилось, что просто так из мускуль не получится выгрузить данные и отправить на микротик, или упираемся в актуальность, или будет огромная нагрузка на БД. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Saab95 Posted February 8, 2017 А какая там может быть не актуальность? Если абонент подключен у него же никакие параметры не меняются. Вот и отправляйте только новых и удаленных. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skew_death Posted February 9, 2017 Saab95, я имел в виду делать выгрузку БД->файл-> микротик, чтобы в меньшей мере нагружать БД ну или делать напряму, тогда можете поделиться мануалом по отправке данных из mysql(centos) на микротик? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Saab95 Posted February 12, 2017 В файл-то зачем? Вообще просто так выгружать тоже смысла нет, обычно все происходит по неким событиям, например надо изменить скорость, надо отправить блокировку и т.п. В эти моменты и надо обращаться к БС. Тогда обновления пойдут только по событиям и просматривать все данные БС не требуется, а это экономия ресурсов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skew_death Posted February 13, 2017 Saab95, В конце месяца запускается php файл на кроне, который списывает абонентку, блокирует если не хватает средств на счету, так понимаю что нужно использовать вместе с ним, но как данные из блокированных в этот момент отправить на микротик в адрес лист? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Saab95 Posted February 13, 2017 Через SSH или Telnet. /ip firewall address-list add address=10.10.10.10 list=balance_negative Только подставляете нужный IP абонента, так же можно добавить в комментарии номер договора, что бы было удобнее искать в списке абонентов. Но если абоненты будут оплачивать, их из списка нужно удалять. А это тоже из биллинга нужно как-то вытаскивать и удалять записи. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
skew_death Posted February 13, 2017 Saab95, немного не так выразился, нужно соорудить хотя бы на первое время костыль(БД->файл), через крон раз в 10 минут забираются IP адреса должников, при оплате, собственно убираем из списка, абонентов больше >400 человек, вручную бессмысленно :) Блокировка, тарифы и все остальное на биллинге, микротик в роли шлюза, циска по радиусу сверяет данные, если все окей то пускает в гугл, собственно еще идея, а если сделать чтобы сам радиус закидывал IP в список микротика? Т.к. он как раз ловит IP при авторизации, и далее выдавать только разрешение на допуск к заглушке? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Saab95 Posted February 13, 2017 В радиусе можно передавать параметр address-list, там можно указать название, куда помещать. Но самое лучшее это заливать IP в вашем же скрипте, тем более из него можно и сразу команды на микротик отправить. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
axisBeam Posted June 21, 2018 Добрый день! Появилась идея перевести 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 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
paradox_ Posted June 21, 2018 в лог радиус сервера смотрите, ну и дебага добавьте в него Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
GrandPr1de Posted June 21, 2018 (edited) чую я что там просто фильтр на username который обрезает много чего и плюс в том числе Edited June 21, 2018 by GrandPr1de Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
axisBeam Posted June 22, 2018 (edited) On 21.06.2018 at 12:59 PM, GrandPr1de said: чую я что там просто фильтр на username который обрезает много чего и плюс в том числе Да вот пока не могу найти где. Edited June 22, 2018 by alexmasz Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
polmax Posted June 22, 2018 48 минут назад, alexmasz сказал: Да вот пока не могу найти где. policy.conf? Что-то вида: deny_realms { if (User-Name =~ /@|\\/) { reject } } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
GrandPr1de Posted June 22, 2018 (edited) 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 June 22, 2018 by GrandPr1de Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...