Обратный прокси-сервер — основной компонент в архитектуре безопасности

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

Что такое обратный прокси-сервер?

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

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

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

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

Обратный прокси: функции и применение

Обратные прокси обычно защищены брандмауэром в частной сети или демилитаризованной зоне (DMZ). Обратный прокси, как и прямой прокси, является единственным соединением между Интернетом и частной сетью. Поэтому все запросы к внутренним серверам в локальной сети проходят через один и тот же коммуникационный интерфейс, прежде чем они будут направлены к реальной целевой системе. Связывая их вместе, это позволяет контролировать входящий трафик данных, предоставлять несколько серверов под одним URL, равномерно распределять запросы между различными серверами и ускорять поиск данных за счет кэширования. Таким образом, обратные прокси-серверы используются в следующих областях применения:

  • Анонимизация: являясь единственным доступом к внутренней сети, обратный прокси-сервер обрабатывает все запросы к серверам в фоновом режиме и действует так, чтобы клиентские программы думали, что они имеют дело с реальной целевой системой. Для этого прокси пересылает запросы к соответствующим целевым системам в локальной сети, принимает их ответы и пересылает их запрашивающим клиентам. Реальные внутренние серверы остаются анонимными.
  • Защита и шифрование: восходящий обратный прокси-сервер предоставляет возможность установки систем контроля, таких как антивирусные сканеры или пакетные фильтры, которые дополнительно защищают серверы в фоновом режиме. Таким образом, прокси-сервер представляет собой еще одно звено в цепи безопасности между Интернетом и частной сетью. Обратные прокси-серверы также могут использоваться для шифрования. Передача SSL-сертификатов прокси-серверу разгружает веб-серверы, которые работают в фоновом режиме.
  • Балансировка нагрузки: используя восходящий обратный прокси-сервер, вы можете связать URL-адрес с различными серверами в частной сети. Это также означает возможность распределять входящие запросы на несколько серверов. Балансировка нагрузки предотвращает перегрузку отдельных систем и продолжает работать в случае неисправности одного сервера. Если сервер недоступен из-за аппаратных или программных ошибок, модуль балансировки нагрузки прокси распределяет входящие запросы на оставшиеся серверы. Таким образом, можно гарантировать, что услуга всегда доступна, даже если что-то идет не так.
  • Кэширование: для ускорения работы сервиса обратный прокси-сервер предоставляет функцию, позволяющую кэшировать ответы сервера. Это кэширование позволяет прокси-серверу отвечать на повторяющиеся запросы частично или полностью. Статический контент, такой как изображения или часто посещаемые динамические веб-сайты, хранятся в кэше прокси-сервера. Это означает, что никаких данных или меньшее их количество не нужно извлекать с внутреннего сервера, что значительно ускоряет скорость доступа к веб-сервисам. Однако, поскольку содержимое быстро меняется и невозможно гарантировать, что кэш прокси содержит текущую версию, существует риск, что клиенты получат устаревшую информацию.
  • Сжатие: при наличии соответствующего программного обеспечения обратный прокси-сервер может использоваться для сжатия входящих и исходящих данных. Популярной программой для сжатия веб-сайтов является gzip, которая часто используется в сочетании с Apache или nginx.

Настройка Apache в качестве обратного прокси-сервера

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

HTTP-сервер Apache с открытым исходным кодом бесплатно предоставляется Apache Software Foundation. Введение в программное обеспечение веб-сервера можно найти в нашем руководстве.

1. Установите модуль Apache Proxy

Чтобы использовать HTTP-сервер Apache в качестве обратного прокси, вам необходим модуль mod_proxy. Он реализует основные функции и может быть расширен различными дополнительными модулями:

  • mod_proxy_http содержит все функции прокси для HTTP и HTTPS запросов. Дополнительный модуль поддерживает версии протоколов HTTP/0.9, HTTP/1.0 и HTTP/1.1.
  • mod_proxy_ftp необходим для обеспечения прокси-функций для FTP-запросов.
  • mod_proxy_connect обеспечивает прокси-функции для SSL-туннелирования.
  • mod_proxy_ajp реализует протокол Apache JServ Protocol (AJP). Он используется в контексте балансировки нагрузки для перенаправления запросов к серверам приложений в фоновом режиме.
  • mod_cache, mod_disk_cache и mod_mem_cache реализуют функции кэширования, которые позволяют кэшировать содержимое на сервере Apache. 
  • mod_proxy_html позволяет переписывать HTML-ссылки.
  • mod_headers позволяет манипулировать данными заголовков HTTP.
  • mod_deflate реализует функцию сжатия.

