Перенаправлення боржників у кабінет користувача

Для початку припустимо, що ви настільки ліниві, що навіть не потрудилися підняти свій власний 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.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/apache24/data/.htaccess такий ось обробник 404:

    ErrorDocument 404 /index.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 він уже лежить де потрібно)