Как найти файл apache

Где действительно находится файл конфигурации Apache 2

Статей о том, как найти конфиг Апача, в интернете масса. Но в них в основном даётся информация о том, где находится основной файл конфигурации Apache 2 на сервере автора статьи. Иногда это может быть даже Апач не второй, а первый. Так как в основном все копируют друг у друга контент. Для того, чтобы точно найти конфиг Apache, не нужно пытаться его искать по тому пути, что советуют. Нужно посмотреть его в настройках конкретного сервера. Именно о том, как найти его у себя на сервере и будет показано ниже в этой статье на примере моего текущего рабочего сервера, работающего с Debian 9. Но, я не думаю, что операционная система как-то затруднит поиск этого конфига. Разве что на сервере под Windows… Но тут я пока просто разведу руками. =)

Продолжение следует

Начать следует с того, чтобы прочитать предыдущую статью о том, с чего следует начать изучение Apache у себя на сервере. В ней дан обзор команды apachectl, которая напрямую связана с работой и управлением установленного на сервере Апача.

Параметр -V команды apachectl

Теперь собственно о теме этой статьи. Для того, чтобы найти конфиг Apache у себя на сервере, нужно запустить команду apachectl -V. Так как это кажется наиболее походящим вариантом из предлагаемых подсказкой по ней. «show compile settings» — значится в описании этой опции. Попробуем 😉

[email protected]:~# apachectl -V
Server version: Apache/2.4.25 (Debian)
Server built:   2018-11-03T18:46:19
Server's Module Magic Number: 20120211:68
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

Как найти конфиг Апача у себя на сервере?

Вот собственно мы и получили ответ на этот вопрос, если внимательно вчитаемся в полученный результат:

-D SERVER_CONFIG_FILE="apache2.conf"

Последняя строка указывает на то, что конфигурационный файл Apache имеет название apache2.conf. Осталось разобраться, в какой директории его найти. АГА! Вот главная директория Апача:

-D HTTPD_ROOT="/etc/apache2"

Осталось всё собрать воедино и гордо сообщить: «У меня на сервере конфигурационный файл Apache находится точно в этом месте: /etc/apache2/apache2.conf»

А у вас? 😉

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Выберите, то, чем пользуетесь чаще всего:

See http://wiki.apache.org/httpd/DistrosDefaultLayout for discussion of where you might find Apache httpd configuration files on various platforms, since this can vary from release to release and platform to platform. The most common answer, however, is either /etc/apache/conf or /etc/httpd/conf

Generically, you can determine the answer by running the command:

httpd -V

(That’s a capital V). Or, on systems where httpd is renamed, perhaps apache2ctl -V

This will return various details about how httpd is built and configured, including the default location of the main configuration file.

One of the lines of output should look like:

-D SERVER_CONFIG_FILE=”conf/httpd.conf”

which, combined with the line:

-D HTTPD_ROOT=”/etc/httpd”

will give you a full path to the default location of the configuration file

Apache logo

Apache uses configuration files to change its behavior. It usually stores them at /etc/apache2/ on Unix systems, but the configuration directory can vary, depending on how it was installed and which operating system you’re running it on.

The Usual Places

The primary way of configuring Apache is by modifying the main configuration file, usually located at:

/etc/apache2/apache2.conf

This file can also be named httpd.conf on older installs. If it’s not there, it’s likely in one of the following places:

  • /etc/httpd/httpd.conf
  • /etc/httpd/conf/httpd.conf
  • /usr/local/apache2/apache2.conf—if you’ve compiled from source, Apache is installed to /usr/local/ or /opt/, rather than /etc/.

If you’ve installed Apache on Windows, you likely installed it to your C:Program Files directory,  under “Apache Software Foundation”:

C:Program FilesApache Software FoundationApache2.4

If you’re using Apache on macOS (for local development), the config folder is at the regular /etc/apache2/ location, if you’re using the stock version of Apache that comes with macOS. If you’ve installed an up-to-date version from brew, it instead is at:

