Четверг, 21.11.2024, 17:35
Приветствую Вас Бродяга о_О

IT - БЕЗОПАСНОСТЬ

Меню сайта
Категории раздела
Реквизиты
Webmoney:
R163607601465 - Wmr Рубли
Z166887043400 - Wmz Доллары
B403699433475 - Wmb Рубли(Белоруссия)
E155305398158 - Wme Евро
G382262489675 - Wmg Золото
Буду благодарен,за любую помощь!
Спасибо!
Главная » Статьи » Безопасность в интернете

Как защитить WEB сервер под управлением Windows 2003

Как защитить WEB сервер под управлением Windows 2003


Стояла задача защитить Web сервер под управлением windows 2003. Как всем известно сервер защищён тогда когда на нём закрыты все возможные порты. И стучать некуда и ломать нечего. Естественно сервер должен был иметь 80 порт открытым.

Схема была следующей. Сервер имел отдельный порт например 2754 на который приходили данные в виде ключа доступа сгенерированного по определённым правилам и команда для управления портами. По сути сервер и в рабочем режиме имел два открытых порта: 80 и 2754.

Для реализации данной схемы в настройках Apache, в файле httpd.conf было добавлено несколько опций.

# port listening
Listen 2754

#Vhost on 2754 port

DocumentRoot c:\www\portcontroller


Для любопытных в файле c:\www\portcontroller\.htaccess было добавлено:

Options -Indexes
order deny allow
Deny from all
Allow from 10.100.10.123

IP 10.100.10.123 это ip с которого приходили наши команды на открытие портов.

Далее Был написан скрипт c:\www\portcontroller\portctl.php

date_default_timezone_set("Europe/Kiev");
$fm = fopen("portcontroller.log","a");
$fdate = date("d-m-Y H:i:s");

if(empty($_GET['key'])){
fpots($fm,$fdate."ALARM!!!!Open Port without SpecialKey!!|\n");
exit();
} else {

$_date = date("Y:m:d");
$_date = md5($_date); // - Ключ по дате
$key_val = md5($_date."a1dc248dd2d814c73dw82f99d384f55"); // - усложнение ключа

if($key_val === $_GET['key']){

$response .= "Server PortController 0.0.1 |";
$response .= "Wellcome! |";
$command = base64_decode($_GET['command']);

if($command == "OpenPortPlease"){
fputs($fm,$fdate."Open ports |\n");
exec("netsh firewall add portopening TCP 413 ENABLE",$exec_output);
exec("netsh firewall set portopening protocol=ALL port=445 mode=ENABLE",$exec_output);
exec("netsh firewall add portopening TCP 3306 ENABLE",$exec_output);
exec("netsh firewall set portopening protocol=ALL port=3389 mode=ENABLE",$exec_output);
}

if($command == "ClosePortPlease"){
fputs($fm,$fdate."Close ports |\n");
exec("netsh firewall delete portopening TCP 413",$exec_output);
exec("netsh firewall set portopening protocol=ALL port=445 mode=DISABLE",$exec_output);
exec("netsh firewall delete portopening TCP 3306",$exec_output);
exec("netsh firewall set portopening protocol=ALL port=3389 mode=DISABLE",$exec_output);
}

if($command != "GetStatus") {
$limit = 21;
} else {
$limit = 13;
}


$response .= "|| Ports: ||";

exec("netsh firewall show state",$exec_output);
$x=0;
foreach($exec_output as $str){
$x++;
if($x > $limit) $response .= $str."|";

}

$response = base64_encode($response);
print $response;


} else {
exit();
fputs($fm,$fdate."Alarm!!! Open port with wring SpecialKey!|\n");
}
}


Ключ генерируется по дате конечно можно его генерировать как угодно, но было выбрано такое решение. Далее $command = base64_decode($_GET['command']); приходила команда с клиента запрашивающая открывать порты или закрывать. А вот закрытие портов или открытие происходило при помощи утилиты NETSH exec("netsh firewall add portopening TCP 333 ENABLE",$exec_output);
Не сложно догадаться как должен был выглядеть клиент для передаче нужных параметров серверу. Он генерировал ключ доступа по дате и секретной hash сумме для усложнения кода + base64encode команду для передачи её на сервер. При валидации всех ожидаемых данных сервер открывал порты для управления. Например по RDP или простой SMB. После окончания работы с сервером надо было не забывать закрывать порты.

Также средствами Windows фаервола было отключено ICMP. Для того чтобы если кто то захочет пропинговать ресурс не видел ответов. Тупая но подлянка.Далее на админку сайта было добавлен .htpassword авторизация:

В файл .htaccess

AuthType Basic  
AuthName "WhoAreYou?"
AuthUserFile  c:\www\****\admin\.htpasswd  
AuthName admin
require valid-user

и командочка

htpasswd -c .htpasswd admin

Вот мы и получили защищённый сервер. С открытым 80 портом и портом управления 2754. Защищённой админкой при помощи HtaccessAuth. Коли ваш сайт написан не дураком (не имеет дыр) то такой сервер будет долго служить.


Для того чтобы реализовать данную возможность на Linux сервере необходимо переделать команды NETSH на iptables в php скрипте
Категория: Безопасность в интернете | Добавил: T20 (18.11.2011)
Просмотров: 1322 | Комментарии: 1 | Теги: Как защитить WEB сервер под управле | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход\Регистрация


ЧАТ
Поиск
На сайте



Онлайн всего: 1
Гостей: 1
Пользователей: 0
Все данные,которые предоставляются на сайте, в том числе ПО для взлома различных ресурсов предоставлены в целях ознакомления,
и не являются призывом для совершения незаконных действий,которые могут повлечь за собой уголовную ответственность на территории РФ
и СНГ