Лайфхаки

Маленькие, полезные хитрости

Proxy servers and tunneling. Concepts

22.06.2022 в 19:26

Proxy servers and tunneling. Concepts

From the earliest days of the TCP/IP stack, remote node access was a must. However, the protocols designed for it – telnet   for interactive access and FTP for file transfers – lacked a very basic security measure: The data flow was not encrypted.

As a result, the data transferred using these protocols can be captured and scrutinized by network traffic analysis tools like tcpdump and Wireshark . As the username and password were exchanged in clear text, it’s easy for an attacker to gather them.

To address this issue and other limitations, ssh implements encryption in its connections . That way, provided it is using adequate configuration, strong encryption, and key exchange schemas, we can be sure that our communication won’t be intercepted on the way .

One of the more useful features, and not widely known, is the ability to establish tunnels and proxies . This way, we can use an ssh session to connect other remote services that are not visible to us otherwise, like the ones protected by a firewall:

As seen in the picture, a client machine, while opening the ssh session, instructs the SSH server to open tunnels that can work in both directions .

It can also work as a proxy forprotocol, allowing us to locally open remote GUI applications, or as a SOCKS 4 or 5 compliant proxy server, allowing the client to access multiple destinations from the remote site impersonating the SSH Server.

Even more impressive and dangerous, as it enables a full VPN-like experience, is the ability to tunnel level 2 or level 3 packets using tun devices.

Local proxy server. Proxy servers and tunneling

When navigating through different networks of the Internet, proxy servers and HTTP tunnels are facilitating access to content on the World Wide Web. A proxy can be on the user's local computer, or anywhere between the user's computer and a destination server on the Internet. This page outlines some basics about proxies and introduces a few configuration options.

There are two types of proxies: forward proxies (or tunnel, or gateway) and reverse proxies (used to control and protect access to a server for load-balancing, authentication, decryption or caching).

A forward proxy, or gateway, or just "proxy" provides proxy services to a client or a group of clients. There are likely hundreds of thousands of open forward proxies on the Internet. They store and forward Internet services (like the DNS, or web pages) to reduce and control the bandwidth used by the group.

Forward proxies can also be anonymous proxies and allow users to hide their IP address while browsing the Web or using other Internet services. TOR (The Onion Router), routes internet traffic through multiple proxies for anonymity.

As the name implies, a reverse proxy does the opposite of what a forward proxy does: A forward proxy acts on behalf of clients (or requesting hosts). Forward proxies can hide the identities of clients whereas reverse proxies can hide the identities of servers. Reverse proxies have several use cases, a few are:

  • Load balancing: distribute the load to several web servers,
  • Compression: compress and optimize content to speed up load time.

Proxies can make requests appear as if they originated from the proxy's IP address. This can be useful if a proxy is used to provide client anonymity, but in other cases information from the original request is lost. The IP address of the original client is often used for debugging, statistics, or generating location-dependent content. A common way to disclose this information is by using the following HTTP headers:

The standardized header:

Forwarded

Contains information from the client-facing side of proxy servers that is altered or lost when a proxy is involved in the path of the request.

Or the de-facto standard versions:

X-Forwarded-For Non-Standard

Identifies the originating IP addresses of a client connecting to a web server through an HTTP proxy or a load balancer.

X-Forwarded-Host Non-Standard

Identifies the original host requested that a client used to connect to your proxy or load balancer.

X-Forwarded-Proto Non-Standard

identifies the protocol (HTTP or HTTPS) that a client used to connect to your proxy or load balancer.

To provide information about the proxy itself (not about the client connecting to it), theViaheader can be used.

Linux http proxy server. Установка и запуск 3proxy

3proxy отсутствует в репозиториях Ubuntu, поэтому для установки сначала необходимо скачать его исходник.

Для начала устанавливаем пакет программ для компиляции пакетов:

apt-get install build-essential

Переходим на официальную страницу загрузки 3proxy и копируем ссылку на версию пакета для Linux:

Proxy servers and tunneling.  Concepts

… используя ссылку, скачиваем пакет:

wget https://github.com/z3APA3A/3proxy/archive/0.9.3.tar.gz

* в моем случае будет скачена версия 0.9.3.

Распакуем скачанный архив:

tar xzf 0.9.3.tar.gz

Переходим в распакованный каталог:

cd 3proxy-*

Запускаем компиляцию 3proxy:

make -f Makefile.Linux

Создаем системную учетную запись:

adduser --system --disabled-login --no-create-home --group proxy3

Создаем каталоги и копируем файл 3proxy в /usr/bin:

mkdir -p /var/log/3proxy

mkdir /etc/3proxy

cp bin/3proxy /usr/bin/

Задаем права на созданные каталоги:

chown proxy3:proxy3 -R /etc/3proxy

chown proxy3:proxy3 /usr/bin/3proxy

chown proxy3:proxy3 /var/log/3proxy

Смотрим uid и gid созданной учетной записи:

id proxy3

Получим, примерно, такой результат:

uid=109(proxy3) gid=113(proxy3) groups=113(proxy3)

* где 109 — идентификатор пользователя; 113 — идентификатор для группы.