/usr/local/etc/httpd/httpd.conf

Regardless of the operating system or the details of your install, within this root configuration folder you’ll find a few files and directories:

  • apache2.conf or httpd.conf are the primary configuration files.
  • ports.conf define on what ports Apache should listen.
  • conf.d/ is used to store configuration snippets you can include in the primary config.
  • sites-available/ is a directory containing a unique config file for each website your web server hosts. You can host multiple sites from the same IP; Apache splits them by domain name and uses separate config files for each. It’s common practice to name these files according to your domain name, e.g. sites-available/example.com. A default site already exists that you can copy.
  • sites-enabled/ determines which sites are actually in use. It’s a special folder containing symlinks to the actual configuration files in sites-available. With this, you can turn sites on and off easily with the a2ensite command.

Configuration with .htaccess Files

You can also configure Apache without even touching the root configuration. If the feature is enabled, Apache attempts to read a file named .htaccess from your site’s document root (the place where you put your HTML and other site content).

It’s particularly useful for shared hosting. Most of the time, if you get cheap website hosting from a service like GoDaddy or SquareSpace, you’re not renting a whole web server just for your site. Your site is bundled with many other smaller sites and ran off one big server, which cuts down on hosting costs significantly. The problem with this setup is that you don’t want people to be able to modify the configuration for other people’s sites running on the same server, so you can’t just give access to the primary config folder.

.htaccess files solve this issue by changing the behavior of Apache based on the folder from which the content is being served. Doing so has a bit of a performance overhead, so it’s not recommended for use unless you’re forced to by a shared hosting provider.

In this case, the location of your config folder is simple—create a new file simply named:

.htaccess

And place it in your document root alongside your index.html or index.php pages. The .htaccess file will override the root config for the whole directory, and also apply it to any subdirectories.

You can have multiple .htaccess files in separate directories; for example, if you have a part of your website hosted in the /admin/ folder, you could place an additional .htaccess in that folder and add basic HTTP auth to secure it.

How to Find The Configuration Folder Manually

On most distros, you can usually use the whereis command to locate programs and their associated files:

whereis apache2

It outputs the location of the Apache binary, as well as the Apache configuration folder and all related directories:

apache2: /usr/sbin/apache2 /etc/apache2 /usr/lib/apache2 /usr/share/apache2 /usr/share/man/man8/apache2.8.gz

If you don’t have this command or it isn’t working, then use find to search your whole drive for directories named “apache2“:

sudo find / -type d -name "apache2"

You can also try searching for “httpd“, as Apache may be installed under that name. If both of those commands don’t list anything, you likely don’t have Apache installed in the first place.

READ NEXT

  • › How to Save Your Voicemails on Your iPhone
  • › Razer’s New Speakers Are the Perfect Addition to Your PC
  • › AirPods Pro Controls, Features, and Gestures Explained
  • › How to Spot a WhatsApp Scam
  • › ChatGPT Now Has an Official iPhone App
  • › Your iPhone, iPad, Mac, & Apple Watch Get Updates Today

Главный конфигурационный файл Apache называется httpd.conf и расположен в папке файлов Apache в подпапке conf.

Если Apache уже запущен, то узнать путь до конфигурационного файла можно так.

Откройте Диспетчер задач и там найдите процесс Apache HTTP Server. Нажмите на него правой кнопкой и в контекстном меню выберите пункт Открыть расположение файла:

В открывшемся файловом менеджере поднимитесь на одну папку вверх:

Затем перейдите в подпапку conf и там вы увидите файл httpd.conf:

Если процесс не запущен, то воспользуйтесь средствами Doble Commander или других программ для поиска по имени файла httpd.conf.

В главном конфигурационном файле httpd.conf с помощью директивы Include можно указать много файлов с конфигурациями, например:

Include conf/extra/httpd-mpm.conf
nclude conf/extra/httpd-multilang-errordoc.conf
Include conf/extra/httpd-autoindex.conf

Вы можете проверить, какие конфигурационные файлы загружаются командой:

c:ServerbinApache24binhttpd.exe -t -D DUMP_INCLUDES

Обратите внимание, что путь до httpd.exe может быть другим.

Следующая команда покажет все виртуальные хосты и пути до конфигурационных файлов каждого из них:

c:ServerbinApache24binhttpd.exe -t -D DUMP_VHOSTS

Связанные статьи:

  • Как запустить два экземпляра Apache (100%)
  • Как проверить конфигурационный файл Apache (100%)
  • Настройка веб-сервера Apache для запуска программ Perl на Windows (100%)
  • Настройка веб-сервера Apache для запуска программ Ruby на Windows (100%)
  • Виртуальный хост Apache по умолчанию. _default_ и catch-all в Apache (100%)
  • Документация по Apache на русском языке (RANDOM – 65.5%)

Введение

Apache — кроссплатформенный HTTP-сервер, который был создан с учетом ошибок старого web-сервера NCSA HTTPd. На данный момент стабильная версия имеет номер 2.4.48. Основные достоинства Apache: кроссплатформенность и модульная система, позволяющая оптимизировать программное обеспечения для нужд конкретной разработки.

В этой статье рассмотрим установку HTTP-сервера Apache на операционную систему (ОС) Ubuntu. В рамках этой публикации используется релиз Ubuntu 20.04 server. И web-сервер Apache версии 2. Развернута система в «Облачной платформе» Selectel. Для тестового сервера используется минимальная конфигурация мощностей: 1 процессор, 1 ГБ оперативной памяти. Для запуска простого ненагруженного web-приложения этого достаточно.

Настроить виртуальный сервер

Для этой инструкции используется виртуальная среда Selectel. Панель управления расположена по адресу: https://my.selectel.ru/.

В разделе «Облачная платформа» во вкладке «Серверы» создадим новый сервер.

Используем минимальную конфигурацию:

В настройках надо выбрать образ операционной системы для установки.

Оставим себе root-пароль и создадим сервер. После этого в панели управления появится ip-адрес сервера.

Теперь можем подключиться к нему по SSH. 

Самым простым способом подключения является использование утилиты PuTTY. Эта утилита является кроссплатформенной. Скачать ее можно с официального сайта https://putty.org.ru/.

Для подключения в поле Host Name (or IP address) вводим полученный ранее ip-адрес, остальные опции оставляем без изменений. 

После нажатия кнопки Open эмулятор терминала произведет подключение к серверу. Потребуется ввести комбинацию логин/пароль. На первоначальном этапе используем логин root и пароль, полученные на этапе создания сервера.

login as: vlan48
vlan48@xx.xx.xx.18's password: Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-77-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage 31 updates login as: vlan48
vlan48@xx.xx.xx.18's password:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-77-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

31 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

*** System restart required ***
Last login: Tue Aug  3 09:51:36 2021 from xx.xx.xx.230
vlan48@apachi:~$

Установить Apache

При установке и конфигурации будет использован пользователь, отличный от root, но с правами администратора. Для большинства операций применяется повышение привилегий через sudo. Первоначально необходимо загрузить информацию об актуальных списках пакетов и зависимостях.

    sudo apt update

После этой операции произведем установку пакета Apache2, он располагается в стандартном репозитории, дополнительные добавлять не нужно.

    sudo apt install apache2 

По окончании демон запускается автоматически, а также попадает в автозагрузку.

Настроить брандмауэр для Apache

По умолчанию в Ubuntu используется ufw. Uncomplicated Firewall — утилита для настройки межсетевого экрана. Если настройка происходит на виртуальном сервере, желательно проверить наличие установленной утилиты.

    sudo ufw status verbose

