18 советов по безопасности и укреплению Apache Web Server

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

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

1. Как скрыть информацию о версии Apache и ОС

По умолчанию сервер веб-страниц Apache отображает свою версию в случае, если вы вводите неправильный URL веб-сайта. Ниже приведен пример страницы ошибки, указывающей, что страница не может быть найдена на сайте. Последняя строка указывает версию Apache, операционную систему хоста, IP-адрес и порт, на котором он слушает.

Show Apache Version Info

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

Для этого откройте файл конфигурации Apache по умолчанию на дистрибутивах на основе Debian.

$ sudo vim /etc/apache2/apache2.conf

Для систем на базе RHEL таких как RHEL, Fedora, CentOS, Rocky, и AlmaLinux.

$ sudo vim /etc/httpd/conf/httpd.conf

Добавьте следующие строки в конце файла.

ServerTokens Prod
ServerSignature Off

Сохраните изменения и перезапустите веб-сервер Apache.

$ sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
$ sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Теперь обновите сайт, и на этот раз информация о веб-сервере не будет отображаться.

Check Apache Version Info

2. Отключите список каталогов в Apache

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

Для продемонстрирования этого, мы создадим каталог с именем test.

$ sudo mkdir -p /var/www/html/test

Далее мы перейдем в этот каталог и создадим несколько файлов.

$ cd /var/www/html/test
$ sudo touch app.py main.py

Теперь, если мы обратимся к URL http://localhost/test, мы сможем просмотреть список каталогов.

Disable Apache Directory Listing

Чтобы отключить отображение списка каталогов, перейдите к главному конфигурационному файлу Apache и ищите атрибут ‘Directory‘. Установите значение параметра ‘Options‘ на '-Indexes', как показано.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Перезагрузите Apache, и на этот раз, когда вы посетите URL, каталоги больше не будут отображаться.

Disable Directory Listing in Apache

3. Regularly Update Apache

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

Таким образом, регулярное обновление ваших приложений до их последних версий рекомендуется.

$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
$ sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Update System Packages

4. Используйте шифрование HTTPS в Apache

По умолчанию Apache использует протокол HTTP, который является слабым и небезопасным протоколом, склонным к подслушиванию. Чтобы улучшить безопасность вашего сайта и, тем более, улучшить рейтинги Google SEO, рассмотрите возможность шифрования вашего сайта с использованием SSL-сертификата.

Таким образом, он переключает протокол HTTP по умолчанию на HTTPS, что делает его сложнее для перехвата и расшифровки коммуникаций, отправляемых туда и обратно с сервера.

Посмотрите, как обезопасить веб-сервер Apache с помощью SSL-сертификата Let’s Encrypt на Linux.

5. Включите HTTP Strict Transport Security (HSTS) для Apache

Помимо шифрования вашего веб-сайта с помощью сертификата TLS/SSL, рассмотрите внедрение механизма безопасности веба HSTS поверх HTTPS.

HTTP Strict Transport Security (HSTS) является механизмом политики, который защищает веб-сайты от атак посредника и захвата сессии cookie. Это происходит, когда злоумышленники снижают протокол HTTPS до небезопасного протокола HTTP.

HSTS позволяет веб-серверу строго заявить, что веб-браузеры должны взаимодействовать с ним только через HTTPS, никогда не через протокол HTTP.

Для включения HSTS убедитесь, что ваш сайт работает на HTTPS и имеет действительный сертификат TLS/SSL.

Затем включите модуль заголовков для Apache:

$ sudo a2enmod headers

После этого перезагрузите Apache, чтобы применить изменения.

$ sudo systemctl restart apache2

Затем перейдите в файл конфигурации виртуального хоста вашего домена.

$ sudo vim /etc/apache2/sites-available/mydomain.conf

Далее добавьте эту строку в блок <VirtualHost *:443>:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Это выглядит следующим образом.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

Параметр max-age указывает веб-браузерам использовать ваш сайт только с использованием HTTPS в течение следующего года (31536000 = 1 год).

Наконец, перезагрузите Apache, чтобы политика HSTS вступила в силу.

$ sudo systemctl restart apache2

6. Включение HTTP/2 на Apache

В 2015 году был выпущен HTTP/2, который является новой версией протокола HTTP, направленной на решение нескольких проблем, которые создатели HTTP/1.1 не предвидели.

