Перенаправление должников в кабинет пользователя

Нам потребуется чистый Ubilling установленный при помощи UBinstaller с работающим fwd (options IPFIREWALL_FORWARD). Для FreeBSD 9.x все должно работать из коробки. Для FreeBSD 8.x возможно потребуется пересборка ядра вручную.

Для начала допустим, что вы настолько ленивы, что даже не потрудились поднять свой собственный DNS сервер и используете пресеты Ubilling-а «как есть». Также понадеемся, что в сторону пользователей заглядывает интерфейс em0 с назначенным адресом 172.16.0.1. Возможно вы даже не потрудились поподнимать внятных виртуалхостов для типовых сервисов, которые предоставляет Ubilling.
Ничего - сегодня будем считать, что это система для ленивых :)

Засим рисуем в конце /etc/firewall.conf следующую радость:

#Debtors forwarding
${FwCMD} add 4 allow ip from table\(2\) to 8.8.8.8 dst-port 53 via em0
${FwCMD} add 4 allow ip from 8.8.8.8 to table\(2\) src-port 53 via em0
${FwCMD} add 4 allow ip from table\(2\) to me dst-port 80 via em0
${FwCMD} add 4 allow ip from me to table\(2\) src-port 80 via em0
${FwCMD} add 6 fwd 127.0.0.1,80 ip from table\(47\) to not me dst-port 80
${FwCMD} delete 65534

Где 8.8.8.8 как не сложно догадаться - адрес DNS сервера который вы раздаете своим пользователям.

А в /usr/local/www/apache22/data/index.php что-то типа такого:

index.php
<?php
    function rcms_redirect($url, $header = false) {
        if($header){
            @header('Location: ' . $url);
        } else {
            echo '<script language="javascript">document.location.href="' . $url . '";</script>';
        }
    }
 
 
    $userip=$_SERVER['REMOTE_ADDR'];
 
    if (strpos($userip,'172.32.')===false)  {
        rcms_redirect("http://172.16.0.1/billing/userstats/");
    } else {
        rcms_redirect("http://172.32.0.1/uhw/");
    }
?>

Чтобы редирект работал для URL отличных от »/» можем добавить в файлик /usr/local/www/apache22/data/.htaccess такой вот обработчик 404:

    ErrorDocument 404 /index.php

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

В любом случае в этом вам должен помочь, вот такой вот скриптик /etc/stargazer/debtors.php в автозагрузке:

debtors.php
#!/usr/local/bin/php
<?php
 
$config=parse_ini_file(dirname(__FILE__)."/config");
$link = mysql_connect($config['host'], $config['username'], $config['password']);
mysql_select_db($config['database']);
$data_q='SELECT `ip` FROM `users` WHERE `Cash`< -`Credit`';
$data=mysql_query($data_q);
           while ($row = mysql_fetch_array($data, MYSQL_ASSOC)) {
                shell_exec("/sbin/ipfw -q table 47 add ".$row['ip']);
           }
 
?>

(начиная с Ubilling 0.4.4 он уже лежит где нужно)

debtredir.txt · Последние изменения: 2015/07/03 22:03 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki