Защита Asterisk при хаке на номер 8-800

Удобная затычка? Для тех кто не сильно любит дарить халяву.
Астериск всему голова.. Особенно когда правильно на строен. Теперь поговорим о защите…

Для начала поставим нужный нам софт
Ваше исполнение может быть любым и под ваши дальнейшие планы.

apt-get install php5-cli php5-sqlite

Скрипт
Сохраним его по адерсу: /usr/local/asterisk/bin/8800.php

 2, // Не более 2 звонков в минуту ( 60 секунд )
                3600 => 10 // Не более 10 звонков в час ( 3600 секунд )
);

if (!$argv[1] ) die("please use: '" . $argv[0] . " phone_number' nfor example: ".$argv[0]." 88001234567n");

// Открываем или создаем БД
$db = new SQLite3('/var/db/sqlite.db');
$db->exec('CREATE TABLE IF NOT EXISTS logs (phone bigint(12), datetime int(12))');

// Добавляем номер и дату звонка в базу
$phone = preg_replace('/[^0-9]/','', $argv[1]);
$db->exec("INSERT INTO logs (phone, datetime) VALUES ( '".$phone."','".time()."' )");

foreach( $rules as $secs => $limit ) {
    $res = $db->query( "SELECT count(*) as `c` FROM logs WHERE `phone` = '".$phone."' AND `datetime` >= " .( time() - $secs ) );
    $row = $res->fetchArray();
    // Если привышен лимит
    if ( $row['c'] > $limit ) {
        die('stop');   // возвращаем stop и выходим из скрипта
    }
}

// Очистка мусора
$max_period = max(array_keys($rules) );
$db->exec("DELETE FROM logs WHERE `datetime` < " .( time() - $max_period ));

// возвращаем continue
die('continue');

?>

Правим диалплан asterisk`а


exten => 8800XXXXXXX,1,Set(resp=${SHELL(php /usr/local/asterisk/bin/8800.php ${CALLERID(num)})});
exten => 8800XXXXXXX,2,Gosubif($[${resp}==stop]?${EXTEN},${MATH(${PRIORITY}+1),int}:${EXTEN},${MATH(${PRIORITY}+2),int});
exten => 8800XXXXXXX,3,HangUp();
exten => 8800XXXXXXX,4,Answer();

Всем удачи!