SyNC
12-03-2007, 20:26
Задача - закрыть доступ к серверу (WS2003) с иностранных IP
Решение - закрыть доступ всем, потом внести список российских подсетей в список разрешенных. Список есть по адресу http://noc.masterhost.ru/allrunet/runet
Реализация:
Поскольку вбивать ручками все это нереально, был написан скрипт на PHP, который генерит скрипт на VBS для добваления IP в список рарешенных для IIS. Скрипт на PHP писался из-за незнания VBS.
Получилось:
<?php
echo "'Getting IP list... ";
$ip_array=file("http://noc.masterhost.ru/allrunet/runet");
echo "IP List Loaded.\r\n";
$ip_count=count($ip_array);
echo "'Subnets count: $ip_count\r\n";
echo "'Converting masks... ";
for ($i=0; $i<$ip_count; ++$i)
{
$ip_array[$i]=str_ireplace("/8\n",",255.0.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/9\n",",255.128.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/10\n",",255.192.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/11\n",",255.224.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/12\n",",255.240.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/13\n",",255.248.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/14\n",",255.252.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/15\n",",255.254.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/16\n",",255.255.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/17\n",",255.255.128.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/18\n",",255.255.192.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/19\n",",255.255.224.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/20\n",",255.255.240.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/21\n",",255.255.248.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/22\n",",255.255.252.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/23\n",",255.255.254.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/24\n",",255.255.255.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/25\n",",255.255.224.128",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/26\n",",255.255.255.192",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/27\n",",255.255.255.224",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/28\n",",255.255.255.240",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/29\n",",255.255.255.248",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/30\n",",255.255.255.252",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/31\n",",255.255.255.254",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/32\n",",255.255.255.255",$ip_array[$i]);
}
echo "Done.\r\n";
echo "'Writing IIS config script...\r\n";
?>
'------------------------------------------------------------
Dim IIsWebVirtualDirObj
Dim IIsIPSecurityObj
Set IIsWebVirtualDirObj = GetObject("IIS://localhost/W3SVC/793577/Root")
Set IIsIPSecurityObj = IIsWebVirtualDirObj.IPSecurity
IIsIPSecurityObj.GrantByDefault = false
<?php
$ip_count--;
echo "Dim IPList ($ip_count)\r\n";
$i=0;
foreach ($ip_array as $ip)
{
echo "IPList ($i) = \"$ip\"\r\n";
$i++;
}
?>
IIsIPSecurityObj.IPGrant = IPList
IIsWebVirtualDirObj.IPSecurity = IIsIPSecurityObj
IIsWebVirtualDirObj.SetInfo
WScript.Echo("Granted access from:")
for each IP in IIsIPSecurityObj.IPGrant
WScript.Echo(IP)
next
'------------------------------------------------------------
'Done!
Результатом работы является: http://sync.ministryofmp3.ru/ip2.txt
ПРОБЛЕМА:
Этот VBS скрипт не работает, выдает ошибку:
<...>\ip2.vbs(1741, 1) Microsoft VBScript runtime error: Invalid procedure call or argument
НО:
Если урезать список IP до, к примеру 25 штук ( http://sync.ministryofmp3.ru/ip.txt )
то все работает. Но мне надо полный список.
ВОПРОС:
Что делать и кто виноват?
Есть ли еще пути решения проблемы русских IP для IIS?
Решение - закрыть доступ всем, потом внести список российских подсетей в список разрешенных. Список есть по адресу http://noc.masterhost.ru/allrunet/runet
Реализация:
Поскольку вбивать ручками все это нереально, был написан скрипт на PHP, который генерит скрипт на VBS для добваления IP в список рарешенных для IIS. Скрипт на PHP писался из-за незнания VBS.
Получилось:
<?php
echo "'Getting IP list... ";
$ip_array=file("http://noc.masterhost.ru/allrunet/runet");
echo "IP List Loaded.\r\n";
$ip_count=count($ip_array);
echo "'Subnets count: $ip_count\r\n";
echo "'Converting masks... ";
for ($i=0; $i<$ip_count; ++$i)
{
$ip_array[$i]=str_ireplace("/8\n",",255.0.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/9\n",",255.128.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/10\n",",255.192.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/11\n",",255.224.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/12\n",",255.240.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/13\n",",255.248.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/14\n",",255.252.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/15\n",",255.254.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/16\n",",255.255.0.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/17\n",",255.255.128.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/18\n",",255.255.192.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/19\n",",255.255.224.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/20\n",",255.255.240.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/21\n",",255.255.248.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/22\n",",255.255.252.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/23\n",",255.255.254.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/24\n",",255.255.255.0",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/25\n",",255.255.224.128",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/26\n",",255.255.255.192",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/27\n",",255.255.255.224",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/28\n",",255.255.255.240",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/29\n",",255.255.255.248",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/30\n",",255.255.255.252",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/31\n",",255.255.255.254",$ip_array[$i]);
$ip_array[$i]=str_ireplace("/32\n",",255.255.255.255",$ip_array[$i]);
}
echo "Done.\r\n";
echo "'Writing IIS config script...\r\n";
?>
'------------------------------------------------------------
Dim IIsWebVirtualDirObj
Dim IIsIPSecurityObj
Set IIsWebVirtualDirObj = GetObject("IIS://localhost/W3SVC/793577/Root")
Set IIsIPSecurityObj = IIsWebVirtualDirObj.IPSecurity
IIsIPSecurityObj.GrantByDefault = false
<?php
$ip_count--;
echo "Dim IPList ($ip_count)\r\n";
$i=0;
foreach ($ip_array as $ip)
{
echo "IPList ($i) = \"$ip\"\r\n";
$i++;
}
?>
IIsIPSecurityObj.IPGrant = IPList
IIsWebVirtualDirObj.IPSecurity = IIsIPSecurityObj
IIsWebVirtualDirObj.SetInfo
WScript.Echo("Granted access from:")
for each IP in IIsIPSecurityObj.IPGrant
WScript.Echo(IP)
next
'------------------------------------------------------------
'Done!
Результатом работы является: http://sync.ministryofmp3.ru/ip2.txt
ПРОБЛЕМА:
Этот VBS скрипт не работает, выдает ошибку:
<...>\ip2.vbs(1741, 1) Microsoft VBScript runtime error: Invalid procedure call or argument
НО:
Если урезать список IP до, к примеру 25 штук ( http://sync.ministryofmp3.ru/ip.txt )
то все работает. Но мне надо полный список.
ВОПРОС:
Что делать и кто виноват?
Есть ли еще пути решения проблемы русских IP для IIS?