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

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

ApacheSecurity

13 советов по усилению безопасности веб-сервера Apache. Мы все хорошо знакомы с веб-сервером Apache, это очень популярный веб-сервер для размещения ваших веб-файлов или веб-сайта в Интернете.

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

Корневой каталог документов: /var/www/html или /var www
Основной файл конфигурации: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) и /etc/apache2/apache2.conf (Debian/Ubuntu).
Порт HTTP по умолчанию: 80 TCP
Порт HTTPS по умолчанию: 443 TCP
Проверьте настройки и синтаксис файла конфигурации: httpd -t
Доступ к файлам журналов веб-сервера: /var/log/httpd/access_log
Файлы журнала ошибок веб-сервера: /var/log/httpd/error_log

 

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

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

 

Show-Apache-Version-620x396

 

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

Откройте файл конфигурации с помощью редактора vim и найдите «ServerSignature», по умолчанию он включен. Нам нужно отключить эти подписи сервера, и вторая строка «ServerTokens Prod» говорит Apache возвращать только Apache как продукт в заголовке ответа сервера при каждом запросе страницы. Он подавляет информацию об ОС, основной и вспомогательной версиях.

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache2/apache2.conf (Debian/Ubuntu)

 

 

ServerSignature Off
ServerTokens Prod

 

 

# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

 

 

Hide-Apache-Version-620x413

 

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

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

 

Apache-Directory-Listing-620x410

 

Мы можем отключить список каталогов с помощью директивы Options в файле конфигурации для конкретного каталога. Для этого нам нужно сделать запись в файле httpd.conf или apache2.conf.

<Directory /var/www/html>
Options -Indexes
</Directory>

 

 

Hide-Apache-Directory-Listing-620x416

 

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

Сообщество разработчиков Apache постоянно работает над проблемами безопасности и выпускает обновленную версию с новыми параметрами безопасности. Поэтому всегда рекомендуется использовать последнюю версию Apache в качестве веб-сервера.

Чтобы проверить версию Apache: Вы можете проверить текущую версию с помощью команды httpd -v.

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Aug 13 2013 17:29:28

 

 

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

# yum update httpd
# apt-get install apache2

 

 

Также рекомендуется обновлять ядро операцонной системы и саму операционную систему до последних стабильных выпусков, если вы не запускаете какое-либо конкретное приложение, которое работает только на определенной ОС или Ядре.

 

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

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



# grep LoadModule /etc/httpd/conf/httpd.conf

# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
....

 

 

Выше приведен список модулей, которые включены по умолчанию, но часто не нужны: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Чтобы отключить конкретный модуль, вы можете вставить «#» в начале этой строки и перезапустить службу.

 

5. Запустите Apache как отдельного пользователя и группу

При установке по умолчанию Apache запускает процесс с пользователем nobody или daemon. Из соображений безопасности рекомендуется запускать Apache под собственной непривилегированной учетной записью. Например: http-web.

Создать пользователя и группу Apache
# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

 

 

Теперь вам нужно указать Apache, что он должен работать с этим новым пользователем, и для этого нам нужно сделать запись в /etc/httpd/conf/httpd.conf и перезапустить службу.

Откройте /etc/httpd/conf/httpd.conf с помощью редактора vim и выполните поиск по ключевым словам «User» и «Group», и там вам нужно будет указать имя пользователя и имя группы для использования.

User http-web
Group http-web

 

 

6. Используйте Allow и Deny, чтобы ограничить доступ к каталогам

Мы можем ограничить доступ к каталогам с помощью параметров «Allow» и «Deny» в файле httpd.conf. Здесь, в этом примере, мы будем защищать корневой каталог, для этого установив следующее в файле httpd.conf.

<Directory />
Options None
Order deny,allow
Deny from all
</Directory>

 

 

Параметр «None» — этот параметр не позволяет пользователям включать какие-либо дополнительные функции.
Order deny, allow — это порядок, в котором будут обрабатываться директивы «Allow» и «Deny». Здесь он сначала «отрицает», а затем «разрешает».
Deny from all — будет отклонять запросы от всех к корневому каталогу, никто не сможет получить доступ к корневому каталогу.

 

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

Эти два модуля «mod_security» и «mod_evasive» являются очень популярными модулями Apache с точки зрения безопасности.

Mod_security

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

Установите mod_security в Ubuntu/Debian
$ sudo apt-get install libapache2-modsecurity
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload

 

 

Установите mod_security на RHEL/CentOS/Fedora/
# yum install mod_security
# /etc/init.d/httpd restart

 

 

Mod_evasive

