Инструкция по установке веб-сервера Apache для тестирования различных скриптов

Тема в разделе "Сайтостроение", создана пользователем redman, 14 ноя 2018.

  1. redman

    redman
    Expand Collapse
    Публикатор
    Команда форума

    Регистрация:
    13 ноя 2017
    Сообщения:
    2.551
    Симпатии:
    1.127
    Розыгрышей:
    10
    FT Coin:
    $374,10
    [​IMG]
    Инструкция по установке веб-сервера Apache c PHP, MariaDB и phpMyAdmin в Windows. Настройка безопасности локального веб-сервера для тестирования различных скриптов


    Веб-сервер на своём компьютере это очень удобный способ работы с веб-приложениями в любых целях:
    • тестирование новых CMS и других программ
    • написание и отладка PHP скриптов
    • организация своего собственного рабочего окружения (разные полезные программы запущенные на веб-сервере — органайзеры, агрегаторы)
    • организация ресурсов локальной сети (файловые обменники, чаты, потоковое видео и другие сервисы для всех устройств в квартире)
    • создание лаборатории (обучение тестированию на проникновение со специальными уязвимыми веб-приложениями)


    Из чего состоит веб-сервер


    В большинстве случаев сервер включает в себя четыре основные компонента:

    • Apache — это сам веб-сервер, который обрабатывает пришедшие от пользователей запросы и показывает страницы сайтов. Без дополнительных модулей Apache преимущественно предназначен для показа статичных страниц, в которых не происходит изменений на стороне сервера
    • PHP — это среда для работы PHP скриптов. PHP скрипты позволяют делать очень функциональные веб-сайты, динамичные веб-приложения, сохранять данные в базу данных и запрашивать данные оттуда
    • MariaDB — это система управления базами данных. Чтобы было проще понять — это и есть база данных, в которой хранится вся информация. До недавнего времени самой, пожалуй, популярной СУБД была MySQL. Что касается MariaDB, то она основана на MySQL, но с некоторыми доработками. Если для приложения в требованиях стоит MySQL, то MariaDB также подойдёт, так как они совместимы друг с другом
    • phpMyAdmin — это пример веб-приложения, которое работает на PHP. С помощью phpMyAdmin можно просматривать базы данных, создавать новые базы данных и таблицы, наполнять их и удалять, делать резервные копии баз данных и восстанавливать из бэкапов. phpMyAdmin очень популярно, поэтому многие считают его частью веб-сервера

    Установку сервера я покажу на примере Windows 10.

    Скачать веб-сервер под Windows

    Скачать Apache

    Чтобы скачать Apache для Windows перейдите на страницу: apachelounge.com/download/. Выберите Win64 или Win32 версию (первая — для 64-битных систем, а вторая для 32-битных). На этой же странице скачайте C++ Redistributable Visual Studio 2017: vc_redist_x64 или vc_redist_x86. Этот распространяемый C++ пакет Visual Studio 2017 содержит необходимые для работы веб-сервера библиотеки, поскольку Apache для Windows скомпилирован в Visual Studio 2017. Кстати, C++ Redistributable Visual Studio 2017 также нужен и для работы PHP интерпретатора и MariaDB.

    Установите скаченный vc_redist — к нему больше не будет возвращаться.

    Скачать PHP
    Чтобы скачать PHP для Windows перейдите на страницу windows.php.net/download/. Там выберите файл VC15 x64 Thread Safe или VC15 x86 Thread Safe — они различаются битностью. Причём нужно скачивать файл Zip (а не Debug Pack).

    [​IMG]
    Скачать MariaDB
    Для скачивания MariaDB под Windows перейдите на страницу downloads.mariadb.org. Там нажмите на зелёную кнопку последнего выпуска. На открывшейся странице найдите файл, имеющий вид mariadb-xx.x.xx-winx64.zip или mariadb-xx.x.xx-win32.zip — они также различаются битностью. При клике на файл, откроется другая страница, там просто найдите и нажмите кнопку с надписью «No thanks, just take me to the download».

    Скачать phpMyAdmin
    Скачайте phpMyAdmin со страницы phpmyadmin.net. Там найдите кнопку со словом Download.


    Установка веб-сервера в Windows

    Создадим структуру каталогов нашего сервера. Главная идея – разделить исполнимые файлы от файлов данных. Это удобно для обслуживания сервера, в том числе для резервного копирования.

    В корне диска C:\ создайте каталог Server. В этом каталоге создайте два подкаталога: bin (для исполнимых файлов) и data.

    Перейдите в каталог data и там создайте подпапки DB (для баз данных) и htdocs (для сайтов).


    Установка Apache 2.4 в Windows
    Из архива со скаченным веб-сервером httpd-x.x.xx-win64-VC15.zip распакуйте папку Apache24 в C:\Server\bin\.

    В папке C:\Server\bin\Apache24\conf\ откройте текстовым редактором файл httpd.conf. Это главный конфигурационный файл Apache — все настройки мы будем делать в нём. Строки, которые начинаются с # (решётки) — это комментарии и сервер не обращает на них внимание.

    Для установки правильной корневой папки сервера строку

    Define SRVROOT "c:/Apache24"

    замените на

    Define SRVROOT "c:/Server/bin/Apache24"

    Пролистываем до списка модулей — это список всех доступных расширений (плагинов) сервера. Те, которые закомментированы — отключены. Для их включения уберите знак # в начале строки.

    Для начала рекомендую включить только mod_rewrite, для этого строку

    #LoadModule rewrite_module modules/mod_rewrite.so

    замените на

    LoadModule rewrite_module modules/mod_rewrite.so

    Найдите строку

    #ServerName www.example.com:80

    и поменяйте на

    ServerName localhost

    Этой директивой устанавливается имя сервера, которое ни на что не влияет. Но если не прописать это имя, то будет выводиться предупреждение (что имени нет) — некоторых пользователей это путает, так как они принимают это сообщение за ошибку.

    Найдите идущие подряд строки

    DocumentRoot "${SRVROOT}/htdocs"

    <Directory "${SRVROOT}/htdocs">

    и замените их на

    DocumentRoot "c:/Server/data/htdocs/"

    <Directory "c:/Server/data/htdocs/">

    Если коротко, то DocumentRoot — это основная директория, в которой будет размещены файлы всех виртуальных хостов и сайтом. А Directory в данном случае устанавливает настройки основного хоста (при необходимости можно создать несколько виртуальных хостов с разными настройками).

    Чуть ниже найдите строки (комментарии приведены для ориентировки):

    # AllowOverride controls what directives may be placed in .htaccess files.

    # It can be "All", "None", or any combination of the keywords:

    # AllowOverride FileInfo AuthConfig Limit

    #

    AllowOverride None

    И замените на (меняется только последняя строка):

    # AllowOverride controls what directives may be placed in .htaccess files.

    # It can be "All", "None", or any combination of the keywords:

    # AllowOverride FileInfo AuthConfig Limit

    #

    AllowOverride All

    Этой настойкой мы включили поддержку файла .htaccess. Он нужен для работы mod_rewrite и других возможностей. С помощью файла .htaccess можно запрещать доступ к конкретной папке и менять некоторые настройки сервера на уровне папок.

    Найдите строку

    DirectoryIndex index.html

    и поменяйте на

    DirectoryIndex index.php index.html index.htm

    Последней настройкой мы добавили варианты индексных файлов. Индексный файл — этот тот файл, который показывается, когда запрос делается без указания файла. Например, если вы открываете адрес ya.ru, то не указываете, какой именно файл вы хотите увидеть. Поэтому сервер показывает вам индексный файл. Если указать конкретный файл, например, https://ya.ru/names.txt, то будет показан именно он (если он существует). В дополнении к имеющемуся индексному файлу index.html, мы добавили ещё два: index.php (обычно веб-приложения на PHP используют этот файл) и index.htm (тоже популярный вариант).

    Сохраните файл конфигурации.

    Теперь откройте командную строку Windows, для этого нажмите клавиши Win+x и выберите там Windows PowerShell (администратор):

    [​IMG]
    В открывшееся окно скопируйте команды для установки и запуска Apache (после введения каждой команды нажмите ENTER):

    c:\Server\bin\Apache24\bin\httpd.exe -k install

    c:\Server\bin\Apache24\bin\httpd.exe -k start
    [​IMG]
    Откройте в веб-браузере адрес http://localhost/.
    [​IMG]
    Веб-сервер работает, но в папке с документами нет ни одного файла.

    Добавьте в папку C:\Server\data\htdocs\ HTML файлы, например файл hello.htm со следующим содержимым:

    <!DOCTYPE HTML>

    <html>

    <head>

    <meta charset="utf-8">

    <title>Мой первый файл на моём веб-сервере</title>

    </head>

    <body>

    <p>Тест</p>

    </body>

    </html>

    Вновь откройте http://localhost/ и вы увидите ваш файл:

    [​IMG]
    Думаю, принцип работы понятен — в папке C:\Server\data\htdocs\ размещайте ваши HTML файлы и сайты. В C:\Server\data\htdocs\ вы можете делать подпапки любого уровня вложенности, они будут доступны по адресам вида http://localhost/подпапка.


    Установка MariaDB в Windows
    Далее мы настроим и запустим MariaDB. Начните с того, что содержимое архива mariadb-xx.x.x-winx64.zip распакуйте в папку C:\Server\bin\. Новую папку переименуйте в mariadb. Получится, что MariaDB размещена на диске в папке C:\Server\bin\mariadb\.

    Переместите папку C:\Server\bin\mariadb\data\ в папку C:\Server\data\DB\.

    В папке C:\Server\bin\mariadb\ создайте файл my.cnf и скопируйте в него:

    [mysqld]

    datadir="c:/Server/data/DB/data/"

    bind-address = 127.0.0.1

    Сохраните и закройте этот файл.

    Для установки и запуска службы выполните команды:

    C:\Server\bin\mariadb\bin\mysqld --install

    net start mysql
    [​IMG]

    Установка PHP в Windows
    Для установки и подключения PHP к Apache в Windows, в папке c:\Server\bin\ создайте подпапку PHP и скопируйте в неё содержимое архива php-x.x.xx-Win32-VC15-x64.zip.

    В каталоге C:\Server\bin\PHP\ найдите файл php.ini-development и переименуйте его в php.ini, затем откройте его текстовым редактором.

    В этом файле найдите строку

    ;extension_dir = "ext"

    и замените её на:

    extension_dir = "C:\Server\bin\PHP\ext\"

    Теперь найдите строки, которые начинаются на ;extension=:

    ;extension=bz2

    ;extension=curl

    ;extension=fileinfo

    ;extension=gd2

    ;extension=gettext

    ;extension=gmp

    ;extension=intl

    ;extension=imap

    ;extension=interbase

    ;extension=ldap

    ;extension=mbstring

    ;extension=exif ; Must be after mbstring as it depends on it

    ;extension=mysqli

    ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client

    ;extension=odbc

    ;extension=openssl

    ;extension=pdo_firebird

    ;extension=pdo_mysql

    ;extension=pdo_oci

    ;extension=pdo_odbc

    ;extension=pdo_pgsql

    ;extension=pdo_sqlite

    ;extension=pgsql

    ;extension=shmop

    Раскомментируйте нужные вам расширения. Рекомендую активировать расширения, которые почти наверняка понадобятся (просто замените предыдущие строки в конфигурационном файле на следующие):

    extension=bz2

    ;extension=curl

    extension=fileinfo

    extension=gd2

    extension=gettext

    extension=gmp

    ;extension=intl

    ;extension=imap

    ;extension=interbase

    ;extension=ldap

    extension=mbstring

    extension=exif ; Must be after mbstring as it depends on it

    extension=mysqli

    ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client

    extension=odbc

    extension=openssl

    ;extension=pdo_firebird

    extension=pdo_mysql

    ;extension=pdo_oci

    ;extension=pdo_odbc

    ;extension=pdo_pgsql

    extension=pdo_sqlite

    ;extension=pgsql

    ;extension=shmop

    Также раскомментируйте строки (кроме одной):

    ;extension=soap

    ;extension=sockets

    ;extension=sodium

    ;extension=sqlite3

    ;extension=tidy

    ;extension=xmlrpc

    ;extension=xsl

    Получится:

    extension=soap

    extension=sockets

    ;extension=sodium

    extension=sqlite3

    extension=tidy

    extension=xmlrpc

    extension=xsl

    Сохраните и закройте этот файл.

    Теперь нам нужно подключить PHP к Apache. Для этого в файле c:\Server\bin\Apache24\conf\httpd.conf в самый конец добавьте строчки:

    PHPIniDir "C:/Server/bin/PHP"

    AddHandler application/x-httpd-php .php

    LoadModule php7_module "C:/Server/bin/PHP/php7apache2_4.dll"

    Сохраните и закройте файл.

    После этого в командной строке перезапустите Apache:

    c:\Server\bin\Apache24\bin\httpd.exe -k restart

    Для проверки, что PHP работает в Windows, в каталоге c:\Server\data\htdocs\ создадим файл с названием i.php

    В этот файл скопируйте:

    <?php

    phpinfo ();

    В браузере откройте ссылку http://localhost/i.php. Если вы увидите похожую страницу, это значит, что PHP правильно настроен и успешно работает с Apache в Windows:

    [​IMG]

    Установка phpMyAdmin в Windows
    В каталог c:\Server\data\htdocs\ скопируйте содержимое архива phpMyAdmin-x.x.x-all-languages.zip. Переименуйте полученную папку в phpMyAdmin, получится, что phpMyAdmin у нас размещён в каталоге C:\Server\data\htdocs\phpMyAdmin\.

    В этой папке создайте текстовым редактором файл config.inc.php и скопируйте в этот файл:

    <?php

    /* Servers configuration */

    $i = 0;

    /* Server: localhost [1] */

    $i++;

    $cfg['Servers'][$i]['verbose'] = '';

    $cfg['Servers'][$i]['host'] = 'localhost';

    $cfg['Servers'][$i]['port'] = '';

    $cfg['Servers'][$i]['socket'] = '';

    $cfg['Servers'][$i]['connect_type'] = 'tcp';

    $cfg['Servers'][$i]['extension'] = 'mysqli';

    $cfg['Servers'][$i]['auth_type'] = 'cookie';

    $cfg['Servers'][$i]['user'] = 'root';

    $cfg['Servers'][$i]['password'] = '';

    $cfg['Servers'][$i]['nopassword'] = true;

    $cfg['Servers'][$i]['AllowNoPassword'] = true;

    /* End of servers configuration */

    $cfg['blowfish_secret'] = 'kjLGJ8g;Hj3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V';

    $cfg['DefaultLang'] = 'ru';

    $cfg['ServerDefault'] = 1;

    $cfg['UploadDir'] = '';

    $cfg['SaveDir'] = '';

    Сохраните и закройте этот файл.

    Для входа в phpMyAdmin перейдите по ссылке http://localhost/phpMyAdmin/, в качестве имени пользователя введите root, поле пароля оставьте пустым:

    Внизу показано сообщение:

    Хранилище конфигурации phpMyAdmin не полностью настроено, некоторые расширенные функции были отключены. Узнайте причину.

    Или перейдите на вкладку 'Операции' любой базы данных, чтобы настроить хранилище в ней.

    [​IMG]
    Чтобы узнать подробности, перейдите по ссылке http://localhost/phpMyAdmin/chk_rel.php:

    [​IMG]
    Там будет написано:

    Конфигурация pmadb… Не готово

    Основные возможности связей Недоступно

    Создать базу данных с именем 'phpmyadmin' и настроить там хранение конфигурации phpMyAdmin.

    Чтобы исправить проблему, достаточно создать требуемую базу данных, чтобы это сделать просто перейдите по ссылке http://localhost/phpMyAdmin/chk_rel.php?db=&goto=db_operations.php&create_pmadb=1


    Как обезопасить веб-сервер на Windows
    После запуска сервера не будет лишним позаботиться о его безопасности. Сетевая служба несёт повышенный риск, поскольку по своему определению (она же сетевая!) подразумевает, что к ней могут подключиться другие устройства и лица, в том числе злоумышленники. При определённых условиях, скомпрометирован может быть не только веб-сервер, но и весь компьютер целиком, на котором этот сервер запущен и даже другие устройства в локальной сети. Поскольку в Windows Apache работает с повышенными привилегиями, а права доступа на файлы не настроены должны образом, то веб-сервер с уязвимым скриптом может злоумышленнику предоставить доступ к любому файлу на компьютере.


    Запрет доступа из вне к MariaDB/MySQL
    Стандартный веб-сервер, в том числе тот, который мы только что установили, имеет две сетевые службы:
    • сам веб-сервер, который прослушивает 80 порт (при включении HTTPS, то ещё прослушивается и 443 порт)
    • сетевая служба системы управления базами данных, то есть MariaDB или MySQL, которая прослушивает порт 3306
    СУБД является сетевой службой, что удобно, поскольку можно подключиться к MariaDB/MySQL с другого компьютера и выполнить разнообразные действия с базами данных. Для локальных процессов это тоже нормально — они подключаются к сетевой службе используя виртуальный сетевой интерфейс Loopback (можно перевести как «возвратная петля»). Если не вдаваться в дебри, это такой способ подключиться к сетевой службе, которая работает на этом же компьютере. То есть мы как будто делаем запрос в сеть, а сетевая служба видит эти пакеты как будто бы они пришли из сети. То есть клиент сетевой службы и сама сетевая служба работают как надо, но трафик на самом деле с компьютера никуда не уходит.

    Так вот, для MariaDB мы в файле настройки прописали:

    bind-address = 127.0.0.1

    Это означает, что она прослушивает только IP адрес 127.0.0.1, который относится к Loopback. Это, в свою очередь, означает, что никто из вне (вне компьютера, на котором работает веб-сервер), не сможет подключиться к MariaDB/MySQL. При этом сайты и другие приложения будут работать с базами данных как ни в чём не бывало — они как раз и используют такие соединения к адресу 127.0.0.1.

    То есть MariaDB уже защищена.


    Запрет доступа из вне к Apache
    Что касается веб-сервера, то здесь настройка зависит от ваших нужд — для чего именно нужен сервер?

    Если вы используете сервер только для написания скриптов, тестирования сайтов и вам не нужно, чтобы к нему могли подключаться из вне, тогда в файле C:\Server\bin\Apache24\conf\httpd.conf найдите директиву Listen, по умолчанию её значение:

    Listen 80

    И замените его на

    Listen 127.0.0.1:80

    Чтобы изменения вступили в силу, перезапустите сервер:

    c:\Server\bin\Apache24\bin\httpd.exe -k restart

    После этого никакое устройство ни в глобальной, ни в локальной сети не сможет подключиться к вашему веб-серверу. Но вы как и раньше без проблем сможете открывать его содержимое в веб-браузере используя адрес http://localhost/

    Если вы хотите сделать так, чтобы сервер Apache был доступен для всех в локальной сети, но не доступен в глобальной сети, то есть два варианта.
    • Первый :
    Присвоить компьютеру с сервером статичный адрес, а затем прописать его с директивой Listen локальный_IP:80. Получится именно тот эффект, который нужен: веб сервер будет отвечать на запросы из локальной сети и будет игнорировать запросы из Интернета.
    • Также есть второй способ, более простой чем первый:
    В папке C:\Server\data\htdocs\ (это наша корневая папка веб-документов), создайте файл .htaccess, и в него впишите:

    Require ip 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.0/8 ::1/128

    Этой строкой мы разрешили для доступа к серверу устройствам с IP из всех локальных диапазонов, а также петлевым адресам, для всех остальных при попытке подключиться к серверу будет выводиться сообщение:

    Forbidden

    You don't have permission to access / on this server.
    [​IMG]
    Вы можете отредактировать приведённую выше строку под ваши нужды, например, можно убрать диапазоны 10.0.0.0/8 и 172.16.0.0/12, если они не используются в вашей локальной сети. IP адреса из 10.0.0.0/8 могут использоваться Интернет-провайдером для NAT, а 172.16.0.0/12 могут использоваться для локальных сетей на уровне города (такие есть/были у некоторых провайдеров). Следовательно, если вы оставите диапазоны 10.0.0.0/8 и 172.16.0.0/12, то при стечении ряда обстоятельств (кабель Интернет-провайдера напрямую подключён к компьютеру без роутера, а Интернет-провайдер использует диапазоны 10.0.0.0/8 и 172.16.0.0/12) пользователи этих локальных сетей смогут подключиться к вашему серверу при этих настройках.

    Поэтому также попробуйте

    Require ip 192.168.0.0/16 127.0.0.0/8 ::1/128

    Если всё работает и проблем нет, то остановитесь именно на втором варианте.


    Установка пароля на MariaDB/MySQL
    По умолчанию у пользователя root пустой пароль. Поскольку мы отключили доступ к серверу MariaDB/MySQL из вне, то это не так опасно. Тем не менее, остаётся угроза, что злоумышленник найдёт уязвимость в веб-приложении и сможет выполнить подключение через него. Поэтому при желании для дополнительного усиления сервера можно установить пароль для пользователя root в MariaDB/MySQL.

    Для этого откройте командную строку, в неё введите:

    cd C:\Server\bin\mariadb\bin\

    .\mysql -u root

    Внутри MySQL:

    FLUSH PRIVILEGES;

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';

    exit;

    Замените новый_пароль на ваш пароль.


    Заключение
    В этой инструкции мы научились устанавливать и настраивать веб-сервер на Windows, ознакомились с основными принципами его работы. Также мы узнали что нужно сделать, чтобы сделать веб-сервер более безопасным для основной системы.