В случае отсутствия ее в списке установленных пакетов появится ошибка:

sudo: ufw: command not found

Тогда ее необходимо установить:

    sudo apt install ufw

Заново запросим ее статус:

Status: inactive 

Это означает, что она деактивирована. Активируем:

    sudo ufw enable

Разрешаем HTTP на сервере:

    sudo ufw allow http

Очень важно в этом моменте разрешить SSH-доступ. На тестовом сервере SSH на стандартном порту.

    sudo ufw allow 22/tcp

Обязательно перезапустить процесс:

    sudo ufw reload

Проверить базовую настройку Apache

На данный момент сервер доступен из интернета по HTTP. Можно проверить это в браузере по ip-адресу в поисковой строке. Ip-адрес мы уже получили в панели управления сервером.

Появившееся приветствие означает успешную начальную настройку Apache-сервера.

Как запустить Apache и другие полезные команды

В этом разделе будут собраны базовые команды для управления Apache web-сервером. Несмотря на то, что демон запускается самостоятельно, иногда необходимо выключить его или перечитать конфигурацию.

Проверить статуса демона Apache:

    sudo systemctl status apache2

В выводе будет указан текущий статус. Возможны два варианта.

Активен:

apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-07-15 09:49:55 UTC; 2 weeks 5 days ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 535575 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
   Main PID: 718 (apache2)
      Tasks: 55 (limit: 1105)
     Memory: 12.9M
     CGroup: /system.slice/apache2.service
             ├─   718 /usr/sbin/apache2 -k start
             ├─535580 /usr/sbin/apache2 -k start
             └─535581 /usr/sbin/apache2 -k start

Неактивен:

apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Tue 2021-08-03 10:01:39 UTC; 2s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 535575 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
    Process: 544224 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
   Main PID: 718 (code=exited, status=0/SUCCESS)

Иногда возникает ошибка.

apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2021-08-03 10:07:39 UTC; 5s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 544394 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

Aug 03 10:07:39 apachi systemd[1]: Starting The Apache HTTP Server...
Aug 03 10:07:39 apachi apachectl[544401]: AH00526: Syntax error on line 134 of /etc/apache2/apache2.conf:

Чтобы выйти в консоль из статуса, необходимо использовать комбинацию клавиш Ctrl+С.

Для деактивации:

    sudo systemctl stop apache2

Для активации:

    sudo systemctl start apache2

Перезапуск:

    sudo systemctl restart apache2

При изменении конфигурации Apache возможно ее перечитать без разрыва текущей сессии с хостов:

    sudo systemctl reload apache2

Чтобы деактивировать запуск web-сервера при загрузке:

    sudo systemctl disable apache2

Активировать в загрузку:

    sudo systemctl enable apache2

Настроить виртуальные хосты Apache

Можно использовать веб-сервер Apache для поддержки одного web-приложения. Но достаточно часто приходится на одном сервере создавать и обслуживать несколько web-ресурсов.

В Apache для этих целей используется модуль виртуальных хостов. Он позволяет развернуть несколько web-приложений на одном сервере с использованием одного ip-адреса, но разных доменных имен. Про теорию доменных имен есть хорошие статьи и книги, например, Крикет Ли, Пол Альбитц “DNS и BIND”. Об управлении доменами и ресурсными записями написали в базе знаний Selectel.

Перейдем к настройке виртуального хоста.

В Ubuntu конфигурации виртуальных хостов расположены в директории /etc/apache2/sites-available.  Нам необходимо получить директорию для виртуального хоста по умолчанию. Получим root-директорию из файла дефолтной конфигурации:

    grep "DocumentRoot" /etc/apache2/sites-available/000-default.conf

Вывод:

DocumentRoot /var/www/html

Создадим новые необходимые директории, не меняя корневой.

    sudo mkdir -p /var/www/sample.net/html

В стандартном исполнении Apache ищет документ index.htm или index.html

