Прокси-сервер
Прокси-сервер (англ. proxy server) — это термин в компьютерных сетях, обозначающий серверное приложение, которое действует как посредник между клиентом, запрашивающим ресурс, и сервером, предоставляющим этот ресурс[1].
Вместо того чтобы подключаться напрямую к серверу, который может выполнить запрос на получение ресурса (например, файла или веб-страницы), клиент перенаправляет запрос прокси-серверу, который оценивает запрос и осуществляет необходимые сетевые транзакции. Это служит способом упростить или контролировать сложность запроса, а также обеспечивает дополнительные преимущества, такие как балансировка нагрузки, обеспечение конфиденциальности или безопасность. Прокси были разработаны для того, чтобы добавить структуру и инкапсуляцию в распределённые системы[2]. Прокси-сервер функционирует от имени клиента при запросе услуги, потенциально маскируя истинное происхождение запроса для сервера-ресурса.
Виды
Прокси-сервер может находиться на локальном компьютере пользователя или в любой точке между компьютером пользователя и конечными серверами в Интернете. Прокси, который передаёт неизменённые запросы и ответы, обычно называется шлюзом или туннелирующим прокси. Прямой прокси — это прокси, ориентированный на Интернет, используемый для получения данных из различных источников (чаще всего — из любого места в интернете). Обратный прокси обычно используется внутри корпоративной инфраструктуры как фронт-энд, контролирующий и защищающий доступ к серверу в частной сети. Обратные прокси обычно также выполняют задачи балансировки нагрузки, аутентификации, расшифровки, кэширования и др[3].
Открытый прокси — это прокси-сервер, к которому может получить доступ любой пользователь Интернета. В 2008 году эксперт по сетевой безопасности Гордон Лион оценивал, что в Интернете действует «несколько сотен тысяч» открытых прокси[4].
- Анонимный прокси — сервер, который выдаёт себя за прокси-сервер, но не раскрывает исходный IP-адрес клиента. Хотя такие серверы легко обнаружить, они могут быть полезны для пользователей, желающих скрыть свой IP-адрес.
- Прозрачный прокси — сервер, который явно идентифицирует себя как прокси, а с помощью HTTP-заголовков, таких как
X-Forwarded-For, исходный IP-адрес клиента также может быть получен. Основное преимущество — возможность кэширования сайтов для ускорения их загрузки.
Обратный прокси (или суррогат) — это прокси-сервер, который для клиентов выглядит как обычный сервер. Обратный прокси передаёт запросы на один или несколько обычных серверов, которые и обрабатывают запрос. Ответ возвращается клиенту так, как будто он получен напрямую от прокси-сервера, что скрывает факт обращения к исходному серверу[5]. Обратные прокси устанавливаются рядом с веб-серверами, и весь трафик, направленный из Интернета к этим серверам, проходит через прокси. Термин «обратный» появился в противовес прямому прокси: обратный прокси находится ближе к веб-серверу и обслуживает ограниченный набор сайтов. Причины использования обратных прокси могут включать:
- Шифрование/ускорение SSL: когда создаются защищённые сайты, шифрование часто выполняет не сам сервер, а обратный прокси с аппаратным ускорителем SSL. Один «SSL-прокси» может обеспечивать шифрование для многих хостов, хотя все они должны использовать общее доменное имя или IP-адрес для SSL-соединений. Частично это решается с помощью расширений SubjectAltName или SNI.
- Балансировка нагрузки: распределение нагрузки между несколькими серверами.
- Обслуживание/кэширование статического контента: кэширование изображений и других ресурсов на уровне прокси.
- Сжатие данных: ускорение загрузки путём сжатия.
- Spoon feeding: сокращение использования ресурсов на серверах за счёт кэширования и постепенной отдачи клиенту.
- Безопасность: дополнительный уровень защиты от некоторых атак на ОС и веб-серверы.
- Публикация экстрнета: организация доступа из Интернета во внутреннюю сеть через промежуточный защищённый сервер.
Прямой прокси осуществляет маршрутизацию трафика между клиентами и внешними системами, позволяя регулировать трафик согласно политике, изменять и маскировать IP-адреса клиентов, реализовать протоколы безопасности и блокировать нежелательный трафик, что повышает безопасность внутренней сети[6]. Обратный прокси используется для защиты серверов: он принимает запросы от клиентов, передаёт их на один из множества серверов и возвращает клиенту результат конкретного сервера, при этом скрывая внутреннюю структуру инфраструктуры.
Назначения прокси-серверов
Контент-фильтрующий прокси-сервер обеспечивает административный контроль за содержимым, проходящим через прокси. Обычно применяется в организациях и образовательных учреждениях для соблюдения правил использования сети.
Такие прокси часто поддерживают аутентификацию пользователей и ведут логи, позволяющие отслеживать посещённые адреса и статистику использования трафика. Также возможна интеграция с антивирусными решениями на базе демонов или ICAP для сканирования входящего трафика на вредоносный код.
Во многих рабочих и образовательных сетях, а также на уровне государства, реализуют блокировку нежелательных сайтов и сервисов, используя прокси-контент-фильтры или расширения кэш-протоколов типа ICAP.
Запросы могут фильтроваться по чёрным спискам URL или DNS, по регулярным выражениям, по типу контента (MIME), по ключевым словам и т. д. Чёрные списки предоставляются компаниями, специализирующимися на фильтрации (например, для категорий: порнография, азартные игры, шопинг, соцсети и др.).
После проверки прокси получает контент (если URL не заблокирован) и может применить дополнительные фильтры к возвращаемому ответу (например, фильтр изображений или нежелательной лексики). В случае отказа возвращается ошибка HTTP-запроса.
Большинство компаний используют интернет-сканеры-роботы для массового анализа контента, а корректировки базы выполняются вручную по жалобам.
Некоторые прокси анализируют исходящий контент (например, для предотвращения утечки данных или вредоносного ПО).
В случае HTTPS и TLS прокси для фильтрации трафика не могут анализировать содержимое защищённых соединений, если цепочка доверия SSL/TLS не была изменена на клиенте. В управляемых организациях возможно доверие прокси-сертификату для анализа трафика — по сути, это атака посредника с согласия клиента.
Если сервер ограничивает доступ по региону или IP-адресу, использовать прокси в нужной стране можно для обхода этой блокировки[7]. В целом, прокси — основной способ обхода интернет-цензуры, хотя менее 3 % пользователей Интернета используют любые средства обхода[7].
Бизнес может использовать прокси-сети для анализа доступности ресурсов по всему миру[8].
Иногда для обхода чёрных списков используют специальные сторонние прокси-сервисы[9].
Прокси может быть установлен для перехвата трафика между клиентом и интернетом. Всё содержимое, в том числе пароли и куки, может быть проанализировано оператором прокси. Поэтому чувствительные данные всегда должны передаваться только через защищённое соединение (SSL).
Цепочка прокси, скрывающих данные о запросе, усложняет отслеживание пользователя конечным сервером, но увеличивает следы на промежуточных узлах. Неизвестные политики промежуточных серверов могут привести к ложному ощущению конфиденциальности.
Часто IP-адреса известных злоупотреблением прокси вносятся в чёрные списки сайтов и форумов, что мешает работе прокси для некоторых пользователей.
Кэширующий прокси ускоряет обработку запросов, отдавая сохранённый ранее контент при повторном обращении того же клиента (или других пользователей)[10]. Это позволяет крупным организациям снижать нагрузку на внешние каналы и экономить трафик[11]. Ошибки реализации кэширующих прокси могут приводить к сбоям аутентификации.
Прокси с улучшением производительности (Performance Enhancing Proxy, PEP) ориентированы на компенсацию проблем каналов связи, например, высокого времени отклика или потерь пакетов, и часто используются в мобильных сетях.
Трансляционный прокси применяется для локализации сайтов под разные рынки: трафик пользователей направляется через прокси, который заменяет исходное содержимое на переведённое перед возвратом ответа.
Анонимные прокси (иногда называемые веб-прокси) пытаются скрыть личность пользователя при просмотре сайтов. Анонимайзеры бывают разных видов. При работе через анонимный прокси целевой сервер не узнаёт адрес пользователя, но доверие между прокси и клиентом остаётся обязательным. Некоторые прокси требуют авторизации — тогда организация может отслеживать действия пользователя. Высокоанонимные прокси скрывают сам факт использования прокси для сайт, но могут быть раскрыты по оставшимся cookie.
Рекламодатели используют прокси для проверки и контроля геотаргетированной рекламы. Использование прокси, находящихся в нужной стране или городе, позволяет тестировать показы рекламы локальным пользователям[12].
Прокси может скрывать внутреннюю структуру сети организации с помощью трансляции сетевых адресов, что усиливает её защиту[13].
Неправильно настроенный прокси может, наоборот, дать несанкционированный доступ к изолированной сети[4].
Прокси позволяют сайтам делать запросы к внешним ресурсам (например, изображениям), когда действует политика одного источника и браузер не может напрямую получить содержимое с другого домена.
Биржи вторичного рынка используют прокси для обхода ограничений при покупке дефицитных товаров онлайн (например, лимитированных кроссовок или билетов)[14].
Реализации прокси-серверов
Веб-прокси пересылают HTTP-запросы. Запрос клиента повторяет обычный HTTP-запрос, но полный URL указывается полностью.
Пример HTTP-запроса:
GET https://en.wikipedia.org/wiki/Proxy_server HTTP/1.1
Proxy-Authorization: Basic encoded-credentials
Accept: text/html
Прокси-сервер делает внешний HTTP-запрос и возвращает ответ клиенту:
HTTP/1.1 200 OK
Content-Type: text/html; charset UTF-8
Некоторые веб-прокси поддерживают метод HTTP CONNECT для передачи произвольных данных (обычно только через порт 443 для поддержки HTTPS).
Примеры: Apache (с модулями mod_proxy или Traffic Server), HAProxy, IIS (с Application Request Routing), Nginx, Privoxy, Squid, Varnish (только обратный прокси), WinGate, Ziproxy, Tinyproxy, RabbIT, Polipo.
Проблема сложных или многочисленных прокси решается протоколом Proxy auto-config (PAC-файл).
Протокол SOCKS также пересылает произвольные данные после начальной фазы соединения, аналогично HTTP CONNECT.
Также известен как перехватывающий прокси, inline-прокси или forced proxy, осуществляет перехват обычного трафика верхнего уровня (уровень приложений ОСИ) без необходимости допнастройки клиентов. Для клиента прокси прозрачен; обычно он располагается между клиентом и интернетом и выполняет часть функций шлюза или маршрутизатора.
По RFC 2616 (HTTP/1.1):
> «Прозрачный прокси» — это прокси, который не изменяет запрос/ответ, за исключением, необходимых для аутентификации и идентификации прокси. > «Непрозрачный прокси» — модифицирует трафик с целью предоставления дополнительных сервисов (групповые аннотации, изменение медиаконтента, фильтрация протоколов, анонимизация).
TCP Intercept — функция фильтрации и защиты TCP-серверов от SYN-flood атак типа «отказ в обслуживании». Рассчитана только на IP-трафик.
В 2009 году была опубликована уязвимость, связанная с прозрачными прокси (Роберт Аугер)[15], CERT опубликовал рекомендации[16] по множеству видов прокси.
Перехватывающие прокси широко используются в организациях для фильтрации доступа и снижения админнагрузки, поскольку клиентские браузеры не требуют настройки. Эта функция может быть заменена средствами групповой политики Active Directory или автоматической настройкой прокси через DHCP.
Также перехватывающие прокси могут применяться у провайдеров для кэширования данных и экономии пропускной способности на ограниченных каналах.
Перехват TCP-соединения создаёт ряд затруднений: необходимо отдельно передавать исходный IP и порт на прокси (что не всегда возможно, если шлюз и прокси на разных устройствах). Возникают уязвимости типа межсайтовых скриптовых атак. Это можно решить только при глубоких интеграциях пакетов и приложений.
Проблемы возникают и с аутентификацией HTTP, особенно при connection-oriented протоколах (например, NTLM): браузер считает, что соединяется с сервером напрямую.
Также отражённая схема вызывает сложности при кэшировании клиентских запросов.
Если firewall/прокси работают на одном хосте (например, Microsoft TMG, WinGate), передача информации об исходном соединении может быть реализована любым способом. Перехват возможен с помощью протокола Cisco WCCP, манипуляций с GRE-туннелями или MAC-адресами.
В современных ОС семейства Linux/FreeBSD применяется механизм TPROXY для прозрачной подмены исходящего трафика.
Обнаружить перехватывающий прокси можно по следующим признакам:
- Расхождение между внешним IP клиента и тем, что видит внешний сайт (можно посмотреть IP-шоу сайты).
- Сравнение результатов online-чекеров по HTTPS и HTTP.
- Анализ маршрутов для HTTP и других протоколов (например, traceroute на разные порты)[17].
- Попытка соединения с несуществующим IP — если прокси присутствует, он по-разному отвечает на ошибку.
- Использование Flash/Java-апплетов для отправки HTTP-запросов и обнаружения адреса.
CGI-прокси принимает адрес целевого сайта через веб-форму, отправляет запрос и возвращает результат пользователю. Удобен для обхода ограничений на уровне сетевых настроек и реализуется как скрипт (например, CGIProxy, Glype или PHProxy)[18]. В 2020-х количество популярных CGI-прокси уменьшилось из-за распространения VPN, хотя всё ещё работает несколько сотен онлайн-прокси[19].
Дают возможность получить доступ к ресурсу, добавляя к адресу сайта имя прокси, например: en.wikipedia.org.SuffixProxy.com. Не обеспечивают высокий уровень анонимности; используются в основном для обхода фильтров.
Tor — система для обеспечения анонимности в интернете. Tor-трафик проходит через сеть добровольных серверов по принципу «луковой маршрутизации» ([onion routing]): исходные данные шифруются многократно и поочерёдно снимаются в каждом узле цепочки[20].
I2P — анонимная сеть, реализующая «чесночную маршрутизацию» (garlic routing), улучшая надёжность и анонимность по сравнению с onion routing. Все данные распределяются через добровольные маршрутизаторы и надёжно шифруются.
Прокси функционирует на уровне приложений (L7 по OSI), тогда как NAT — на сетевом уровне (L3). NAT проще и менее ресурсоёмок, но менее гибок. Прокси-фильтрация требует явного указания прокси в настройках клиента.
Прокси для DNS принимает запросы с локальной сети, пересылает их к внешнему серверу, может кэшировать DNS-ответы.
Некоторые клиентские программы используют специальные «проксификаторы», которые «SOCKS-ифицируют» соединения для взаимодействия через SOCKS-прокси[21].
Резидентный прокси использует реальные IP-адреса, выданные провайдерами связи физическим устройствам (ПК, смартфонам). Такой прокси маскирует пользователя под «живого» абонента из нужного региона[22]. Резидентные прокси могут быть с ротацией (backconnect proxies): на каждый запрос выбирается новый узел[23].
Ряд таких прокси работает на скомпрометированных устройствах, включая IoT, что даёт мошенникам возможности для фишинга, рассылки вредоносных программ и др[24].


