- Автор темы
- #1
Инструкция по установке веб-сервера 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).
Скачать 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 (администратор):
В открывшееся окно скопируйте команды для установки и запуска 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>Тест</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 мы в файле настройки прописали:
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 был доступен для всех в локальной сети, но не доступен в глобальной сети, то есть два варианта.
- Первый :
- Также есть второй способ, более простой чем первый:
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
Если всё работает и проблем нет, то остановитесь именно на втором варианте.
Установка пароля на 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, ознакомились с основными принципами его работы. Также мы узнали что нужно сделать, чтобы сделать веб-сервер более безопасным для основной системы.