Инструкция по установке веб-сервера Apache c PHP, MariaDB и phpMyAdmin в Windows. Настройка безопасности локального веб-сервера

Оглавление

1. Веб-сервер на компьютере

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

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

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

5. Установка Apache 2.4 в Windows

6. Установка MariaDB в Windows

7. Установка PHP в Windows

8. Установка phpMyAdmin в Windows

9. Как обезопасить веб-сервер на Windows

10. Заключение


Если вас интересует установка Apache, PHP, MySQL и 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).

Скачать 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

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

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

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

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

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

Откройте в веб-браузере адрес http://localhost/.

Веб-сервер работает, но в папке с документами нет ни одного файла.

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

<!DOCTYPE HTML>
<html>
 <head>
  <meta charset="utf-8">
  <title>Мой первый файл на моём веб-сервере</title>
 </head>
 <body>

<p>Ура, веб сервер работает! Пришло время изучать HTML!</p>

</body>
</html>

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

Думаю, принцип работы понятен — в папке 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

Установка 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:

Установка 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 не полностью настроено, некоторые расширенные функции были отключены. Узнайте причину.
Или перейдите на вкладку 'Операции' любой базы данных, чтобы настроить хранилище в ней.

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

Там будет написано:

Конфигурация 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. Получится именно тот эффект, который нужен: веб сервер будет отвечать на запросы из локальной сети и будет игнорировать запросы из Интернета. Подробности о настройке статичного IP смотрите в статье «Как веб-сервер на своём компьютере сделать доступным для других».

  • Также есть второй способ, более простой чем первый:

В папке 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.

Вы можете отредактировать приведённую выше строку под ваши нужды, например, можно убрать диапазоны 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

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

Кстати, дополнительная информация про контроль, кто может иметь доступ к вашему сайту (локальному или на хостинге), вы найдёте в статье «Контроль доступа к сайту (блокировка по IP, User-Agent)».

Установка пароля на 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, ознакомились с основными принципами его работы. Также мы узнали что нужно сделать, чтобы сделать веб-сервер более безопасным для основной системы.

Если вы уже в полной мере освоились с вашим домашним веб-сервером и вам нужен хороший хостинг, то рекомендуют этот. Я с ним работаю с 2009 года, сайт HackWare.ru также размещён на нём.

Рекомендуется Вам:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

2 комментария to Инструкция по установке веб-сервера Apache c PHP, MariaDB и phpMyAdmin в Windows. Настройка безопасности локального веб-сервера

  1. Пётр:

    Здравствуйте, Алексей. Простите за оффтоп, пишу в самую свежую на данный момент Вашу статью.

    История такая… Решил я установить кали линукс на флешку по инструкции с вашего сайта, но сдуру делал все не на ВМ, а на своем реальном компе. Как итог - ничерта не работает, а к тому же виндовс чудом загрузившийся с одного из двух дисков не распознает второй HDD от слова совсем. В биосе диск тоже не видно. Спасите. Я вас очень прошу, времени мало. Напишите мне на емейл или прямо здесь, если не обидитесь за грязь в комментариях к другой теме .простите, пожалуйста, но очень нужна ваша помощь! Как быть теперь?

    • Alexey Alexey:

      Наверное, чтобы не писать офтоп лучше бы было написать на форум: https://kali.org.ru/

      Странно, что БИОС не видит диск - может диск просто умер от старости? Даже если предположить, что вы отформатировали его в ext4, а затем установили на него ОС, то БИОС должен видеть этот диск. Попробуйте пошевилить штекеры, подключить диск к другому проводу.

      Если компьютер увидит диск и если вы действительно установили на него ОС, то можно попытаться спасти некоторые файлв с помощью PhotoRec и TestDisk.

Добавить комментарий

Ваш e-mail не будет опубликован.