Apache - самый популярный веб-сервер, используемый в Интернете. Он идеально подходит для большинства ситуаций и обеспечивает гибкость для общих сред. В этом руководстве мы рассмотрим, как защитить веб-сервер Apache.
Поддерживайте Apache в актуальном состоянии
Войдите в систему, используя учетную запись привилегированного пользователя root или sudo. Проверьте версию Apache, выполнив следующую команду.
1 | httpd -v |
Скрыть информацию о версии Apache и Server os.
Первое, что нам нужно учесть, так как мы не хотим раскрывать информацию о версии веб-сервера, который мы используем в нашей системе. Раскрытие информации о версии и операционной системе означает, что мы помогаем хакерам ускорить процесс атаки.
Чтобы предотвратить раскрытие Apache информации о своей версии и операционной системе, нам необходимо изменить основной конфигурационный файл Apache. откройте конфигурационный файл, выполнив следующую команду
1 2 3 | nano /etc/httpd/conf/httpd.conf nano /etc/apache2/apache.conf #(Ubuntu / Debian) |
Теперь добавьте две следующие директивы в основной конфигурационный файл и сохраните его.
1 2 | ServerTokens Prod ServerSignature Off |
И перезапустите сервер Apache, выполнив следующую команду
1 | systemctl restart httpd.service |
Как видно из приведенного ниже изображения, версия Apache не отображается, операционная информация также не видна.
Отключить индексирование каталогов
По умолчанию Apache показывает все содержимое каталога Webroot в отсутствие индексного файла.
Чтобы предотвратить индексацию каталогов в браузере, нам нужно изменить директиву options в конфигурационном файле Apache. Откройте конфигурацию и измените запись, как показано ниже.
1 2 3 | <Directory /var/www/html> Options -Indexes </Directory> |
Отключите ETag
Etag используется в заголовках HTTP для управления поведением веб-кэширования. Однако Etag может вызывать проблемы с безопасностью. Он позволяет удаленным злоумышленникам получить конфиденциальную информацию, такую как номер inode, тип mime и процесс через заголовок ETag. Чтобы предотвратить атаки и утечку информации, добавьте в конфигурацию Apache следующую директиву.
Для этого просто добавьте следующую строку в конфигурационный файл Apache и перезапустите Apache.
1 | FileEtag None |
Отключите CGI и SSI
SSI (server-side includes) - это директивы, используемые для написания HTML-страниц с динамическим содержимым, а CGI - для внедрения вредоносных скриптов в ваш веб-код. Запретите CGI и SSI, добавив следующие директивы опций в конфигурацию Apache:
1 | Options -Includes -ExecCGI |
Ограничение доступа к каталогам
Хорошей практикой безопасности является ограничение доступа к каталогу webroot с помощью синтаксиса "Разрешить и запретить". Чтобы добиться этого, внесите следующие изменения в конфигурационный файл apache. Откройте конфигурационный файл и сервер для блока Directory и пропишите директиву директории следующим образом и сохраните ее. теперь перезапустите Apache, чтобы изменить эффект
1 2 3 4 5 | <Directory /> Options None Order deny,allow Deny from all </Directory> |
Приведенный выше параметр запретит запросы от всех к корневому каталогу. Никто не сможет получить доступ к корневому каталогу.
Защита Apache с помощью Mod_Security
Mod_security - это инструмент безопасности, работающий как брандмауэр для веб-сайтов или приложений. Он помогает защитить веб-сайты или приложения от несанкционированного доступа, а также от атак грубой силы. Установите mod_security, выполнив следующую команду, и перезапустите Apache для работы с mod_security.
Определение методов HTTP-запросов
В текущем протоколе HTTP многие запросы не являются необходимыми, а некоторые представляют угрозу безопасности. Однако для веб-приложения достаточно разрешить методы запросов GET, HEAD и POST. Мы можем настроить этот параметр, добавив соответствующую директиву Directory. Для этого откройте конфигурационный файл Apache, найдите Directory и добавьте следующую директиву внутрь, после чего перезапустите Apache
1 2 3 | <LimitExcept GET POST HEAD> deny from all </LimitExcept> |
Включить защитный заголовок XSS
Межсайтовый скриптинг известен как (XSS), и это распространенная уязвимость, встречающаяся в веб-приложениях. Защита от межсайтового скриптинга (XSS) может отсутствовать во многих браузерах. Однако мы можем предотвратить некоторые XSS-атаки, добавив следующую запись в конфигурационный файл Apache и сохранив его. И перезапустите сервер Apache.
1 | Header set X-XSS-Protection "1; mode=block" |
Отключите TRACE HTTP Request
По умолчанию в Apache открыта опция Trace HTTP Request, позволяющая осуществлять межсайтовую трассировку. Эта опция позволяет хакеру легко украсть информацию о cookie. Чтобы предотвратить это, добавьте следующие параметры в конфигурационный файл Apache. И перезапустите Apache.
1 | TraceEnable off |
Предотвращение атак Clickjacking
Clickjacking, также известная как "атака на восстановление пользовательского интерфейса", - это вредоносная техника сбора кликов зараженного пользователя. Clickjacking обманом заставляет жертву (посетителя) перейти на зараженный сайт. Чтобы предотвратить это, нам необходимо использовать "X-FRAME-OPTION" в конфигурационном файле Apache. Для этого добавьте следующую строку в конфигурационный файл.
1 | Header set X-FRAME-OPTIONS "SAMEORIGIN" |
Безопасный файл cookie с флагом HTTPOnly
Без наличия HttpOnly и Secure можно украсть или манипулировать сессиями и cookies веб-приложений, и это опасно. Чтобы смягчить эту проблему, нам нужно убедиться, что модуль mod_header запущен на стороне сервера.
apachectl -M | grep header
Теперь добавьте следующую строку в основной конфигурационный файл Apache и перезапустите сервер Apache.
1 | Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure |
Ограничение размера запроса
По умолчанию HTTP-запрос в Apache неограничен, поэтому веб-сервер подвержен DoS-атакам, так как он остается открытым для большого количества запросов. В таком случае важно установить ограничение для файлового запроса. Это можно сделать, добавив директиву LimitRequestBody в конфигурационный файл Apache.
Например, unixcop - это каталог, содержащий файлы, загруженные пользователями. Теперь мы ограничиваем размер загружаемого файла до 2K, чтобы пользователь не мог загрузить файл больше этого.
1 2 3 | <Directory "/var/www/html"> LimitRequestBody 20000 </Directory |