Что такое прокси-сервер? Определение и архитектура
В протоколе HTTP прокси — это выбранный клиентом посредник, обеспечивающий пересылку сообщений. Что на самом деле меняется в канале передачи данных при использовании прямой и обратной прокси, прозрачной, анонимной и элитной прокси, а также что не является прокси.
- Определение из RFC 9110 — посредник, выбранный клиентом для ретрансляции HTTP-сообщений.
- Изменения в заголовках при передаче по каналу — строки запроса в абсолютной форме и заголовки переадресации Via.
- Три уровня анонимности — прозрачное, анонимное и элитное раскрытие заголовков.
- Чем не является прокси-сервер — отличие прокси-серверов от VPN, NAT и брандмауэров.
Используется пользователем для смены IP-адреса при выходе из сети и безопасного просмотра веб-страниц.
Используется веб-сайтами для терминации SSL, балансировки нагрузки и защиты исходного сервера.
Что такое прокси-сервер на самом деле
Прокси-сервер — это не продукт, не функция обеспечения конфиденциальности и не категория программного обеспечения. Это роль в процессе взаимодействия — устройство, которое прерывает ваше соединение и от вашего имени устанавливает собственное соединение с конечным адресатом. Все различия, о которых спорят люди — от «прямого» и «обратного» до «прозрачного» и «элитного» — сводятся к двум техническим вопросам: кто выбрал посредника и какие поля заголовка он переписывает, прежде чем адресат увидит ваш запрос?
Сама спецификация HTTP более строгая, чем маркетинговые представления о ней. В разделе 3.7 документа RFC 9110 перечислены три распространённых типа посредников, и отличает их не программное обеспечение — одна программа может выполнять более одной роли — а положение и выбор.
- Прокси — это, согласно определению в спецификации, агент пересылки сообщений, выбираемый клиентом, как правило, с помощью локальных правил настройки. Клиент знает о его наличии, поскольку сам его и установил.
- Шлюз — который в самом RFC обозначен как «обратный прокси» — выступает в роли исходного сервера для исходящего соединения, но преобразует полученные запросы и перенаправляет их на другой сервер или серверы. Для посетителя он неотличим от настоящего сервера.
- Туннель выступает в качестве «слепого» посредника между двумя соединениями, не изменяя сообщения, и в спецификации прямо указано, что он не считается участником HTTP-обмена данными.
Эта терминология раз и навсегда проясняет большинство недоразумений: прокси-сервер определяется тем, где он расположен и кто его выбрал, а не тем, как он позиционируется. Один и тот же компьютер с одним и тем же программным обеспечением может выступать в качестве прокси-сервера для сотрудников компании и в качестве шлюза для сайта, который он обслуживает.
Одно различие между уровнями стоит отметить в самом начале, а затем больше к нему не возвращаться. HTTP-прокси понимает HTTP-сообщения — он анализирует строку запроса и может переписывать заголовки. SOCKS-прокси, описанный в RFC 1928, работает на уровень ниже и ретранслирует TCP-соединение, а в случае реализации — и UDP, не анализируя содержимое передаваемых данных. О том, на какой из них следует настроить ваш инструмент, рассказывается на отдельной странице: HTTP против SOCKS5. Проверка полномочий говорит на обоих языках, если вы предпочитаете попрактиковаться, а не читать.
Обратите внимание на то, чего нет в этом определении: ни шифрования, ни анонимности, ни безопасности. Это функции, которые могут выполнять отдельные прокси-серверы. Если рассматривать их как неотъемлемую часть значения этого слова, то это прямой путь к покупке неподходящего инструмента.
На этой странице описывается сама роль, а не какой-либо конкретный её вид. Что касается мобильной связи — точки выхода, представляющей собой устройство в мобильной сети, — см. Что такое мобильный прокси?. Генеалогию типов выхода см. в Объяснение типов прокси-серверов.
Что на самом деле меняется в сети
Практически каждый ответ на вопрос о том, как работает прокси-сервер, сводится к описанию промежуточных узлов: ваш запрос попадает сначала сюда, потом туда, а затем — на веб-сайт. Это верно, но практически бесполезно, поскольку не описывает ничего из того, что можно наблюдать. На самом деле можно заметить изменения в трёх аспектах, и все три связаны с самим HTTP-сообщением.
1. Цель запроса меняет форму
Запрос, отправляемый напрямую на сервер, использует то, что в RFC 9112 называется «form origin»: только путь, при этом имя хоста передаётся отдельно в поле Host. Далее в разделе 3.2 сформулировано требование уровня MUST: при отправке запроса на прокси-сервер, за исключением запросов CONNECT или OPTIONS, охватывающих весь сервер, клиент должен отправить целевой URI в абсолютной форме в качестве цели запроса. Полный URL переносится в строку запроса, поскольку прокси-сервер не может предполагать, что он является конечным пунктом назначения.
Direct to the origin (origin-form)
GET /pub/index.html HTTP/1.1
Host: example.org
Through a forward proxy (absolute-form, RFC 9112 s3.2)
GET http://example.org/pub/index.html HTTP/1.1
Host: example.org
Proxy-Authorization: Basic dXNlcjEyMzpzM2NyZXQ=
2. HTTPS вообще не проходит через прокси — он проходит через туннель
Как только схема становится https, описанный выше механизм перестает действовать. Клиент не отправляет запрос, который прокси должен прочитать; он отправляет CONNECT, используя третий формат цели запроса — «authority-form» — состоящий исключительно из имени хоста и порта, разделенных двоеточием. В RFC 9110 описывается дальнейший ход событий: запрос CONNECT требует, чтобы получатель установил туннель к целевому серверу-источнику, идентифицируемому целевым адресом запроса, и, в случае успеха, впоследствии ограничил своё поведение слепым пересыланием данных в обоих направлениях до тех пор, пока туннель не будет закрыт.
Большинство людей неправильно понимают, как это работает. При HTTPS-запросе прокси видит имя хоста назначения, порт, время и количество байтов. Он не видит ваш путь, заголовки, файлы cookie или тело ответа: согласование TLS происходит от конца до конца через туннель, а прокси просто ретранслирует зашифрованный текст, ключа к которому у него нет.
CONNECT example.org:443 HTTP/1.1
Host: example.org
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="proxy"
CONNECT example.org:443 HTTP/1.1
Host: example.org
Proxy-Authorization: Basic dXNlcjEyMzpzM2NyZXQ=
HTTP/1.1 200 Connection Established
<-- TLS handshake and everything after it is opaque to the proxy -->
3. Учетные данные передаются в отдельной паре заголовков
Аутентификация через прокси-сервер намеренно отделена от аутентификации исходного сайта, поскольку одно сообщение может подвергаться проверке двумя разными сторонами, и клиент должен уметь их различать. Прокси-сервер, запрашивающий учетные данные, отвечает кодом 407 «Proxy Authentication Required» с полем «Proxy-Authenticate», и клиент повторяет запрос, передавая поле «Proxy-Authorization»; сайт, запрашивающий учетные данные, отвечает кодом 401 с полем «WWW-Authenticate», и на него отвечают полем «Authorization». Код статуса — это бесплатная диагностика: 407 означает, что ваш прокси отклонил запрос, и конечный сервер так и не получил его; 401 означает, что прокси выполнил свою работу, а конечный сервер отклонил запрос.
Ловушка, скрытая с другой стороны того же самого механизма: команда CONNECT открывает туннель к любому хосту и порту, разрешённым оператором, поэтому посредник, принимающий запросы CONNECT от посторонних на произвольные порты, становится почтовым ретранслятором и внутренним сканером портов для любого, кто его обнаружит. Поэтому в реальных системах CONNECT ограничивается портом 443 или коротким списком разрешенных адресов — это операционная практика, а не правило спецификации, и именно поэтому открытые прокси продолжают появляться.
Всё это происходит на уровне HTTP-сообщений, и именно на этом этапе эта страница намеренно заканчивается. Физический путь, пролегающий «под капотом» — клиент, аппаратное обеспечение, оператор связи, пункт назначения — представляет собой отдельный объект, который шаг за шагом описывается в как работают мобильные прокси.
Один и тот же запрос, три способа
Какая половина этого вопроса относится к вам?
Вопрос «Что такое прокси-сервер?» задают как минимум четыре разных человека, у которых четыре разных проблемы, и лишь некоторым из них нужен один и тот же ответ. Это кратчайший путь от схемы к странице, которая вам действительно нужна.
Прямой прокси против обратного прокси
Это одни и те же механизмы, направленные в противоположные стороны, и топология — не лучший способ их различить: оба находятся посередине, оба замыкают одно соединение и открывают другое. Полезным критерием является принадлежность. Спросите, кто развернул эту систему и чьим интересам она служит, — и ответ станет очевиден.
Прямой прокси выбирается клиентом и работает от его имени: он скрывает клиента от адресата. Обратный прокси-сервер — или, по терминологии спецификации, шлюз — выбирается оператором сайта и работает от имени сайта: он скрывает серверы-источники от клиента. Вы не являетесь его пользователем. Вы — та сторона, от которой он защищает сайт.
Именно поэтому нельзя приобрести обратный прокси-сервер с целью изменения своего IP-адреса — подобные запросы постоянно поступают в почтовые ящики службы поддержки. Nginx, HAProxy и пограничный сервер CDN — все они выполняют функции прокси для сервера. Установка одного из них перед вашим собственным сайтом изменяет то, что посетители могут узнать о вашей инфраструктуре, но абсолютно ничего не меняет в том, что сайт, который вы посещаете, может узнать о вас.
| Недвижимость | Прямой прокси-сервер | Обратный прокси-сервер | Туннель |
|---|---|---|---|
| Название в RFC 9110 | Прокси | Шлюз, также известный как обратный прокси | Туннель |
| Кто его выбирает и настраивает | Клиент, как правило, посредством локальных правил настройки | Оператор сайта, перед своими собственными серверами | Ни то, ни другое — в описании указано, что он не является участником разговора |
| Адрес которого скрыт | Клиента, из пункта назначения | «Серверы происхождения», со стороны посетителя | Ни у кого — он передаёт байты и скрывает только их содержимое |
| Запрос-цель в сети | Абсолютный формат: GET http://example.org/pub/index.html | Исходная форма в том виде, в каком она была получена: GET /pub/index.html плюс Host | Форма авторизации: CONNECT example.org:443 |
| Знает ли клиент, что это там есть? | Да, если настроено; нет, если трафик перехватывается в фоновом режиме | Нет — она считает, что общается с самим источником | Да — именно клиент запросил создание туннеля |
| Где вы с ним встречаетесь | Корпоративный прокси-сервер для выхода в Интернет или приобретенный вами прокси-порт | Nginx, HAProxy, пограничный узел CDN, расположенный перед практически каждым крупным сайтом | Каждый HTTPS-запрос, который вы отправляете через прокси-сервер |
Один из строк этой таблицы заслуживает отдельного предложения, поскольку именно в ней сходятся две части этой статьи. Прямой прокси не обязательно должен выбираться вами лично — его достаточно выбрать на стороне клиента. Компания, которая направляет трафик каждой рабочей станции через исходящий прокси-сервер, развернула прокси-сервер перенаправления, на использование которого никто из пользователей не давал согласия, и причина, по которой это воспринимается скорее как слежка, чем как услуга, заключается именно в том, что лояльность и выбор разошлись.
«Transparent», «Anonymous» и «Elite» — это типы поведения заголовков
В списках прокси-серверов три уровня анонимности представляются так, будто это маркировка качества оборудования. На самом деле это вовсе не так. Речь идет об описании того, как выглядят два поля заголовка к моменту, когда сообщение достигает пункта назначения, и их можно измерить примерно за десять секунд.
Первое поле — «Via». В разделе 7.6.3 стандарта RFC 9110 его значение определяется как один или несколько идентификаторов протокола и получателя, каждый из которых обозначает отдельного посредника, добавляемого в порядке следования сообщения. Таким образом, его наличие в пункте назначения является доказательством того, что сообщение прошло через как минимум одного посредника — это посредник, сообщающий о себе по замыслу, а не утечка.
Во втором поле указывается исходный адрес. Давно устоявшейся конвенцией является поле X-Forwarded-For, однако RFC 7239 — «Forwarded HTTP Extension» (расширение HTTP «Forwarded»), документ, находящийся в процессе стандартизации с июня 2014 года, — заменил его и аналогичные поля единым полем «Forwarded», содержащим четыре параметра: «for», «by», «host» и «proto». В том же документе необычно прямо говорится о важности этого вопроса: отмечается, что адрес клиента многие люди считают конфиденциальной информацией и что в конфигурации по умолчанию для параметров «by» и «for» должны использоваться зашифрованные идентификаторы.
Transparent Via: 1.1 proxy.example.net
Forwarded: for=203.0.113.47 <-- your address, forwarded intact
Anonymous Via: 1.1 proxy.example.net <-- an intermediary, but not who
(no Forwarded, no X-Forwarded-For)
Elite (neither field present) <-- nothing in the headers to see
К этому последнему замечанию стоит отнестись со всей серьёзностью. Поскольку уровни классификации не стандартизированы, указание «элитный» в списке представляет собой утверждение о чужом программном обеспечении, не подкреплённое никакими авторитетными доказательствами. Однако это утверждение поддаётся проверке, и для этого необходимо выполнить четыре шага:
Программа проверки прокси-серверов PXM2 выполняет именно этот тест за вас по обоим протоколам и сообщает о том, что поступило, а не о том, что было обещано.
Удаление заголовков — это лишь половина того, что может увидеть пункт назначения. Сам адрес выхода по-прежнему принадлежит какой-то сети, и поиск маршрута по нему возвращает идентификатор этой сети — именно так сайт отличает хостинг-провайдера от оператора связи, обслуживающего конечных пользователей, не читая ни одного заголовка. Чистый набор заголовков для адреса, указывающего на дата-центр, — это не та маскировка, какой она кажется. Прокси-серверы центров обработки данных и мобильные прокси-серверы полностью охватывает эту ось.
Четыре задачи, для выполнения которых на самом деле задействуются прокси-серверы
Если отбросить категории поставщиков и списки преимуществ, то прокси-серверы используются для решения четырёх задач. Любое реальное развертывание представляет собой ту или иную комбинацию этих задач, и то, какая именно комбинация доступна вам, полностью зависит от роли — именно поэтому честный подход к их представлению заключается в том, чтобы показывать их в контексте ролей, способных их выполнять, а не в виде меню, из которого можно выбирать.
Кэш
Использовать сохраненную копию вместо повторного запроса к исходному серверу. Это самая давняя причина существования прокси-серверов, и до сих пор именно по ней запрос через прокси иногда выполняется быстрее, чем прямой. Доступно для обеих ролей.
Обеспечить соблюдение политики
Фильтруйте, регистрируйте и блокируйте исходящий трафик в сети, которой вы управляете. Практически всегда речь идет о прокси-сервере, работающем в режиме перенаправления, на использование которого пользователи, находящиеся за ним, никогда не давали согласия — это случай прозрачного перехвата.
Распределить нагрузку и завершить соединение TLS
Распределяйте запросы по пулу серверов и управляйте сертификатами из одного места. Это исключительно задача обратного прокси — версии для клиентской стороны не существует.
Идентичность замещения
Указать адрес назначения, отличный от адреса клиента. Задача прокси-сервера перенаправления — единственная из четырёх, ради которой пользователи специально приобретают прокси-порт.
Если прочитать этот список, станет понятно, почему вокруг этого термина столько шума. Две из четырёх функций — кэширование и распределение нагрузки — не имеют никакого отношения к сокрытию личности, поэтому сетевые инженеры и люди, приобретающие IP-адреса, часто в середине разговора обнаруживают, что они использовали одно и то же слово для обозначения разных устройств. Только четвёртая функция — это то, что ищут большинство людей, заходя на эту страницу, и именно в этом случае важным выбором является не прокси, а сеть, в которой находится выходной IP-адрес. Каждый прокси PXM2 представляет собой прокси-сервер перенаправления, выполняющий эту четвёртую задачу через реальное соединение с оператором 4G или 5G; если это та часть вопроса, которая вас интересует, то список активных прокси-серверов это следующий шаг, и Как настроить мобильный прокси — это пошаговое руководство по настройке.
Чем не является прокси-сервер
Большую часть оставшейся путаницы объясняют четыре исправления, и каждое из них связано с тем, что данную технологию ошибочно принимают за соседнюю.
- Прокси — это не шифрование. Обычный HTTP-прокси пересылает ваш запрос в открытом виде и может просматривать и изменять любую его часть. В случае HTTPS-запроса конфиденциальность обеспечивается протоколом TLS, работающим по принципу «от конца до конца» через весь туннель, что обеспечивает вам такую же защиту, как и в случае полного отсутствия прокси в пути. Прокси никак не способствует этому.
- Прокси — это не VPN. Прокси настраивается для каждого приложения отдельно: ваш скрейпер использует его, а ваш почтовый клиент — нет, и оба приложения выходят в сеть через разные адреса, при этом ни одно из них не работает некорректно. VPN создает виртуальный сетевой интерфейс на уровне операционной системы и перехватывает весь трафик. Различные сферы применения, различные режимы сбоев, различные правильные решения. Полное сравнение можно найти здесь.
- Прокси-сервер — это не NAT и не брандмауэр. Оба эти механизма работают ниже прикладного уровня. Ни один из них не анализирует цель запроса, ни один не знает, что такое поле «Host», и ни один не может добавить заголовок «Via», поскольку ни один из них вообще не обрабатывает HTTP. Маршрутизатор, переписывающий адреса, выполняет действие, структурно отличающееся от действий посредника, считывающего ваши сообщения.
- Прокси — это не анонимность. Это изменяет адрес, на который отправляются журналы. При этом не меняется ничто в файлах cookie, отправляемых вашим клиентом, ни «отпечаток», который предоставляет ваш стек TLS, ни учетная запись, в которую вы войдете через тридцать секунд. Смена адреса при остальных параметрах клиента, остающихся неизменными, — это просто переименование, а не маскировка.
Ничто из этого не делает прокси-серверы слабыми. Это делает их специфическими. Прокси-сервер — это посредник, который завершает ваше соединение и открывает собственное, и как только вы узнаете, кто его выбрал и какие поля он перезаписывает, вы узнаете всё, что может сказать вам сам термин — остальное сводится к вопросу о том, в какой сети находится удалённый конец.
Узнайте больше о настоящих мобильных прокси-серверах
Нужен прокси-сервер с «чистым» адресом сотового оператора? PXM2 использует выделенные модемы 4G/5G:
Великобритания
Испания
Индия
Часто задаваемые вопросы
В чём заключается основное назначение прокси-сервера?
Прокси-сервер выступает в качестве промежуточного моста между клиентским приложением (например, веб-браузером или автоматизированным скриптом) и целевыми веб-серверами. Он перехватывает исходящие сетевые запросы, заменяет локальный IP-адрес клиента на свой собственный выходной IP-адрес, пересылает запрос на целевой сервер и возвращает исходный ответ клиенту.
В чём заключается разница между анонимным прокси-сервером и элитным прокси-сервером?
Анонимный прокси скрывает ваш реальный IP-адрес клиента, но сообщает целевому серверу об использовании прокси (как правило, путем включения таких заголовков, как Via или Proxy-Connection). Элитный (или высокоанонимный) прокси скрывает ваш реальный IP-адрес и полностью исключает любые заголовки, идентифицирующие прокси, благодаря чему исходящее соединение выглядит так же, как обычное прямое соединение пользователя.
Может ли прокси-сервер анализировать зашифрованный HTTPS-трафик?
Стандартные прокси-серверы, обрабатывающие HTTPS, используют метод туннелирования HTTP CONNECT, который открывает непрозрачный сквозной байтовый канал TCP. В этом режиме прокси-сервер не может расшифровывать, анализировать или изменять полезные данные, зашифрованные с помощью TLS. Только корпоративные прокси с функцией «проверки SSL» — для которых требуется установка на клиентском компьютере настраиваемого корневого центра сертификации — могут выполнять дешифрование TLS по схеме «человек посередине».
Обеспечивает ли использование прокси-сервера полную анонимность в Интернете?
Нет. Хотя прокси-сервер заменяет ваш IP-адрес на сетевом уровне, веб-серверы по-прежнему могут идентифицировать вас с помощью отпечатков на прикладном уровне, в том числе HTTP-куки, отпечатков «client hello» TLS (JA3/JA4), отпечатков браузера на основе canvas и WebGL, а также утечек DNS при использовании некорректно настроенных протоколов.
В каких случаях следует использовать мобильный прокси вместо стандартного прокси из дата-центра?
Используйте мобильный прокси, если целевой сервис применяет сложные средства защиты от ботов, списки блокировки по IP-репутации или геоблокировку мобильных приложений. Мобильные прокси направляют трафик через реальные SIM-карты сотовой связи 4G/5G и используют IP-пулы CGNAT операторов связи, обеспечивая максимальный уровень доверия в Интернете.
Связанные руководства
Основы работы с прокси-серверами
Основные руководства по мобильным прокси-серверам
Используйте «Четвёртую работу» на практике
Если вам нужен был прокси-сервер, маскирующий вашу личность, PXM2 использует выделенные модемы 4G и 5G с неограниченной пропускной способностью — с реальными адресами операторов связи, а также поддержкой протоколов HTTP и SOCKS5 на одной и той же паре портов.
Получить мобильный прокси