Обмен технологиями

Защита от кражи Apache, сжатие веб-страниц, кеширование веб-страниц

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Оглавление

Сжатие веб-страницы

тип

Пример

Динамически добавлять этапы работы модуля

Действия по переустановке Apache

веб-кеш

Пример

Шаги

Скрыть информацию о версии

Шаги

Apache против кражи

определение

принцип

Настройка экспериментальной среды защиты от хотлинков

лабораторная среда

Пример хотлинкинга локальных изображений

Шаги

Пример защиты от хотлинков

Шаги


Сжатие веб-страницы

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

тип

  • gzip
    • Высокая эффективность сжатия, высокая загрузка ЦП
  • сдувать
    • Эффективность сжатия не такая высокая, как у gzip, и он потребляет меньше ресурсов процессора.

Пример

Сжатие веб-страницы с помощью модуля deflate

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

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

Динамически добавлять этапы работы модуля

Динамическое добавление модуля deflate без переустановки Apache.

перейдите на HTTP-сервер Apache для хранения кода модуля, связанного с фильтрами.

Используйте инструмент apxs для работы

  • -i: установить модуль. Установите скомпилированный модуль на сервер Apache.
  • -c: скомпилировать модуль. Скомпилируйте файл исходного кода (здесь mod_deflate.c) в общий объектный файл (файл .so).
  • -a: автоматически активировать модуль. После компиляции и установки модуля сразу включите его, не нужно вручную редактировать файл конфигурации.

Наконец, используйте команду apachectl с трубами и grep, чтобы проверить, успешно ли загружен модуль deflate.

  1. [root@localhost filters]# cd /root/httpd-2.4.25/modules/filters/
  2. [root@localhost filters]# apxs -i -c -a mod_deflate.c
  3. [root@localhost filters]# apachectl -t -D DUMP_MODULES | grep deflate
  4. deflate_module (shared)

Включите модуль mod_deflate в файле конфигурации httpd.

  1. [root@localhost filters]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式下搜索:/deflate
  3. LoadModule deflate_module modules/mod_deflate.so # 去掉开头注释
  4. <IfModule mod_deflate.c>
  5. # 对指定的类型应用deflat进行压缩(文本、样式表、图像)
  6. AddOutputFilterByType DEFLATE text/html text/css text/jpg text/png text/gif
  7. DeflateCompressionLevel 9 # 指定了压缩级别为9,表示最高级别的压缩(压缩比最高,但消耗CPU资源较多)
  8. SetOutputFilter DEFLATE # 指定默认的输出过滤器为deflate进行输出内容的压缩
  9. </IfModule>

Действия по переустановке Apache

Добавьте модуль deflate, переустановив Apache напрямую.

Используйте сначалаapachectl -t -D DUMP_MODULES | grep deflateКоманда для проверки наличия в Apache модуля deflate

Если Apache включен, используйтеsystemctl остановить httpdЗакрыть сервис

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