Создадим простой html5-документ: 

    sudo touch /var/www/sample.net/html/index.html

Добавим небольшую структуру документа, открыв его в текстовом редакторе:

    sudo nano /var/www/sample.net/html/index.html

Вставляем в файл.

<!DOCTYPE html>
<html>
 <head>
   <title>Hello</title>
   <meta charset="utf-8">
 </head>
 <body>
         <h1>Hello Selectel!</h1>
  </body>
</html>

Чтобы оставить дефолтную конфигурацию виртуального хоста неизменной, копируем его в созданную ранее директорию настроек нового виртуального хоста.

    sudo cp /etc/apache2/sites-available/000-default.conf  /etc/apache2/sites-available/sample.net.conf

Теперь откроем скопированный файл, рассмотрим основные директивы и внесем необходимые правки. На данном этапе нам будет интересна только строка, в которой указан путь к директории виртуального хоста. Меняем его на путь к директории, созданной специально для него. Чтобы при обращении Аpache мог перенаправить запрос именно к созданному нами виртуальному хосту.

    sudo nano /etc/apache2/sites-available/sample.net.conf

Файл дефолтного виртуального хоста:

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

<VirtualHost *:80> — в этой строке указываем ip-адрес сервера, а также порт, используемый для этого виртуального хоста. На данный момент мы используем HTTP и один ip-адрес. В связи с этим номер порта 80, адрес не указываем. Настройка HTTPS будет описана ниже. 

ServerAdmin webmaster@localhost — строка связи с администратором, необходимо указать активный почтовый адрес отвечающего за обслуживание сервера специалиста. Опционально. Добавим адрес, по которому всегда придут на помощь support@selectel.ru.

DocumentRoot /var/www/html — root-директория или корневой каталог виртуального хоста. Обязательна к применению и настройке. В нашем случае это путь к созданной ранее директории с документом index.html. Вносим изменения:

     /var/www/sample.net/html

ErrorLog ${APACHE_LOG_DIR}/error.log — путь к файлу с логами сервера. Вносить какие-либо изменения нет необходимости. Здесь будут храниться ошибки запуска демона и ошибки, не относящиеся к клиентам.

CustomLog ${APACHE_LOG_DIR}/access.log combined — это директива для хранения логов клиентского доступа. 

Редактирование файла на этом завершается. Это минимальная конфигурация для запуска виртуального хоста на Apache web-сервере. Изменять конфигурацию далее на данном этапе нет необходимости.

Сохраняем и выходим из редактора. Для сохранения используется комбинация Ctrl+o, для выхода Ctrl+x.

Файл с готовой конфигурацией:

 <VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin support@selectel.ru
        DocumentRoot  /var/www/sample.net/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Для подключения виртуальных хостов, а также модулей в Apache HTTP-сервере используется набор команд:

a2enmod {модуль} — подключение модуля;

a2dismod {модуль} — отключение модуля;

a2ensite {конфиг виртуального хоста} — подключает виртуальный хост;

a2dissite {конфиг виртуального хоста} — отключает виртуальный хост.

Нам потребуется a2ensite для активации созданного хоста:

    sudo a2ensite sample.net.conf

И a2dissite для деактивации дефолтного:

    sudo a2dissite 000-default.conf

После внесенных изменений требуется перечитать конфигурацию сервера:

    sudo systemctl reload apache2 

Теперь мы можем обратиться с созданному виртуальному хосту по доменному имени.

В этой инструкции мы не используем dns, поэтому для разрешения имени используем файл hosts.

В windows этот файл расположен здесь: C:WindowsSystem32driversetchosts.

А в linux/mac: /etc/hosts.

Добавим строчку: 94.0.0.0 sample.net.

Где 94.0.0.0 — ранее полученный ip-адрес сервера, а sample.net — доменное имя виртуального хоста.

Теперь перейдем в браузер и в адресной строке наберем :sample.net.

