
Безопасная работа веб-серверов или серверов 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.