Вот мой скрипт, может пригодится.
С параметром init грузит все списки с нуля. При запуске в биллинге через правила файрвала (Изменение типа блокировки) "php /netup/utm5/bin/block_change.php ACCOUNT_ID" загружает статику для адресов пользователя.
Изначально перебрал все возможные варианты загрузки, но остановился на http - не нужны доп. либы, любая платформа, минимум настроек на циске. Да и еще быстрее по какой то причине в два раза любого другого способа (за исключением конечно tftp, но он имеет боьше минусов чем плюсов в этой ситуации).
Код: Выделить всё
<?php
@ini_set("display_errors", "1");
error_reporting(E_ALL);
$db_host='127.0.0.1:3306';
$db_base='UTM5';
$db_user='********';
$db_password='**********';
$CISCO_IP = '10.0.0.100';
$CISCO_LOGIN = '**************';
$CISCO_PASSW = '*******************';
$log_file = "/netup/utm5/log/block_change.log";
$log_file_stat = "/netup/utm5/log/block_change_stat.log";
// Список наименований списков доступа. В биллинге Настройки-Список IP-зон тоже самое, зоны называются cisco3550-fa02,cisco3550-fa17,cisco3550-fa18 и т.п.
$ACL_array = array ('cisco3550-fa02','cisco3550-fa17','cisco3550-fa18','cisco3550-fa19','cisco3550-fa20','cisco3550-fa21','cisco3550-fa22',
'cisco3550-fa23','cisco3550-fa24','cisco3550-fa25','cisco3550-fa26','cisco3550-fa27','cisco3550-fa28','cisco3550-fa33','cisco3550-fa34');
// Служебные разрешения для каждого списка доступа
$ACE_array = array ("http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/ip/any/host/10.0.0.1/CR", // Для Личного кабинета
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/tcp/any/host/10.0.0.9/eq/www/CR", // Основной сайт
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/tcp/any/host/195.22.104.13/eq/443/CR", // Для Личного кабинета
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/ip/any/host/10.0.0.105/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/tcp/any/host/10.0.0.9/eq/4000/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/tcp/any/host/10.0.0.9/eq/5222/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/tcp/any/host/10.0.0.9/eq/6667/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/icmp/any/host/10.0.0.9/echo-reply/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/icmp/any/host/10.0.0.25/echo-reply/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/icmp/any/host/10.0.0.51/echo-reply/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/ip/host/10.0.0.7/any/CR", // Netbook
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/ip/host/10.0.0.8/any/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/udp/any/any/eq/bootpc/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/udp/any/any/eq/bootps/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/deny/41/any/any/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/deny/58/any/any/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/no/deny/48/any/any/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/*ACL_NAME*/-/permit/tcp/any/host/81.90.0.138/eq/6667/CR");
// Специфические уникальные разрешения
$ACE_array_spec = array("http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/cisco3550-fa23/-/permit/ip/host/10.0.0.188/any/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/cisco3550-fa23/-/permit/ip/host/10.0.0.10/any/CR",
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/cisco3550-fa23/-/permit/ip/host/10.0.3.252/any/CR", //*************
"http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/cisco3550-fa23/-/exit");
if (!isset($_SERVER["argv"]["1"])) {
print "Отсутствуют аргументы\r\n";
exit;
}
$base_query = "Select INET_NTOA(ip_groups.ip & 4294967295) AS ip_norm, ip_groups.mac, accounts.is_blocked, ip_zones.name ";
$base_query = $base_query."From users Inner Join service_links ON users.id = service_links.user_id Inner Join accounts ON service_links.account_id = accounts.id ";
$base_query = $base_query."Inner Join iptraffic_service_links ON service_links.id = iptraffic_service_links.id Inner Join ip_groups ON iptraffic_service_links.ip_group_id = ip_groups.ip_group_id ";
$base_query = $base_query."Inner Join houses ON users.house_id = houses.id Inner Join ip_zones ON houses.ip_zone_id = ip_zones.id ";
$base_query = $base_query."WHERE users.is_deleted = '0' AND accounts.is_deleted = '0' AND ip_groups.is_deleted='0' AND iptraffic_service_links.is_deleted='0' AND service_links.is_deleted='0' ";
$file_handle = fopen($log_file,"a+");
if ($_SERVER["argv"]["1"]=='init') {
fwrite($file_handle, date("d.m.Y H:i:s").' Start cisco ACL init *********************************************************'."\r\n");
print "Start cisco ACL init *********************************************************\r\n";
foreach ($ACL_array as $ACL_Name) {
foreach ($ACE_array as $ACE_Name) {
$ACE_Name_tmp = str_replace('*ACL_NAME*',$ACL_Name,$ACE_Name);
fwrite($file_handle, date("d.m.Y H:i:s ").$ACE_Name_tmp."\r\n");
copy($ACE_Name_tmp,'/dev/null');
print ".";
}
$cisco_url_exit = "http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/$ACL_Name/-/exit";
fwrite($file_handle, date("d.m.Y H:i:s ").$cisco_url_exit."\r\n");
copy($cisco_url_exit,'/dev/null');
}
foreach ($ACE_array_spec as $ACE_spec_Name) {
$ACE_Name_tmp = $ACE_spec_Name;
fwrite($file_handle, date("d.m.Y H:i:s ").$ACE_Name_tmp."\r\n");
copy($ACE_Name_tmp,'/dev/null');
print ".";
}
print "\r\nHeader cisco ACL init complete ************************************\r\n";
$db_connect=mysql_connect($db_host,$db_user,$db_password) or die ("Connect failed");
mysql_select_db($db_base,$db_connect);
$query = $base_query."ORDER BY ip_zones.name";
$mysql_result=mysql_query($query);
$row_count = mysql_num_rows($mysql_result);
$on = 0;
$off = 0;
$all = 0;
$ACLNameOld = '***';
while ($row=mysql_fetch_array($mysql_result)) {
$all = $all + 1;
print ".";
$ACLName = $row['name'];
if ($ACLName=='cisco3550-service') continue;
if (strpos($row['ip_norm'],'172.18.')!==false) continue;
if ($row['is_blocked']!=0) {
$off = $off +1;
$cisco_url_conf = "http://".$CISCO_LOGIN.":".$CISCO_PASSW."@".$CISCO_IP."/level/15/ipenacl/$ACLName/-/no/permit/ip/host/".$row['ip_norm']."/any/CR";
$cisco_url_exit = "http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/$ACLName/-/exit";
} else {
$on = $on + 1;
$cisco_url_conf = "http://".$CISCO_LOGIN.":".$CISCO_PASSW."@".$CISCO_IP."/level/15/ipenacl/$ACLName/-/permit/ip/host/".$row['ip_norm']."/any/CR";
$cisco_url_exit = "http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/$ACLName/-/exit";
}
if (isset($_SERVER["argv"]["2"]) and ($_SERVER["argv"]["2"]=='clear')) {
$cisco_url_conf = "http://".$CISCO_LOGIN.":".$CISCO_PASSW."@".$CISCO_IP."/level/15/ipenacl/$ACLName/-/no/permit/ip/host/".$row['ip_norm']."/any/CR";
$cisco_url_exit = "http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/$ACLName/-/exit";
}
if ($ACLNameOld!=$ACLName and $ACLNameOld!='***') {
$cisco_url_exit = "http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/$ACLNameOld/-/exit";
copy($cisco_url_exit,'/dev/null');
print "\r\ncisco ACL $ACLNameOld complete\r\n";
}
$ACLNameOld = $ACLName;
fwrite($file_handle, date("d.m.Y H:i:s ").$cisco_url_conf."\r\n");
copy($cisco_url_conf,'/dev/null');
}
print "\r\ncisco ACL $ACLNameOld complete\r\n";
copy($cisco_url_exit,'/dev/null');
fwrite($file_handle, date("d.m.Y H:i:s ").$cisco_url_exit."\r\n");
fwrite($file_handle, date("d.m.Y H:i:s").' Stop cisco ACL init *********************************************************'."\r\n");
print "\r\nStop cisco ACL init *********************************************************\r\n";
print "Всего: ".$all."\r\n";
print "Запрещено: ".$off."\r\n";
print "Разрешено: ".$on."\r\n";
$file_handle_stat = fopen($log_file_stat,"a+");
fwrite($file_handle_stat, date("d.m.Y H:i:s ")."Всего: ".$all."\r\n");
fwrite($file_handle_stat, date("d.m.Y H:i:s ")."Запрещено: ".$off."\r\n");
fwrite($file_handle_stat, date("d.m.Y H:i:s ")."Разрешено: ".$on."\r\n");
fclose($file_handle_stat);
} else {
$accounts_id = $_SERVER["argv"]["1"];
$db_connect=mysql_connect($db_host,$db_user,$db_password) or die ("Connect failed");
mysql_select_db($db_base,$db_connect);
$query = $base_query."AND accounts.id='$accounts_id'";
$mysql_result=mysql_query($query);
$row_count = mysql_num_rows($mysql_result);
while ($row=mysql_fetch_array($mysql_result)) {
$ACLName = $row['name'];
if ($ACLName=='cisco3550-service') continue;
if (strpos($row['ip_norm'],'172.18.')!==false) continue;
if ($row['is_blocked']!=0) {
$cisco_url_conf = "http://".$CISCO_LOGIN.":".$CISCO_PASSW."@".$CISCO_IP."/level/15/ipenacl/$ACLName/-/no/permit/ip/host/".$row['ip_norm']."/any/CR";
$cisco_url_exit = "http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/$ACLName/-/exit";
} else {
$cisco_url_conf = "http://".$CISCO_LOGIN.":".$CISCO_PASSW."@".$CISCO_IP."/level/15/ipenacl/$ACLName/-/permit/ip/host/".$row['ip_norm']."/any/CR";
$cisco_url_exit = "http://$CISCO_LOGIN:$CISCO_PASSW@$CISCO_IP/level/15/ipenacl/$ACLName/-/exit";
}
fwrite($file_handle, date("d.m.Y H:i:s ").$cisco_url_conf."\r\n");
copy($cisco_url_conf,'/dev/null');
}
copy($cisco_url_exit,'/dev/null');
fwrite($file_handle, date("d.m.Y H:i:s ").$cisco_url_exit."\r\n");
}
fclose($file_handle);
?>