Блокировка неплательщиков на роутере

Ответить
core
Сообщения: 32
Зарегистрирован: Пт июн 29, 2007 9:14 am

Блокировка неплательщиков на роутере

Сообщение core »

У нас в ядре сети стоит маршрутизатор который роутит мои локальные сети. Была задача - запретить юзерам пользоваться сеткой если у них баланс меньше -10 или аккаунт заблокирован.

Для этого на сервере биллинга по крону раз в 5 минут запускаем следующий php-скрипт:

Код: Выделить всё

<?
ini_set("error_reporting", E_ERROR ^ E_WARNING);

#nastroiki mysql
@ $db = @mysql_pconnect ("localhost", "login", "pass");
mysql_select_db("abills");

#file dlya vyvoda pravil iptables
@$outputfile = fopen ("/didan/fire/list/rules_billing", "w");
fwrite ($outputfile, "#billing.didan IPT configuration v 2.1 \n");
fwrite ($outputfile, "#zulu_gluk (C) core.didan@gmail.com \n");
fclose ($outputfile);

global $accepted, $denied;

#gde lejit iptables
$ipt = "/sbin/iptables";


$sql1 = "select uid, credit, disable from users";
$query1 = mysql_query($sql1);
@$outputfile = fopen ("/didan/fire/list/rules_billing", "a");

while ($users = mysql_fetch_array($query1)) {


        $check=0;

        $sql2 = "select cid, disable from dv_main where uid='$uid'";
        $sql3 = "select pasport_grant from users_pi where uid='$uid'";
        $sql4 = "select deposit from bills where uid ='$uid'";
        $query2 = mysql_query($sql2);
        $query3 = mysql_query($sql3);
        $query4 = mysql_query($sql4);

#Proverim balans i kredit usera. esli balans+credit<-10 to ne puskat' v set'
        $uid = $users[uid];
        $bills = mysql_fetch_array($query4);
        $dv_main = mysql_fetch_array($query2);
        $credit = $users[credit];
        $deposit = $bills[deposit];

        if (($deposit+$credit)>-10) {

#Proverim ne otklyuchen li user
            $disable = $users[disable];
            if ($disable == 0) {

#Proverim pravilnost' MAC adresa. na kajdom ip mojet byt' neskolko MAC (PC i notebook u odnogo usera)
#MACi berem iz polya pasport_grant )
                $mac_array = mysql_fetch_array($query3);
                $mac = explode (";", $mac_array[pasport_grant]);
                $ip_array = explode (".", $dv_main[cid]);

                $i = 0;
                while ($mac[$i]) {

                $mac_array = explode (":", $mac[$i]);
                 if ($mac[$i]!=="00:00:00:00:00:00") {
                  if ($mac_array[0]) {
                   if ($mac_array[1]) {
                    if ($mac_array[2]) {
                     if ($mac_array[3]) {
                      if ($mac_array[4]) {
                       if ($mac_array[5]) {

#Proveryaem pravilnyi format ip. U nas vse vnutrennie ip v sety 172.17.0.0/16
#IP hranim v pole CID

                          if ($ip_array[0]=="172") {
                           if ( $ip_array[1]=="17") {
                            if ($ip_array[2]<255) {
                             if ($ip_array[3]<255) {
                                $good_mac=trim($mac[$i]);
                                $vlan=$ip_array[2];
#Pishem v file pravilo dlya razresheniya paketov s adresa
                                
                                fwrite ($outputfile, $ipt." -A FORWARD -s ".$dv_main[cid]." -m mac --mac-source ".$good_mac." -i vlan0".$vlan." -j ACCEPT"."\n");
                                $accepted=$accepted+1;
                                $check=1;
                            }
                           }
                          }
                         }


                }}}}}}}
                $i = $i + 1;
                }}}
    if ($check==0){
        $denied=$denied+1;
    }
}
fclose ($outputfile);
mysql_close();

echo "Accepted ".$accepted."\n";
echo "Denied ".$denied."\n";

?>

Скрипт формирует файл с правилами для iptables

На роутере каждые 5 минут скачиваем с биллинга этот файлик смотрим не изменился ли он, если изменился - запускаем.

Ответить