В то время как HTTP/1.1 все еще широко используется, его связывают с проблемами производительности, связанными с использованием нескольких TCP-соединений для обработки нескольких запросов от браузера, что приводит к высоким ресурсозатратам на стороне клиента и ухудшению сетевой производительности.

По мере роста сложности и функциональности приложений был создан HTTP/2 для решения недостатков HTTP/1.1, включая длинные заголовки HTTP, медленную загрузку веб-страниц и общее снижение производительности.

HTTP/2 обеспечивает большую защиту и конфиденциальность по сравнению с предшественником. Равным образом, улучшена производительность за счет использования мультиплексированных потоков данных. С HTTP/2 одно TCP-соединение обеспечивает эффективное использование пропускной способности, даже при передаче нескольких потоков данных.

Посмотрите, как включить HTTP/2 на веб-сервере Apache, используя:

7. Ограничение доступа к чувствительным каталогам в Apache

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

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

В приведенной выше конфигурации Require all denied запрещает доступ для всех, кто пытается получить доступ к файлам в /sensitive_directory.

Сохраните изменения и выйдите из файла. Затем перезапустите Apache, чтобы изменения вступили в силу.

8. Отключите директиву ServerSignature в Apache

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

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

ServerSignature Off

Сохраните изменения и еще раз перезапустите Apache, чтобы изменения вступили в силу.

$ sudo systemctl restart apache2

9. Установите директиву ‘ServerTokens’ на ‘Prod’

Директива ‘ServerTokens‘ контролирует, какую информацию сервер отправляет, включая версию Apache (основную и второстепенную версии), ОС и тип веб-сервера.

Минимальное количество информации, которое вы хотели бы раскрыть публике, – это то, что веб-сервер – это Apache. Все остальное только подвергнет ваш сервер потенциальным атакам. Поэтому рекомендуется установить директиву ‘ServerTokens‘ в файле конфигурации Apache на ‘prod‘.

ServerTokens Off

Как всегда, сохраните изменения и обязательно перезапустите Apache.

10. Обеспечьте безопасность Apache с помощью Fail2ban

Fail2ban – это приложение для предотвращения вторжений с открытым исходным кодом, которое защищает системы Linux от внешних угроз, включая атаки DoS и перебор паролей. Оно работает, постоянно мониторя журналы систем на наличие злонамеренной активности и блокируя хосты, которые соответствуют шаблонам, имитирующим поведение атаки.

Fail2ban можно настроить для защиты Apache от атак типа DoS, постоянно отслеживая журналы Apache на предмет неудачных попыток входа и временно блокируя нарушающие IP-адреса.

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

11. Отключение ненужных модулей

Модули Apache – это просто программы, которые загружаются для расширения функциональности веб-сервера. Функции, расширяемые модулями, включают базовую аутентификацию, кэширование контента, шифрование, безопасность и т. д.

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

Чтобы просмотреть все включенные модули, выполните команду

$ apache2ctl -M
View Apache Modules

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

$ apache2ctl -M | grep rewrite
Check Apache Module

Чтобы отключить модуль, выполните команду:

$ sudo a2dismod rewrite 
Disable Apache Module

12. Использование модулей mod_security и mod_evasive для защиты Apache

Вы можете включить модули mod_security и mod_evasive для обеспечения безопасности Apache от атак перебора паролей или DDoS-атак.

  • Модуль mod_security действует как брандмауэр веб-приложений (WAF) и блокирует подозрительный и нежелательный трафик на вашем сайте.
  • Модуль mod_evasive защищает ваш сервер от атак перебора паролей и отказа в обслуживании (DoS).

Прочтите больше о том, как защитить Apache с помощью модулей mod_security и mod_evasive.

13. Ограничение нежелательных служб в Apache

Для дополнительного обеспечения безопасности Apache рассмотрите отключение определенных служб, таких как символические ссылки и выполнение CGI, если это в настоящее время не требуется. По умолчанию Apache следует за символическими ссылками, мы можем отключить эту функцию, а также функцию -Includes и CGI одной строкой.

Для этого добавьте строку '-ExecCGI -FollowSymLinks -Includes' для директивы ‘Options’ в разделе ‘Directory’.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Это также можно достичь на уровне каталога. Например, здесь мы отключаем Includes и выполнение файлов Cgi для каталога “/var/www/html/mydomain1”.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Сохраните изменения и перезапустите Apache.

14. Ограничение размера загружаемого файла в Apache

Еще один способ обеспечения безопасности вашего веб-сервера – ограничить общий размер тела HTTP-запроса, отправляемого на веб-сервер от клиента. Вы можете установить его в контексте сервера, для каталога, для файла или для местоположения.

Например, если вы хотите разрешить загрузку файла в определенный каталог, скажем, в каталоге /var/www/domain.com/wp-uploads, и ограничить размер загруженного файла до 4M = 4194304 байт, добавьте следующую директиву в файл конфигурации Apache или .htaccess.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Сохраните изменения и запомните перезапустить Apache.

Вы можете установить это в контексте сервера, для каждого каталога, для каждого файла или для каждого местоположения. Директива предотвращает аномальное поведение запросов клиентов, которое иногда может быть формой атаки отказа в обслуживании (DoS).

15. Включите ведение журнала в Apache

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

Чтобы включить ведение журнала, вам нужно включить модуль mod_log_config, который предоставляет две основные директивы ведения журнала.

  • ErrorLog – Указывает путь к файлу журнала ошибок.
  • CustomLog – Создает и форматирует файл журнала.

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

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Директива {APACHE_LOG_DIR} в системах Debian определена как путь /var/log/apache2.

16. Запуск Apache отдельным пользователем и группой

Запуск Apache отдельным пользователем и группой является распространенной практикой безопасности. Таким образом, вы можете изолировать процесс веб-сервера от других процессов системы и минимизировать потенциальный ущерб, если веб-сервер будет скомпрометирован.

Сначала вам нужно создать нового пользователя и группу специально для Apache.

$ sudo groupadd apachegroup
$ sudo useradd -g apachegroup apacheuser

Затем вам нужно будет отредактировать файл конфигурации Apache, чтобы указать нового пользователя и группу.

User apacheuser
Group apachegroup

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

$ sudo chown -R apacheuser:apachegroup /var/www/html

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

$ sudo systemctl restart httpd      # For RHEL/CentOS
$ sudo systemctl restart apache2    # For Debian/Ubuntu

17. Защита от атак DDoS и укрепление

Хорошо, правда в том, что вы не можете полностью защитить свой сайт от атак DDoS. Однако вот некоторые рекомендации, которые могут помочь вам смягчить и управлять ими.

  • TimeOut – Эта директива позволяет вам указать длительность, в течение которой сервер будет ожидать завершения определенных событий, прежде чем вернуть ошибку. Значение по умолчанию составляет 300 секунд. Для сайтов, подверженных атакам DDoS, рекомендуется держать это значение низким. Однако подходящая настройка в значительной степени зависит от характера запросов, которые получает ваш сайт. Примечание: Низкий тайм-аут может вызвать проблемы с некоторыми CGI-скриптами.
  • MaxClients – Эта директива устанавливает предел на количество одновременных подключений, которые могут быть обслужены. Все новые подключения, превышающие этот предел, будут поставлены в очередь. Она доступна как в Prefork, так и в Worker MPMs. Значение по умолчанию – 256.
  • KeepAliveTimeout – Эта директива указывает длительность, в течение которой сервер будет ожидать следующего запроса перед закрытием соединения. Значение по умолчанию составляет 5 секунд.
  • LimitRequestFields – Эта директива устанавливает ограничение на количество заголовков HTTP-запросов, принимаемых клиентами. Значение по умолчанию – 100. Если DDoS-атаки происходят из-за избыточного количества заголовков HTTP-запросов, рекомендуется уменьшить это значение.
  • LimitRequestFieldSize – Эта директива устанавливает ограничение размера для заголовка HTTP-запроса.

18. Выполняйте регулярные сканирования уязвимостей

Еще один способ обеспечения безопасности вашего веб-сервера – выполнение регулярных тестов на сканирование уязвимостей. Это помогает выявить потенциальные уязвимые места, которые могут быть использованы хакерами для доступа к чувствительным файлам или инъекции вредоносных программ.

Инструменты для сканирования уязвимостей также помогают выявить небезопасные настройки конфигурации и помогают в аудите соблюдения правил. Популярные инструменты для сканирования уязвимостей включают в себя Acutenix, Nessus, Nexpose, Sucuri и многие другие.

Заключение

Это некоторые из советов по усилению безопасности Apache, которые вы можете реализовать на своем веб-сервере, чтобы обеспечить дополнительный уровень защиты и предотвратить вторжения.

Source:
https://www.tecmint.com/apache-security-tips/