./настроитьПосле обработки используйтесделать && сделать установкуКоманда для компиляции и установки

  1. [root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
  2. [root@localhost httpd-2.4.25]# make && make install

Используйте команду ll, чтобы проверить, включен ли модуль deflate. Вы можете видеть, что файл mod_deflate.so существует.

  1. [root@localhost httpd-2.4.25]# ll /usr/local/httpd/modules/mod_deflate.so
  2. -rwxr-xr-x 1 root root 53096 7月 10 20:43 /usr/local/httpd/modules/mod_deflate.so

Но используйтеapachectl -t -D DUMP_MODULES | grep deflateЭту команду невозможно запросить, поскольку она не включена в файле конфигурации Apache.

Отредактируйте основной файл конфигурации httpd. Примерно в строке 143 вы можете видеть, что их много.LoadModuleоператоры, мы добавим новые операторы загрузки модулей под этими LoadModules.

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

Тег IfModule используется для условной загрузки конфигурации модуля. Его функция — проверить, загружен ли указанный модуль в текущей среде Apache. Только когда модуль загружен, инструкции по настройке, заключенные в тег IfModule, вступят в силу.

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
  2. LoadModule deflate_module modules/mod_deflate.so
  3. <IfModule mod_deflate.c> # 只有当 mod_deflate 模块加载时才会执行下面的配置
  4. DeflateCompressionLevel 6 # 压缩级别,数字越大压缩比就越大
  5. SetOutputFilter DEFLATE # 启用deflate模块
  6. # 告诉服务器对哪些文件进行压缩,如果是已经压缩过的,就不再压缩
  7. AddOutputFilterByType DEFLATE text/html text/plain text/xml text/csstext/javascript application/x-javascript application/javascript application/json
  8. SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
  9. SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
  10. SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
  11. AddOutputFilterByType DEFLATE text/*
  12. AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
  13. AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
  14. </IfModule>

Сохраните и выйдите, вы можете использоватьhttpd -tЧтобы определить наличие синтаксических ошибок в файле конфигурации. Если отображается сообщение «Синтаксис ОК», это означает, что ошибок нет.

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

В это время зайдите на веб-сервер в браузере, нажмите F12 на клавиатуре, чтобы открыть инструменты разработчика, выберите IP-адрес веб-сервера, и в заголовке ответа вы увидите, что технология сжатия — gzip.

Эксперимент завершен


веб-кеш

Кэширование веб-страниц заключается в кэшировании некоторых страниц, которые часто не изменяются или изменяются редко. В следующий раз, когда браузер снова обращается к этим страницам, нет необходимости снова загружать эти страницы, что повышает скорость доступа пользователя. Модуль mod_expires Apache автоматически генерирует тег Expires и тег Cache-Control в информации заголовка страницы. На основе тегов клиентский браузер решает получить страницу из кеша локального компьютера для следующего посещения, не делая еще одного запроса. Уменьшите частоту и количество клиентских обращений для достижения цели сокращения ненужного трафика и увеличения скорости доступа.

Пример

Внедрить кэширование веб-страниц.

Шаги

Откройте основной файл конфигурации httpd, включите модуль expires, добавьте его и перезапустите службу.

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式搜索:/expires_module
  3. 将前面的注释去掉,开启expires模块
  4. LoadModule expires_module modules/mod_expires.so
  5. <IfModule mod_expires.c>
  6. ExpiresActive On # 开启缓存功能
  7. ExpiresDefault "access plus 60 seconds" # 缓存时间设置为60秒
  8. </IfModule>
  9. 检测语法正确性,重启服务
  10. [root@localhost httpd-2.4.25]# httpd -t
  11. Syntax OK
  12. [root@localhost httpd-2.4.25]# systemctl restart httpd

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


Скрыть информацию о версии

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

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

Шаги

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式下搜索:/httpd-default
  3. 将Include语句前的注释去掉,表示包含Include语句后面指定的文件在当前文件中(相当于把指定文件的内容复制粘贴到当前文件的当前Include语句的位置)
  4. # Various default settings
  5. Include conf/extra/httpd-default.conf

Сохраните и выйдите, откройте файл httpd.default.

  1. [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/extra/httpd-default.conf
  2. 在第55行就可以设置隐藏版本信息,这里改为Prod
  3. ServerTokens Prod

Вы можете видеть, что варианты представлены в комментариях:Установите одно из следующих значений: Полная версия | ОС | Незначительная версия | Минимальная версия | Основная версия | Продукт

Параметры

иллюстрировать

ServerTokens полный

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

Например: Apache/2.4.41 (Unix) OpenSSL/1.1.1d PHP/7.3.11

ОС ServerTokens

Возвращается только тип операционной системы.

Например: Apache/2.4.41 (Unix).

ServerTokens Minor

Возвращает основной и дополнительный номера версий.

Например: Апач/2.4

Минимальные ServerTokens

Возвращает основной номер версии.

Например: Апач/2

ServerTokens Major

Возвращается только основной номер версии.

Например: Апач/2

ServerTokens Prod

Возвращает минимальную информацию, показывая только Apache, без номера версии.

Например: Апач

Сохраняем и выходим, перезапускаем службу.Доступ к веб-серверу

Вы можете видеть, что в информации о версии показан только один Apache.


Apache против кражи

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

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

определение

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

принцип

  • Проверка HTTP Referer: сервер определяет источник запроса ресурса, проверяя заголовок Referer в HTTP-запросе. Если будет обнаружено, что реферер не из разрешенного вами источника (например, вашего собственного веб-сайта), сервер может отказать в предоставлении ресурса или вернуть альтернативный контент.
  • Правила перезаписи. Используйте правила перезаписи Apache, чтобы перезаписывать запросы, проверять заголовок Referer, а затем решать, предоставлять ли ресурсы или отклонять запрос на основе настроек.

Настройка экспериментальной среды защиты от хотлинков

Имя процессора

доменное имя

айпи адрес

Операционная система

Основное программное обеспечение и версии

апач1

www.e1.com

192.168.10.101

CentOS7.9

httpd-2.4.25.tar.gz

apache2

www.e2.com

192.168.10.201

CentOS7.9

httpd-2.4.25.tar.gz или установка yum

клиент

Виндовс 10

Браузер

лабораторная среда

Клонируйте первый сервер напрямую или используйте yum -y install httpd для установки httpd и измените IP-адрес на 192.168.10.102.

Измените имена хостов двух серверов.

  1. 101主机
  2. [root@localhost ~]# hostname apache1
  3. [root@localhost ~]# bash
  4. [root@apache1 ~]#
  5. 201主机
  6. [root@localhost ~]# hostname apache2
  7. [root@localhost ~]# bash
  8. [root@apache2 ~]#

Измените файлы хостов двух веб-серверов, чтобы они могли разрешать соответствующие доменные имена.

Выполните те же действия, что и ниже, чтобы изменить хост 201.

  1. [root@apache1 ~]# vim /etc/hosts
  2. 在hosts文件末尾追加
  3. 192.168.10.101 www.e1.com
  4. 192.168.10.201 www.e2.com

Для файла хостов хоста клиента Win10 в разделе C:WindowsSystem32drivesetc дважды щелкните файл хостов, чтобы открыть его с помощью Блокнота.

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

  1. 在两个Web服务器操作
  2. [root@apache1 ~]# systemctl start httpd
  3. [root@apache1 ~]# setenforce 0

Пример хотлинкинга локальных изображений

Хост 101 — это мой сайт, и мне нужно украсть изображения с веб-сервера хоста 201.

То есть www.e1.com крадет ссылку на изображение www.e2.com.

Шаги

Приходите на 201 хост

Введите каталог, в котором httpd хранит файлы веб-страниц, перетащите изображение и отредактируйте файл index.html.

  1. [root@apache2 ~]# cd /usr/local/httpd/htdocs/
  2. 在该目录下从宿主机拖入一张图片
  3. [root@apache2 htdocs]# vim index.html
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>标题</title>
  8. </head>
  9. <body>
  10. <h1>原图网站</h1>
  11. <img src="logo.jpg" /> # 如果图片文件是在网页文件同一目录下,可以不用加路径
  12. </body>
  13. </html>

Сохраните и выйдите. В это время с помощью браузера посетите сайт www.e2.com на хост-компьютере, и вы увидите, что на веб-странице есть изображения.

Если вы хотите украсть изображения с других веб-сайтов, вам понадобится ссылка на изображение. Щелкните изображение правой кнопкой мыши в браузере и выберите «Копировать ссылку на изображение».

Приходите в 101 Хост

Добавьте ссылку на картинку на главную страницу сервера 101Web.

  1. [root@apache1 ~]# cd /var/www/html # 使用yum安装httpd的存放网页文件的目录
  2. [root@apache1 html]# vim index.html
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>标题</title>
  7. </head>
  8. <body>
  9. <h1>盗图网站</h1>
  10. <img src="http://www.e2.com/logo.jpg" />
  11. </body>
  12. </html>

Сохраните и выйдите, перейдите на клиентский хост Win10 и посетите два URL-адреса: www.e1.com и www.e2.com.

Используйте F12, чтобы открыть инструменты разработчика. В сети вы можете увидеть, что URL-адрес запроса и ссылки на изображения www.e2.com принадлежат www.e2.com.

URL-адрес запроса www.e1.com — www.e1.com, но запрос изображения — это IP-адрес хоста www.e2.com + ссылка на изображение.

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

Пример защиты от хотлинков

Если другой хост украдет ссылку на изображение хоста 201, вместо изображения, которое другая сторона хочет украсть, будет отображаться только фиксированное изображение.

Шаги

Импортируйте другое изображение (error.jpg) в каталог htdocs хоста 201 (www.e2.com), которое предоставляет исходное изображение для экспериментов по борьбе с пиявками.

Затем отредактируйте файл конфигурации httpd и включите модуль перезаписи (перезапись адреса). Цель перезаписи состоит в том, чтобы, если кто-то запрашивает мой logo.jpg, перенаправить запрос на error.jpg.

С помощью функции перезаписи адреса запрос можно просмотреть и оценить. Если префикс запроса — www.e2.com, доступ будет разрешен. Если префикс запроса не www.e2.com, доступ к изображению будет разрешен. не допускать.

  1. [root@apache2 htdocs]# vim /usr/local/httpd/conf/httpd.conf
  2. 在末行模式下搜索:/rewrite
  3. LoadModule rewrite_module modules/mod_rewrite.so # 将开头注释去掉,启用rewrite模块
  4. 在末行模式下搜索:/htdocs
  5. 在<Directory "/usr/local/httpd/htdocs">标签内往下翻
  6. 找到AllowOverride参数的行,修改内容为下方内容
  7. AllowOverride None
  8. RewriteEngine On
  9. RewriteCond %{HTTP_REFERER} !^http://e2.com$ [NC]
  10. RewriteCond %{HTTP_REFERER} !^http://e2.com/.*$ [NC]
  11. RewriteCond %{HTTP_REFERER} !^http://www.e2.com$ [NC]
  12. RewriteCond %{HTTP_REFERER} !^http://www.e2.com/.*$ [NC]
  13. RewriteRule .*.(gif|jpg|swf)$ http://www.e2.com/error.png

параметр

иллюстрировать

РазрешитьПереопределить ВСЕ

Разрешить RewriteEngine и другие правила перезаписи в файлах .htaccess.

ВСЕ: позволяет переопределять все типы директив перезаписи правилами в файле .htaccess.

Нет: запрещает использование файлов .htaccess в этом каталоге для переопределения конфигурации сервера.

RewriteEngine включен

Включить перезапись. Это первый шаг к включению правил перезаписи.

ПереписатьУсловие

Определить условия перезаписи

%{HTTP_REFERER}

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

Сопоставьте значение Referer в запросе

!^http://www.e2.com/.*$

Любой файл по URL-адресу (.*: соответствует одному или нескольким любым символам)

Указывает, что она не соответствует строке, начинающейся с http://www.e2.com/ и заканчивающейся одним или несколькими символами.

[NC]

Фильтрация не чувствительна к регистру

RewriteRule

Определить правила перезаписи

.*.(gif|jpg|swf)$ http://www.e2.com/error.png

Когда предыдущее условие перезаписи соответствует, если запрошенный URL-адрес заканчивается на .gif, .jpg или .swf.

Затем запрос будет перенаправлен на http://www.e2.com/error.png.

.*: соответствует любому количеству любых символов

.: Точка, экранированная escape-символом, вот значение простой точки.

Сохраняем и выходим, перезапускаем службу.

Наконец, мы подошли к клиентскому хосту (Win10), чтобы проверить, не кэшируется ли изображение браузером, поэтому используйте сочетания клавиш Ctrl + Shift + Delete, чтобы очистить кеш браузера.

Затем посетите www.e2.com, и все работает нормально.

При посещении сайта www.e1.com ссылка на украденное изображение становится перенаправленным изображением error.png.