Поиск по сайту:

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


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

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

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

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

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

Для этого откройте файл конфигурации 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]

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

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, мы сможем просмотреть список каталогов.

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

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

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

3. Регулярно обновляйте Apache

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

Поэтому рекомендуется регулярно обновлять ваши приложения до последних версий.

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

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

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

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

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

  • Как защитить Apache с помощью SSL-сертификата Let’s Encrypt на RHEL
  • Как защитить Apache с помощью бесплатного SSL-сертификата Let's Encrypt в Ubuntu и Debian

5. Включите строгую транспортную безопасность HTTP (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

Затем добавьте эту строку в блок :

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, используя:

  • Как включить HTTP/2 в Apache в Ubuntu

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>

В приведенной выше конфигурации параметр Требовать все запрещены запрещает доступ всем, кто пытается получить доступ к файлам в /sensitivity_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, используя:

  • Как использовать Fail2ban для защиты вашего Linux-сервера

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

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

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

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

apache2ctl -M

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

apache2ctl -M | grep rewrite

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

sudo a2dismod rewrite 

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>

Этого также можно достичь на уровне каталога. Например, здесь мы отключаем выполнение файлов Include и 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.=4194304Bytes, добавьте следующую директиву в файл конфигурации 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 MPM. Значение по умолчанию — 256.
  • KeepAliveTimeout – эта директива определяет продолжительность ожидания сервером последующего запроса перед закрытием соединения. Значение по умолчанию — 5 секунд.
  • LimitRequestFields – эта директива устанавливает ограничение на количество полей заголовка HTTP-запроса, принимаемых клиентами. Значение по умолчанию — 100. Если DDoS-атаки происходят из-за чрезмерного количества заголовков HTTP-запросов, рекомендуется уменьшить это значение.
  • LimitRequestFieldSize – эта директива устанавливает ограничение размера заголовка HTTP-запроса.

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

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

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

Заключение

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