Получим созданное web-приложение:

SSL для Apache

TLS (transport layer security — протокол защиты транспортного уровня) и предыдущая версия защиты SSL (secure sockets layer — слой защищенных сокетов). Это все протоколы криптографии, созданные для защиты передачи данных между узлами в информационной сети.

Оба протокола используют асимметричное шифрование для аутентификации, симметричное шифрование для конфиденциальности и коды аутентичности сообщений. Подробно останавливаться на теории сейчас нет необходимости. На первоначальном этапе достаточно быть в курсе, что эти протоколы отвечают за сохранность конфиденциальности данных в момент обмена данными между клиентом и сервером. Ключи могут быть самозаверяющими, т.е. созданными и подписанными самим web-сервером.

Такие ключи подходят для использования протокола HTTPS и шифрования данных, но не являются доверенными для сети интернет. Также сертификаты бывают выданными центрами сертификации. Они не только шифруют данные, но также web-браузер знает о таком ключе и доверяет ему по-умолчанию. В таком случае сертификаты платные, но имеется возможность использования бесплатного сервиса Let`s encrypt. С использованием сервиса можно создать и заверить ключ.

В этом случае сертификат будет действительным для сети интернет, но бесплатным. В этой инструкции будет настроено простое шифрование с использованием самозаверяющего ключа, созданного на сервере Apache.

Создать SSL-сертификат на сервере

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

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/server-sample.key -out /etc/ssl/certs/server-sample.crt

Расшифровка опций из команды:

req -x509 — опция определения стандарта сертификата (-x509 стандарт инфраструктуры открытого ключа).

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

-days 365 — срок действия сертификата. Обычно срок устанавливается более длительный, но для тестового сервера достаточно. Также необходимо учитывать, что на web-сервере время и дата должны быть верными.

-newkey rsa:2048 — опция указывает на создание нового сертификата и ключа единовременно. Часть rsa:2048 обозначает размер ключа.

-keyout /etc/ssl/private/server-sample.key — обозначает директорию, в которую необходимо поместить закрытый ключ.

-out /etc/ssl/certs/server-sample.crt- — директория местоположения сертификата.

server-sample.key и server-sample.crt — имена ключа и сертификата.

После ввода команды потребуется ответить на некоторые вопросы, разберем список директив:

Country Name (2 letter code) [AU]:RU — указываем страну

State or Province Name (full name) [Some-State]:LIP — область

Locality Name (eg, city) []:Lipetsk — город

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sel — организацию

Organizational Unit Name (eg, section) []:Sel — отдел

Common Name (e.g. server FQDN or YOUR name) []:94.255.255.255 — вводим доменное имя или белый адрес сервера

После выполнения операции требуется подключение модуля SSL для Apache HTTP-сервера. Ранее были разобраны команды для этого действия. Вот так выглядит необходимая:

    sudo a2enmod ssl

После включения модуля необходимо перезапустить демона Apache.
Переходим к настройке HTTPS для виртуального хоста. Вносим изменения в файл его настройки.

    sudo nano /etc/apache2/sites-available/sample.net.conf

Во-первых, меняем директиву <VirtualHost *:80>.

Порт изменится на 443 (порт для протокола HTTPS по умолчанию).

Добавляем директиву SSLEngine on после строки DocumentRoot для включения поддержки SSL на web-сервере.

После этого еще две строки, в которых указан путь к ключу и сертификату:

    SSLCertificateFile /etc/ssl/certs/server-sample.crt
SSLCertificateKeyFile /etc/ssl/private/server-sample.key

Теперь файл конфигурации виртуального хоста выглядит следующим образом:

<VirtualHost *:443>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.sample.net
        ServerAdmin support@selectel.ru
        DocumentRoot /var/www/sample.net/html
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/server-sample.crt
        SSLCertificateKeyFile /etc/ssl/private/server-sample.key
        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Перед проверкой по web добавим разрешающее правило безопасности:  

    sudo ufw allow https

А также перечитаем конфигурацию web-сервера Apache:

    sudo systemctl reload apache2

Теперь при запросе сервера по HTTPS:sample.net браузер выдаст оповещение о небезопасном сертификате. Проигнорировав его, будет отображено созданное ранее web-приложение.

На этом настройка SSL закончена.

Конфигурационные файлы и директории web-сервера Apache

Приведенные файлы и директории используются для настройки Apache-сервера. В данном документе уникальных настроек не приводится. Этот раздел создан для ознакомительных целей.

/etc/apache2 — директория конфигурационных файлов Apache.

/etc/apache2/apache2.conf — основной файл конфигурации сервера. Он отвечает за множество настроек сервера. Например, включить чтение файла .htaccess необходимо именно здесь.

/etc/apache2/envvars — файл значения переменных среды для Apache.

/etc/apache2/magic —  отображает инструкции для определения типа файла на сервере и клиенте. 

/etc/apache2/ports.conf —  настройка слушающих портов по умолчанию.

/etc/apache2/sites-available/ — директория конфигураций виртуальных хостов.

/etc/apache2/sites-enabled/ — здесь хранится информация об активных виртуальных хостах.

/etc/apache2/conf-available/ — директория настроек хостов, не относящихся к виртуальным.

/etc/apache2/conf-enabled/ — ссылки на включенные хосты, не относящиеся к виртуальным. 

/etc/apache2/mods-available/ и /etc/apache2/mods-enabled/ — директории модулей. Модули, а также их настройки расположены здесь.

/var/www — директория для хранения web-приложений. Обычно виртуальные хосты тоже хранят здесь. Может быть изменена.

/var/log/apache2 — директория файлов логирования, содержит в себе два файла, ранее в этой инструкции было описано какой из них за что отвечает.

Безопасность web-сервера Apache

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

В Linux-системах отличным решением является утилита Fail2ban. Принцип ее работы основан на отслеживании файлов логирования доступа к серверу. По заданному количеству попыток обращений создается правило блокировки ip-адреса, с которого предположительно происходит вторжение.

Установка и настройка Fail2ban

    sudo apt-get install fail2ban -y

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

/etc/fail2ban/jail.conf — отвечает за настройки безопасности конкретных сервисов.

Вносить изменения в него не рекомендуется, поэтому создадим новый файл с расширением .local. Эти файлы имеют приоритет выше, чем файл .conf для Fail2ban.

    sudo nano /etc/fail2ban/jail.local 

Внесем настройки для защиты SSH:

    [sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime  = 60

Построчно:

Директива [sshd] отвечает за защиту доступа по SSH при отказе в авторизации;

enabled = true — состояние;

port = 22 — номер порта;

filter = sshd — имя, по которому идет поиск в логах сервиса;

logpath = /var/log/auth.log — файл журнала, из которого будут взяты результаты поиска по фильтру;

maxretry = 4 — количество неудачных попыток;

bantime  = 60 — время блокировки в секундах. Сейчас эта секция добавлена для тестовой инструкции, в продакшене обычно время блокировки больше.

С настройкой закончили, добавим демона fail2ban в загрузку и запустим, а потом проверим его работу.

    sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Как мы видим, доступ заблокирован после превышения попыток авторизации.

Через 60 секунд доступ появится.

Для того, чтобы разблокировать доступ, принудительно используется команда:

    sudo fail2ban-client set sshd unbanip ip_add

ip_add — заблокированный адрес.

Заключение

На этом инструкция по настройке web-сервера Apache завершена. Подведем итог: мы настроили один из самых популярных web-серверов и доступ к нему по протоколу HTTPS , изучили возможность настройки виртуальных хостов и обезопасили сервер от злоумышленников. На данном этапе администратор может самостоятельно обслуживать и настраивать Apache web-сервер на linux.

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