Create proxy server. Создаем прокси-сервер (socks)

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

1. Представьте, что вы сидите в отеле или в кафе с бесплатным WiFi. Где гарантия, что WiFi не развёрнут мошенниками, которые ждут, пока какой-нибудь лох начнёт передавать через WiFi данные своей банковской карты или вводить логины и пароли к своим личным страницам. Здесь есть два пути, либо не пользоваться бесплатным WiFi для работы и покупок, либо пользоваться прокси, с помощью которого данные будут передаваться в зашифрованном виде.

2. Сокрытие своего настоящего IP-адреса. Иногда это бывает нужно для соблюдения анонимности.

3. Вы получили бан поисковой системы из-за частого обращения. Например, если Яндекс часто спрашивает, робот вы или человек.

Существует 2 варианта найти прокси-сервер: найти услугу (платную или бесплатную) или создать собственный прокси-сервер. Здесь не будем рассматривать первый вариант, т.к. нет гарантии, что на сервере не пишется лог (вероятность потери личных данных, данные банковских карт, логины и пароли). Ниже рассмотрим второй вариант: создание своего прокси-сервера.

1. Находим хостинг с поддержкой SSH

Если вы веб-мастер, то, возможно, у вас уже есть хостинг с поддержкой SSH. Если нет, то поищите в Интернете недорогой хостинг поддерживающий SSH. Встречаются хостинг-провайдеры, которые готовы предложить нужный нам хостинг за примерно за 1 доллар в месяц. Можно найти и заграничный хостинг, но это будет чуть дороже. Если поискать получше, то можно найти бесплатные варианты, но, думаю, платные будут работать надёжнее.

2. Запускаем программу PuTTY

После того как вы обзавелись хостингом с SSH, вам нужна программа PuTTY для создания локального прокси-сервера. Скачать программу бесплатно можно с официального сайта программы: www.putty.org .

3. Настраиваем программу PuTTY

После запуска программы вы увидите окно с настройками. В поле Host Name введите адрес домена или IP-адрес вашего сервера. В поле Port укажите порт, обычно это 22.

Proxy servers and tunneling.  Concepts 01

Теперь перейдите в категорию Connection->SSH->Tunnels. Здесь нужно добавить порт. Для этого в поле Source port введите порт для будущего локального прокси-сервера, например, 8888. Выберите опцию Dinamic и нажмите на кнопку Add. После этого порт появится в поле Forwarded ports - строка D8888.

Proxy servers and tunneling.  Concepts 02

Чтобы при каждом запуске не делать эту длительную процедуру, нужно сохранить текущие настройки. Для этого вернитесь в категорию Session, введите имя для своих настроек в поле Saved Sessions, например, "myhost.ru proxy" и нажмите на кнопку Save. После этого ваши настройки появятся в списке ниже. Теперь, при следующем запуске программы, вы сможете выбрать свои настройки в этом списке и нажать на кнопку Load.

Proxy servers and tunneling.  Concepts 03

4. Открываем сессию

После настройки программы можно открыть сессию. При этом будет создан локальный прокси-сервер. Для этого щёлкаем по кнопке Open.

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

Proxy servers and tunneling.  Concepts 04

Дальше программа попросит ваш логин и пароль в чёрном окне (при вводе пароля курсор не будет двигаться, и не будут появляться звёздочки, - это нормально).

Proxy servers and tunneling.  Concepts 05

5. Прокси-сервер готов!

После того как вы ввели логин и пароль, на экране появится информация о сервере, а ваш прокси будет доступен по адресу 127.0.0.1:8888 или localhost:8888. По окончании работы чёрное окно программы PuTTY можно закрыть, согласившись с предупреждением.

6. Настройка браузера и других программ

Чтобы воспользоваться созданным локальным прокси-сервером в браузере, нужно настроить подключение через SOCKS5 прокси-сервер, указав настройки 127.0.0.1:8888 или localhost:8888 . Другие программы настраиваются аналогичным образом. Для примера рассмотрим настройку браузера Internet Explorer 10.

В меню выберите пункт "Свойства браузера".

Proxy servers and tunneling.  Concepts 06

В появившемся окне выберите закладку "Подключения" и на ней нажмите на кнопку "Настройка сети".

Proxy servers and tunneling.  Concepts 07

В окне "Настройка параметров локальной сети" поставьте галку "Использовать прокси-сервер…" (в дальнейшем, чтобы быстро включать и выключать прокси, можно просто снимать или устанавливать эту галку ) и нажмите на кнопку "Дополнительно".

Proxy servers and tunneling.  Concepts 08

В окне "Параметры прокси-сервера" укажите только пункт 4. Остальные поля очистите, чтобы браузер не путался.

Proxy servers and tunneling.  Concepts 09

Теперь закройте все окна, нажимая на кнопки "ОК". Ваш браузер готов к работе через прокси.

7. Проверка

Чтобы проверить и удостовериться, что вы и в самом деле выходите в интернет через сервер, перейдите в вашем браузере на страницу одного из сервисов, которые определяют ваш IP-адрес. Например, internet.yandex.ru или более подробный сервис 2IP . Сравните IP-адрес с выключенным и включенным прокси-сервером.