Для установки модуля mod_proxy, включая все дополнительные модули, требуется следующая командная строка:

 sudo apt-get install libapache2-mod-proxy-html

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

2. Активируйте необходимые модули

Для активации отдельных модулей прокси-функции Apache используется команда a2enmod. Уже активированные модули могут быть деактивированы командой a2dismod. Чтобы создать простой обратный прокси для нижележащего веб-сервера, достаточно загрузить модули mod_proxy и mod_proxy_http:

sudo a2enmod proxy 
sudo a2enmod proxy_http

После активации модулей необходимо перезапустить HTTP-сервер Apache:

sudo apache2 reload

3. Создайте конфигурационный файл

Для того чтобы обратный прокси-сервер принимал запросы из интернета и направлял их на нужный сервер в локальной сети, необходимо деактивировать конфигурационный файл000-default.conf в каталоге /etc/apache2/sites-enabled и заменить его на файл виртуального хоста, например example.conf.  Рекомендуется создать отдельный файл виртуального хоста для каждого целевого сервера со своим IP:

<VirtualHost *:80>
 ServerName domain.tld
 ServerAlias www.domain.tld
 ProxyRequests Off
 ProxyPass / http://123.456.7.89/
 ProxyPassReverse / http://123.456.7.89/
</VirtualHost>

Инструкции для функции прокси определяются в директиве <VirtualHost>. Тег start также содержит IP-адрес, включая номер порта, на котором Apache, настроенный как обратный прокси, должен прослушивать запросы. Если необходимо указать все IP-адреса, используется символ *, как показано в примере. Информация в теге VirtualHost также отображается в виде директив. В отличие от тега VirtualHost, эти аргументы указывают, как обрабатывать входящие запросы и пакеты ответов. Особенно важны директивы ServerName, ProxyPass и ProxyPassReverse.

  • ServerName: директива ServerName определяет основное имя сервера в интернете. Оно должно быть разрешимым либо через DNS, либо через /etc/hosts. В примере серверу Apache предписано принимать все запросы к domain.tld.
  • ProxyPass: директива ProxyPass определяет целевой адрес для перенаправления. Все запросы, направленные на публичный адрес, перенаправляются обратным прокси на внутренний адрес, указанный в директиве ProxyPass. В примере это будет фиктивный IP 123.456.7.89.
  • ProxyPassReverse: прокси-сервер не только принимает запросы, но и пересылает пакеты ответов с внутреннего сервера клиентам. Чтобы предотвратить доставку этих ответов с неверной информацией в заголовках (а именно с заголовками сервера в фоновом режиме), директива ProxyPassReverse переписывает заголовок ответа сервера так, чтобы он соответствовал прокси-серверу. Внутренний сервер остается анонимным.

Кроме того, есть еще две директивы: ServerAlias и ProxyRequests. Они не обеспечивают базовых функций для прокси-сервера и поэтому являются необязательными.

  • ServerAlias: директива ServerAlias позволяет вам определить альтернативное имя для целевого сервера в дополнение к имени основного сервера.
  • ProxyRequests: директива ProxyRequests с аргументом Off предотвращает использование HTTP-сервера Apache в качестве прямого прокси-сервера для предотвращения возможных злоупотреблений.

Если правила для функции прокси были определены, конфигурация должна быть активирована через терминал:

sudo a2ensite example.conf

HTTP-сервер Apache теперь принимает все запросы к domain.tld или www.domain.tld и перенаправляет их на внутренний сервер с IP 123.456.7.89.

Оцените статью
cdelat.ru
Добавить комментарий