В интернете часто можно встретить заявления, что прокси-сервер служит для ускорения загрузки страниц за счет кэширования содержимого страниц, DNS и т.п. На самом деле это одно из полезных свойств прокси-серверов, но не главное и присущее далеко не всем серверам.
Прокси сервер - это промежуточный компьютер, который является посредником ("proxy" - посредник) между Вашим компьютером и интернетом. Через него проходят все Ваши обращения в Internet. Proxy их обрабатывает, и результаты (скаченные из Internet файлы) передает Вам. Proxy-сервер может многое. Он способен: ускорить Вашу работу с Internet; сделать Ваше путешествие по Сети анониным; позволить входить в чаты, даже если Вас заблокировали; помочь посмотреть те сайты, к которым закрыл доступ Ваш системный администратор; и многое другое. Вы можете спросить "А зачем мне нужен какой-то там прокси? Мне и так хорошо". Действительно, еще с детства мы знаем, что кратчайшее расстояние между двумя точками - прямая Но хитрость состоит в том, что нам-то нужно не кратчайшее расстояние, а наилучшая скорость связи. А высокая скорость не обязательно является следствием кратчайшего расстояния. Представьте себе следующую ситуацию: Вы живете в городе "A", и хотите попасть в далекий город "B" (или к Вам хотят приехать из этого города). Вы можете воспользоваться обычным транспортом - автобусом или железной дорогой. Но ехать таким транспортом до места назначения очень долго. А если Вы с помощью автобуса доберетесь до другого города - "C", где есть аэропорт, то самолетом долетите гораздо быстрее до Вашего пункта назначения (города "B"). Причем город "C" может находиться еще дальше от "B", чем Ваш город "A". Попросту говоря: "A" >>>>(поездом)>>>> "B" получается дольше, чем "A" >>>(поездом)>>> "C" >>>(самолетом)>>>>"B" Аналогичная схема используется и тут: Вы соединяетесь с proxy-сервером (поездом из "A" в "C"), а прокси сервер, используя выделенную линию или оптоволокно ("самолет"), передает или получает данные с web-сервера (из "C" в "B"). То есть связь без прокси реализуется по следующей схеме: Ваш компьютер >>>> web-сайты А при использовании proxy-сервера схема выглядит так: Ваш компьютер >>>> proxy >>>> web-сайты
Из многочисленных значений английского слова proxy (см. Dictionary:proxy ) в данном контексте применимы такие: «доверенное лицо», «полномочный представитель». То есть некто, кто действует от вашего имени по вашему поручению вместо вас. В компьютерах прокси – это программа, которая передает запросы ваших программ (браузеров и других) в интернет, получает ответы и передает их обратно. Необходимость в такой программе возникает обычно, если с пользовательского компьютера невозможно работать в интернете непосредственно напрямую из-за того, что у него нет прямого подключения к интернету (модема, например), но есть на другом компьютере в его сети. Тогда на этом другом компьютере ставят программу прокси, а все остальные компьютеры в локальной сети настраивают таким образом, чтобы работа велась через прокси. Сейчас через прокси умеют работать практически все популярные интернет-программы. Это значит что все пользователи локальной сети могут получить полноценный доступ в интернет, если хотя бы один из них этот доступ уже имеет.
Возможна ли работа всех компьютеров локальной сети в интернете без прокси? Да, возможна. Когда-то все так работали Но такая работа требует выполнения определенных дополнительных условий и имеет свои минусы в сравнении с работой через прокси. Какие условия: каждому компьютеру должен быть выдан персональный IP-адрес в сети интернет, и построена схема маршрутизации так, что пакеты будут попадать именно на этот компьютер. Это невозможно сделать без участия провайдера. Провайдеры идут на это, но, как правило, за отдельную плату. Например, $5 за каждый IP в месяц. Это хлопотно, дорого и снижает уровень безопасности вцелом: каждый компьютер вашей сети станет потенциальной мишенью хакеров, вирусных атак и прочих «прелестей» интернета. При правильной настройке компьютеров это не очень страшно, но рядовые пользователи не склонны следить за безопасностью своих компьютеров, значит будут дополнительные хлопоты у администраторов сети. Возможностей контролировать работу пользователей у администратора будет немного, так как система децентрализована. Кстати, при таком способе подключения тоже нужна программа-посредник на том компьютере, который непосредственно подключен к интернету. Но при наличии реальных IP-адресов эта программа – обычный роутер (маршрутизатор) IP-пакетов, он является частью операционной системы. И к этой программе название «прокси» не применяют. Важное отличие маршрутизатора от прокси – при использовании маршрутизатора IP-пакеты остаются без изменений, в них сохраняются исходные адреса компьютеров ЛС. А прокси всегда работает от своего адреса, а адреса клиентов не передаются, т.к. недоступны из интернета. Маршрутизатор, меняющий адреса, уже является прокси (его называют NAT-proxy, NAT = network address translation).
Какие бывают виды прокси? Упомянутый выше NAT-proxy – самый простой вид прокси. Теперь он даже входит в состав Windows 2000 и Windows XP. Там он называется «Общий доступ к подключению интернета» и включается галочкой в свойствах модемного соединения. Этот прокси работает прозрачно для пользователя, никаких специальных настроек в программах не требуется. Но на этом удобства этого прокси заканчиваются. Влиять на работу «общего доступа» Windows (например, ограничивать список доступных сайтов для отдельных пользователей) вы не сможете. Другие NAT-proxy могут быть более гибкими, но их общая проблема – универсальность. Они не «вникают» в тонкости тех прикладных протоколов, которые через себя пропускают, поэтому и не имеют средств управления ими. Специализированные прокси (для каждого протокола интернета свой вид прокси) имеют ряд преимуществ и с точки зрения администраторов, и с точки зрения пользователей. Ниже перечислены виды специализированных прокси.
HTTP-прокси – самый распространенный. Он предназначен для организации работы браузеров и других программ, использующих протокол HTTP. Браузер передает прокси-серверу URL ресурса, прокси-сервер получает его с запрашиваемого веб-сервера (или с другого прокси-сервера) и отдает браузеру. У HTTP-прокси широкие возможности при выполнении запросов:
Можно сохранять полученные файлы на диске сервера. Впоследствии, если запрашиваемый файл уже скачивался, то можно выдать его с диска без обращения в интернет – увеличивается скорость и экономится внешний трафик (который может быть платным). Эта опция называется кэшированием – именно её очень любят администраторы и пользователи – настолько, что считают её главной функцией прокси. Однако приводимые оценки экономии (в описаниях встречалось от 30 до 60%) слишком оптимистичны. На деле получается не более 10-15% – современный интернет очень динамичен, страницы часто меняются, зависят от работающего с ними пользователя и т.д. – такие данные кэшировать нельзя, веб-серверы обычно вставляют в HTTP-заголовки специальные указания об этом, чтобы браузеры и прокси имели это в виду. Хотя многие прокси-серверы можно настроить так, чтобы эти указания частично игнорировались – например, перечитывать страницу не чаще одного раза в день.
Можно ограничивать доступ к ресурсам. Например, завести «черный список» сайтов, на которые прокси не будет пускать пользователей (или определенную часть пользователей, или в определенное время и т.д.). Ограничения можно реализовать по-разному. Можно просто не выдавать ресурс – например, выдавая вместо него страницу «запрещено администратором» или «не найдено». Можно спрашивать пароль и авторизованных пользователей допускать к просмотру. Можно, не спрашивая пароля, принимать решение на основании адреса или имени компьютера пользователя. Условия и действия в принципе могут быть сколь угодно сложными (не во всех прокси, но в нашем точно .
Можно выдавать не тот ресурс, который запрашивается браузером. Например, вместо рекламных баннеров и счетчиков показывать пользователям прозрачные картинки, не нарушающие дизайн сайта, но существенно экономящие время и трафик за счет исключения загрузки картинок извне.
Можно ограничивать скорость работы для отдельных пользователей, групп или ресурсов. Например, установить правило, чтобы файлы *.mp3 качались на скорости не более 1кб/сек, чтобы предотвратить забивание вашего интернет-канала трафиком меломанов, но не лишать их полностью этого удовольствия. Эта возможность, к сожалению, есть не во всех прокси. В Eproxy эта возможность есть. Она реализуется дополнением TrafC, который кроме ограничения пропускной способности (скорости) может ограничивать и суммарный трафик.
Ведутся журналы работы прокси – можно подсчитывать трафик за заданный период, по заданному пользователю, выяснять популярность тех или иных ресурсов и т.д.
Можно маршрутизировать веб-запросы – например, часть направлять напрямую, часть через другие прокси (прокси провайдера, спутниковые прокси и т.д.). Это тоже помогает эффективнее управлять стоимостью трафика и скоростью работы прокси вцелом.
Мы перечислили основные, но не все возможности HTTP-proxy. Но уже одних перечисленных достаточно чтобы убедиться, что без HTTP-proxy в серьезной сети не обойтись
FTP-прокси бывает двух основных видов в зависимости от протокола работы самого прокси. С ftp-серверами этот прокси, конечно, всегда работает по протоколу FTP. А вот с клиентскими программами – браузерами и ftp-клиентами (CuteFTP, FAR, и др.) прокси может работать как по FTP, так и по HTTP. Второй способ удобнее для браузеров, т.к. исторически является для них «родным». Браузер запрашивает ресурс у прокси, указывая протокол целевого сервера в URL – http или ftp. В зависимости от этого прокси выбирает протокол работы с целевым сервером, а протокол работы с браузером не меняется – HTTP. Поэтому, как правило, функцию работы с FTP-серверами также вставляют в HTTP-прокси, т.е. HTTP-прокси, описанный выше, обычно с одинаковым успехом работает как с HTTP, так и с FTP-серверами. Но при «конвертации» протоколов FTP<->HTTP теряется часть полезных функций протокола FTP. Поэтому специализированные ftp-клиенты предпочитают и специальный прокси, работающий с обеими сторонами по FTP. В Eserv и Eproxy мы называем этот прокси FTP-gate, чтобы подчеркнуть отличие от FTP-прокси внутри HTTP-прокси. Также этот прокси называется в некоторых ftp-клиентах. Хотя встречаются и вносящие путаницу названия. Например, в программе CuteFTP FTP-gate называют firewall, хотя FireWall в общем случае – это вообще не прокси, а фактически программа обратного назначения – не для подключения к интернету, а для изоляции от него Для прокси в FireWall оставляют специальные «дыры». FTP-gate поддерживают различные способы указания в FTP-протоколе целевого сервера, с которым FTP-клиент хочет работать, в настройке FTP-клиентов обычно предлагается выбор этого способа, например как показано на рисунке ниже:
Здесь USER user@site, OPEN site, и т.д. – способ указания сервера, с которым производится работа. Такое многообразие связано с тем, что нет общепринятого стандарта на этот вид прокси, и применяются такие хитрые добавки к стандартным командам FTP-протокола.
HTTPS-прокси – фактически часть HTTP-прокси. S в названии означает “secure”, т.е. безопасный. Не смотря на то, что программно это часть HTTP-прокси, обычно HTTPS выделяют в отдельную категорию (и есть отдельное поле для него в настройке браузеров). Обычно этот протокол – безопасный HTTP – применяют, когда требуется передача секретной информации, например, номеров кредитных карт. При использовании обычного HTTP-прокси всю передаваемую информацию можно перехватить средствами самого прокси (т.е. это под силу администратору ЛС) или на более низком уровне, например, tcpdump (т.е. и администратор провайдера и любого промежуточного узла и вообще любой человек, имеющий физический доступ к маршрутам передачи ваших данных по сети, может при большом желании узнать ваши секреты). Поэтому в таких случаях применяют secure HTTP – всё передаваемое при этом шифруется. Прокси-серверу при этом дается только команда «соединится с таким-то сервером», и после соединения прокси передает в обе стороны шифрованный трафик, не имея возможности узнать подробности (соответственно и многие средства управления доступом – такие как фильтрация картинок – не могут быть реализованы для HTTPS, т.к. прокси в этом случае неизвестно, что именно передается). Собственно в процессе шифрации/дешифрации прокси тоже участия не принимает – это делают клиентская программа и целевой сервер. Наличие команды «соединиться с таким-то сервером» в HTTPS-прокси приводит к интересному и полезному побочному эффекту, которым все чаще пользуются разработчики клиентских программ. Так как после соединения с указанным сервером HTTPS-прокси лишь пассивно передает данные в обе стороны, не производя никакой обработки этого потока вплоть до отключения клиента или сервера, это позволяет использовать прокси для передачи почти любого TCP-протокола, а не только HTTP. То есть HTTPS-прокси одновременно является и простым POP3-прокси, SMTP-прокси, IMAP-прокси, NNTP-прокси и т.д. – при условии, что соответствующая клиентская программа умеет так эксплуатировать HTTPS-прокси (увы, далеко не все еще это умеют, но есть вспомогательные программы, «заворачивающие» трафик обычных клиентов через HTTPS-прокси). Никаких модификаций целевого сервера не требуется. Фактически HTTPS-прокси является программируемым mapping-proxy, как и Socks-proxy.
Mapping-прокси – способ заставить работать через прокси те программы, которые умеют работать с интернетом только напрямую. При настройке такого прокси администратор создает как бы «копию» целевого сервера, но доступную через один из портов прокси-сервера для всех клиентов локальной сети – устанавливает локальное «отображение» заданного сервера. Например, пользователи локальной сети хотят работать с почтовым сервером mail.ru не через браузер, а с использованием почтовой программы Outlook Express или TheBat?. Эти программы не умеют работать через прокси (кроме случая, когда Outlook получает почту по HTTP с hotmail.com – тогда он, как и браузер, пользуется HTTP-прокси). Простейший способ работать с mail.ru по POP3 через прокси – установить локальное отображение сервера pop.mail.ru. И в Outlook'ах вместо pop.mail.ru написать имя прокси-сервера и порт отображения. Outlook будет соединяться с прокси-сервером ("думая", что это почтовый сервер), а прокси при этом будет соединяться с pop.mail.ru и прозрачно передавать всю информацию между Outlook и pop.mail.ru, таким образом «превращаясь» на время соединения в POP3-сервер. Неудобство mapping-прокси в том, что для каждого необходимого внешнего сервера нужно вручную устанавливать отдельный порт на прокси. Но зато не требуется модификация ни серверов, ни клиентов. Особенно это помогает в случае необходимости «проксирования» многочисленных «доморощенных» протоколов, реализованных в играх или финансовых программах. Почему-то они часто игнорируют существование прокси и стандартных протоколов. Такие программы можно «обмануть» и направить через прокси практически всегда, если они не делают другой глупости – передачи клиентского IP-адреса внутри протокола и пытаются с ним соединяться напрямую еще раз (что невозможно, т.к. локальные адреса недоступны извне).
Socks-прокси. Об этом виде прокси и его уникальных возможностях мы писали отдельную статью в «Компьютерре» в марте 1998 года. С тех пор протокол Socks не менялся. А программ, работающих через Socks, стало заметно больше. Кроме того исправили ошибки ICQ при работе с Socks-сервером Прочтите эту статью, может быть лучше прояснится и описанное выше. См. также Socks5
Все перечисленные виды прокси (кроме NAT) реализованы в Eserv и Eproxy.