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