mod_evasive работает очень эффективно, он обрабатывает один запрос и обрабатывает его очень хорошо. Это предотвращает DDOS-атаки от нанесения как можно большего урона. Эта особенность mod_evasive позволяет ему обрабатывать грубую силу HTTP и атаки Dos или DDos. Этот модуль обнаруживает атаки тремя способами.

  • Если много запросов приходит на одну и ту же страницу несколько раз в секунду.
  • Если какой-либо дочерний процесс пытается сделать более 50 одновременных запросов.
  • Если какой-либо IP все еще пытается сделать новые запросы, когда его внесли в черный список.

 

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

 

8. Отключите использование Apache символических ссылок

По умолчанию Apache следует символическим ссылкам, мы можем отключить эту функцию с помощью FollowSymLinks с директивой Options. И для этого нам нужно сделать следующую запись в основном файле конфигурации.

Options -FollowSymLinks

 

 

И, если любому конкретному пользователю или веб-сайту требуется включить FollowSymLinks, мы можем просто написать правило в файле «.htaccess» с этого веб-сайта.

# Enable symbolic links
Options +FollowSymLinks

 

 

Примечание. Чтобы включить правила перезаписи внутри файла «.htaccess», «AllowOverride All» должен присутствовать в основной конфигурации глобально.

 

9. Отключите серверные включения и выполнение CGI

Мы можем отключить серверные включения (mod_include) и выполнение CGI, если в этом нет необходимости, и для этого нам нужно изменить основной файл конфигурации.

Options -Includes
Options -ExecCGI

 

 

Мы можем сделать это и для определенного каталога с помощью тега Directory. В этом примере мы отключаем выполнение файлов Include и Cgi для каталога «/var/www/html/web1».

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

 

 

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

Options All — включить все параметры одновременно. Это значение по умолчанию, если вы не хотите явно указывать какие-либо значения в конфигурационном файле Apache или .htaccess.
Options IncludesNOEXEC — этот параметр позволяет включать на стороне сервера без разрешения выполнение команды или файлов CGI.
Options MultiViews — позволяет контенту согласовывать множественные просмотры с модулем mod_negotiation.
Параметры Options SymLinksIfOwnerMatch — это похоже на FollowSymLinks. Но так будет происходить только в том случае, если владелец совпадает между ссылкой и исходным каталогом, с которым она связана.

 

10. Ограничьте размер запроса

По умолчанию Apache не имеет ограничений на общий размер HTTP-запроса, то есть неограничен, и когда вы разрешаете большие запросы на веб-сервере, вполне возможно, что вы можете стать жертвой атак типа «отказ в обслуживании». Мы можем ограничить размер запросов директивы Apache «LimitRequestBody» с помощью тега directory.

Вы можете установить значение в байтах от 0 (неограниченно) до 2147483647 (2 ГБ), которые разрешены в теле запроса. Вы можете установить это ограничение в соответствии с потребностями вашего сайта. Предположим, у вас есть сайт, на котором вы можете загружать файлы и хотите ограничить размер загрузки для определенного каталога.

Здесь, в этом примере, user_uploads — это каталог, содержащий файлы, загруженные пользователями. Мы ставим ограничение в 500К.

<Directory "/var/www/myweb1/user_uploads">
LimitRequestBody 512000
</Directory>

 

 

11. Защитита от DDOS атак

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

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

 

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

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

Для этого вам нужно включить модуль mod_log_config. Существует три основных директивы, связанных с журналированием, доступных в Apache.

  • TransferLog: создание файла журнала.
  • LogFormat: указание пользовательского формата.
  • CustomLog: создание и форматирование файла журнала.

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

<VirtualHost *:80>
DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined
</VirtualHost>

 

 

13. Защита Apache с помощью SSL-сертификатов.

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

Вы можете приобрести сертификаты SSL у различных провайдеров SSL, как namecheap.com. Если вы работаете в очень маленьком веб-бизнесе и не желаете приобретать SSL-сертификат, вы все равно можете назначить самоподписанный сертификат вашему веб-сайту. Apache использует модуль mod_ssl для поддержки SSL-сертификата.

# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

 

 

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

<VirtualHost 172.16.25.125:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/example.com.crt
SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
ServerAdmin [email protected]
ServerName example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/example.com-error_log
CustomLog /var/log/httpd/example.com-access_log common
</VirtualHost>

 

 

Откройте браузер, введите https://example.com, и вы сможете увидеть новый самоподписанный сертификат.

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

 

 

Спасибо за уделенное время на прочтение статьи «13 советов по усилению безопасности веб-сервера Apache»!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасности,  полный курс по кибербезопасностикурсы DevNet (программируемые сети) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.
Что Вы получите?
  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
А еще поможем Вам:
  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.
ApacheSecurity

Больше похожих постов

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Самое читаемое
Меню