Jump to content

НОСКИ

SOCKS — это интернет- протокол , который обменивается сетевыми пакетами между клиентом и сервером через прокси-сервер . SOCKS5 дополнительно обеспечивает аутентификацию , поэтому доступ к серверу могут получить только авторизованные пользователи. На практике сервер SOCKS передает TCP-соединения на произвольный IP-адрес и предоставляет средства для пересылки UDP-пакетов. Сервер SOCKS принимает входящее клиентское соединение через TCP-порт 1080, как определено в РФК   1928 . [1]

История [ править ]

Первоначально протокол был разработан/спроектирован Дэвидом Кобласом, системным администратором MIPS Computer Systems . После того как в 1992 году MIPS перешла во владение компании Silicon Graphics , Коблас представил доклад о SOCKS на симпозиуме по безопасности Usenix в том же году. [2] сделать SOCKS общедоступным. [3] Протокол был расширен до версии 4 Инь-Да Ли из NEC .

Эталонная архитектура и клиент SOCKS принадлежат Permeo Technologies , [4] спин-офф от NEC . ( Blue Coat Systems выкупила Permeo Technologies и, в свою очередь, была приобретена Symantec.)

Протокол SOCKS5 изначально был протоколом безопасности, который упрощал межсетевых экранов администрирование и других продуктов безопасности. Он был одобрен IETF в 1996 году как RFC   1928 (авторы: М. Лич, М. Ганис, Ю. Ли, Р. Курис, Д. Коблас и Л. Джонс). Протокол был разработан в сотрудничестве с корпорацией Aventail , которая продает технологию за пределами Азии. [5]

Акроним [ править ]

SOCKS иногда определяют как аббревиатуру от «socket Secure», по крайней мере, начиная с 2001 года. [6] [7] [8] [9] [10] хотя изначально он не был определен как таковой в протоколе SOCKS версии 5 RFC в 1996 году. [11] или документ UNIX Security Symposium III в 1992 году. [2] но просто относится к конкретному прокси-протоколу, предназначенному для облегчения связи между клиентами и серверами через брандмауэр.

Использование [ править ]

SOCKS является де-факто стандартом для шлюзов уровня канала (шлюзы уровня 5). [12]

Характер SOCKS на уровне канала/сеанса делает его универсальным инструментом для пересылки любого трафика TCP (или UDP, начиная с SOCKS5), создавая интерфейс для всех типов инструментов маршрутизации. Его можно использовать как:

  • Инструмент обхода, позволяющий трафику обходить интернет-фильтрацию и получать доступ к контенту, заблокированному в противном случае, например, правительствами, на рабочих местах, в школах и веб-сервисах для конкретной страны. [13] Поскольку SOCKS легко обнаруживается, общепринятым подходом является предоставление интерфейса SOCKS для более сложных протоколов:
  • Обеспечение функциональности, аналогичной виртуальной частной сети , позволяющей перенаправлять соединения в «локальную» сеть сервера:
    • Некоторые пакеты SSH, такие как OpenSSH , поддерживают динамическую переадресацию портов, что позволяет пользователю создавать локальный прокси-сервер SOCKS. [15] Это может освободить пользователя от ограничений подключения только к заранее определенному удаленному порту и серверу.

Протокол [ править ]

SOCKS4 [ править ]

Типичный запрос на подключение SOCKS4 выглядит так:

Первый пакет на сервер
ВИДЕТЬ КМД ДСТПОРТ ДСТИП ИДЕНТИФИКАТОР
Количество байтов 1 1 2 4 Переменная
ВИДЕТЬ
Номер версии SOCKS, 0x04 для этой версии
КМД
код команды:
  • 0x01 = установить TCP/IP потоковое соединение
  • 0x02 = установить привязку порта TCP/IP
ДСТПОРТ
2-байтовый номер порта (в сетевом порядке байтов )
НАЧИНАТЬ
IPv4- адрес, 4 байта (в сетевом порядке байтов)
ИДЕНТИФИКАТОР
строка идентификатора пользователя переменной длины, завершающаяся нулем .
Ответный пакет от сервера
ВН РЕП ДСТПОРТ ДСТИП
Количество байтов 1 1 2 4
ВН
версия ответа, нулевой байт
РЕП
код ответа
Байт Значение
0x5A Запрос удовлетворен
0x5B Запрос отклонен или не выполнен
0x5C Запрос не выполнен, поскольку на клиенте не запущен identd (или он недоступен с сервера)
0x5D Запрос не выполнен, поскольку идентификатор клиента не смог подтвердить идентификатор пользователя в запросе.
ДСТПОРТ
порт назначения, имеет смысл, если предоставлен в BIND, в противном случае игнорируется
ДСТИП
IP-адрес назначения, как указано выше – ip:порт, к которому должен привязаться клиент.

Например, это запрос SOCKS4 на подключение Фреда к 66.102.7.99:80 , сервер отвечает «ОК»:

  • Клиент: 0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
    • Последнее поле — «Fred» в ASCII , за которым следует нулевой байт.
  • Сервер: 0x00 | 0x5A | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX
    • 0xXX может быть любым байтовым значением. Протокол SOCKS4 указывает, что значения этих байтов следует игнорировать.

С этого момента любые данные, отправляемые от клиента SOCKS на сервер SOCKS, передаются на адрес 66.102.7.99 и наоборот.

Поле команды может иметь значение 0x01 для «подключения» или 0x02 для «привязки»; команда «bind» разрешает входящие соединения для таких протоколов, как активный FTP .

SOCKS4a [ править ]

SOCKS4a расширяет протокол SOCKS4, позволяя клиенту указывать доменное имя назначения, а не IP-адрес; это полезно, когда сам клиент не может преобразовать доменное имя хоста назначения в IP-адрес. Его предложил Ин-Да Ли, автор SOCKS4. [16]

Клиент должен установить для первых трех байтов DSTIP значение NULL, а для последнего байта — ненулевое значение. (Это соответствует IP-адресу 0.0.0.x, где x не равен нулю, что является недопустимым адресом назначения и, следовательно, никогда не должно происходить, если клиент может разрешить имя домена.) После нулевого байта, завершающего USERID, клиент должен отправить имя домена назначения. и завершить его другим NULL-байтом. Это используется как для запросов «подключения», так и для «привязки».

Клиент для SOCKS-сервера:

Первый пакет на сервер
SOCKS4_C ДОМЕН
Количество байтов 8+переменная переменная
SOCKS4_C
Пакет подтверждения клиента SOCKS4 (вверху)
ДОМЕН
доменное имя хоста, с которым нужно связаться, ноль (0x00) завершен

Сервер-клиент SOCKS: (то же, что и SOCKS4)

Сервер, использующий протокол SOCKS4a, должен проверить DSTIP в пакете запроса . Если он представляет адрес 0.0.0.x с ненулевым x, сервер должен прочитать имя домена, которое клиент отправляет в пакете. Сервер должен разрешить имя домена и установить соединение с хостом назначения, если это возможно.

SOCKS5 [ править ]

Протокол SOCKS5 определен в РФК   1928 . Это несовместимое расширение протокола SOCKS4; он предлагает больше вариантов аутентификации и добавляет поддержку IPv6 и UDP , последний из которых можно использовать для поиска DNS . Первоначальное рукопожатие состоит из следующего:

  • Клиент подключается и отправляет приветствие, которое включает список поддерживаемых методов аутентификации.
  • Сервер выбирает один из методов (или отправляет ответ об ошибке, если ни один из них не приемлем).
  • Теперь между клиентом и сервером может передаваться несколько сообщений, в зависимости от выбранного метода аутентификации.
  • Клиент отправляет запрос на соединение, аналогичный SOCKS4.
  • Сервер отвечает аналогично SOCKS4.

Первое приветствие от клиента такое:

Приветствие клиента
ВИДЕТЬ НАУТ АУТ
Количество байтов 1 1 переменная
ВИДЕТЬ
Версия SOCKS (0x05)
НАУТ
Количество поддерживаемых методов аутентификации, uint8
АУТ
Методы аутентификации, поддерживается 1 байт на каждый метод.
Поддерживаемые методы аутентификации пронумерованы следующим образом:
  • 0x00: нет аутентификации
  • 0x01: ГССАПИ ( РФК   1961 )
  • 0x02: Имя пользователя/пароль ( РФК   1929 )
  • 0x03–0x7F: методы, назначенные IANA. [17]
    • 0x03: Протокол аутентификации вызова – рукопожатия
    • 0x04: не назначено
    • 0x05: Метод аутентификации запрос-ответ
    • 0x06: уровень защищенных сокетов.
    • 0x07: Аутентификация NDS
    • 0x08: Платформа мульти-аутентификации
    • 0x09: Блок параметров JSON
    • 0x0A–0x7F: не назначены
  • 0x80–0xFE: методы, зарезервированные для частного использования.
Выбор сервера
ВИДЕТЬ КАУТ
Количество байтов 1 1
ВИДЕТЬ
Версия SOCKS (0x05)
КАУТ
выбранный метод аутентификации или 0xFF, если приемлемые методы не предложены

Последующая аутентификация зависит от метода. Аутентификация имени пользователя и пароля (метод 0x02) описана в RFC   1929 :

Запрос аутентификации клиента, 0x02
ВИДЕТЬ ИДЛЕН ИДЕНТИФИКАТОР ПУЛЕН ПВ
Количество байтов 1 1 (1–255) 1 (1–255)
ВИДЕТЬ
0x01 для текущей версии аутентификации по имени пользователя и паролю.
ИДЛЕН, ИД
Длина имени пользователя, uint8; имя пользователя в виде байтовой строки
ПУЛЕН, ПВ
Длина пароля, uint8; пароль в виде байтовой строки
Ответ сервера, 0x02
ВИДЕТЬ СТАТУС
Количество байтов 1 1
ВИДЕТЬ
0x01 для текущей версии аутентификации по имени пользователя и паролю.
СТАТУС
0x00 успех, в противном случае неудача, соединение необходимо закрыть.

После аутентификации соединение может быть продолжено. Сначала мы определяем тип данных адреса как:

SOCKS5-адрес
ТИП АДРЕС
Количество байтов 1 переменная
ТИП
тип адреса. Один из:
  • 0x01: IPv4-адрес.
  • 0x03: Имя домена
  • 0x04: IPv6-адрес.
АДРЕС
следующие адресные данные. В зависимости от типа:
  • 4 байта для адреса IPv4.
  • 1 байт длины имени, за которым следуют 1–255 байтов имени домена.
  • 16 байт для адреса IPv6.
Запрос на подключение клиента
ВИДЕТЬ КМД РСВ ДСТАДДР ДСТПОРТ
Количество байтов 1 1 1 Переменная 2
ВИДЕТЬ
Версия SOCKS (0x05)
КМД
код команды:
  • 0x01: установить потоковое соединение TCP/IP.
  • 0x02: установить привязку порта TCP/IP.
  • 0x03: привязать порт UDP
РСВ
зарезервировано, должно быть 0x00
ДСТАДДР
адрес назначения, см. структуру адреса выше.
ДСТПОРТ
номер порта в сетевом порядке байтов
Ответный пакет от сервера
ВИДЕТЬ СТАТУС РСВ БНДАДДР БНДПОРТ
Количество байтов 1 1 1 переменная 2
ВИДЕТЬ
Версия SOCKS (0x05)
СТАТУС
код статуса:
  • 0x00: запрос удовлетворен
  • 0x01: общий сбой
  • 0x02: соединение не разрешено набором правил.
  • 0x03: сеть недоступна
  • 0x04: хост недоступен
  • 0x05: соединение отклонено хостом назначения.
  • 0x06: срок жизни истек.
  • 0x07: команда не поддерживается/ошибка протокола
  • 0x08: тип адреса не поддерживается.
РСВ
зарезервировано, должно быть 0x00
БНДАДДР
адрес привязки к серверу в формате «адрес SOCKS5», указанном выше
БНДПОРТ
номер порта, привязанного к серверу, в сетевом порядке байтов

Поскольку клиентам разрешено использовать либо разрешенные адреса, либо доменные имена, существует соглашение cURL обозначать вариант доменного имени SOCKS5 «socks5h», а другой — просто «socks5». Аналогичное соглашение существует между SOCKS4a и SOCKS4. [18]

Программное обеспечение [ править ]

Серверы [ править ]

Реализации прокси-сервера SOCKS [ править ]

  • Веб-прокси-сервер Sun Java System — это кэширующий прокси-сервер, работающий на серверах Solaris, Linux и Windows, который поддерживает HTTPS, фильтры ввода-вывода NSAPI, динамическую реконфигурацию, SOCKSv5 и обратный прокси-сервер .
  • WinGate — это многопротокольный прокси-сервер и SOCKS-сервер для Microsoft Windows, который поддерживает SOCKS4, SOCKS4a и SOCKS5 (включая аутентификацию UDP-ASSOCIATE и GSSAPI). Он также поддерживает передачу соединений SOCKS на HTTP-прокси, поэтому может кэшировать и сканировать HTTP через SOCKS.
  • Socksgate5 SocksGate5 — это межсетевой экран SOCKS приложений с функцией проверки на уровне 7 модели OSI, прикладном уровне. Поскольку пакеты проверяются на уровне 7 OSI, брандмауэр приложения-SOCKS может искать несоответствие протоколу и блокировать указанный контент.
  • Dante — это SOCKS-сервер канального уровня, который можно использовать для обеспечения удобного и безопасного сетевого подключения, требуя, чтобы только хост, на котором работает Dante, имел подключение к внешней сети. [19]
  • HevSocks5Server — это высокопроизводительный и малозатратный SOCKS-сервер для Unix (Linux/BSD/macOS). Он поддерживает стандартные методы TCP-CONNECT и UDP-ASSOCIATE, а также аутентификацию с использованием нескольких имен пользователей и паролей.

-сервера предоставляющие интерфейс SOCKS программы , Другие

  • OpenSSH позволяет динамически создавать туннели, указанные через подмножество протокола SOCKS, поддерживающее команду CONNECT.
  • PuTTY — это SSH-клиент Win32, который поддерживает локальное создание (динамических) туннелей SOCKS через удаленные SSH-серверы.
  • Secure ShellFish — это SSH-клиент для iOS и macOS, включающий сервер SOCKS.
  • Мерцающий Кот [20] — это веб-сервер, использующий SOCKS5 для моделирования внутренней сети, позволяющий веб-разработчикам тестировать свои локальные сайты без изменения файла /etc/hosts .
  • Tor — это система, предназначенная для обеспечения анонимности в Интернете. Tor предлагает своим клиентам серверный интерфейс SOCKS только с протоколом TCP.
  • Shadowsocks — инструмент для обхода цензуры. Он обеспечивает интерфейс SOCKS5.
  • реализации netcat , такие как Ncat и socat.

Клиенты [ править ]

Клиентское программное обеспечение должно иметь встроенную поддержку SOCKS для подключения через SOCKS.

Браузер [ править ]

  • Chrome: поддержка SOCKS4, SOCKS4a и SOCKS5. [21]
  • Firefox: поддержка SOCKS4, SOCKS4a и SOCKS5.
  • Internet Explorer и Microsoft Edge на базе EdgeHTML: поддерживаются только SOCKS4.
  • Microsoft Edge на базе Chromium: поддержка SOCKS4, SOCKS4a и SOCKS5.

Существуют программы, позволяющие пользователям обойти такие ограничения:

Носки [ править ]

Socksifiers позволяют приложениям получать доступ к сетям для использования прокси-сервера без необходимости поддерживать какие-либо протоколы прокси. Самый распространенный способ — настроить виртуальный сетевой адаптер и соответствующие таблицы маршрутизации для отправки трафика через адаптер.

  • Win2Socks , который позволяет приложениям получать доступ к сети через SOCKS5, HTTPS или Shadowsocks.
  • tun2socks, инструмент с открытым исходным кодом, который создает виртуальные адаптеры TCP TUN из прокси-сервера SOCKS, поддерживающие UDP, если они поддерживаются на другом конце. Работает в Linux и Windows, [22] имеет порт для macOS и перереализацию на Golang . [23] Другой, написанный на C, с хорошей производительностью, работает на Linux/Android/BSD/macOS и iOS. [24]
  • proxychains — программа Unix, которая пропускает TCP-трафик через прокси-серверы SOCKS или HTTP в (динамически подключаемые) программы, которые она запускает. Работает на различных Unix-подобных системах. [25]

Перевод прокси [ править ]

  • Polipo — прекращенный прокси-сервер пересылки и кэширования HTTP/1.1 с поддержкой IPv4 . Открытый исходный код, работающий на Linux , OpenWrt , Windows , Mac OS X и FreeBSD . Его может использовать практически любой веб-браузер.
  • Privoxy — некэширующий прокси-сервер SOCKS-HTTP.
  • Tinyproxy — облегченный демон прокси-сервера HTTP/HTTPS для операционных систем POSIX. Разработан с нуля, чтобы быть быстрым и в то же время небольшим. Он представляет собой интерфейс прокси-сервера http и может подключаться к восходящим прокси-серверам SOCKS4/5 и http.

Безопасность [ править ]

Из-за отсутствия шифрования запросов и обмена пакетами это делает SOCKS практически уязвимым для атак «человек посередине» и перехвата IP-адресов, что, как следствие, освобождает путь для цензуры со стороны правительств.

Ссылки [ править ]

  1. ^ «Реестр имен служб и номеров портов транспортного протокола» . Управление по присвоению номеров в Интернете . 19 мая 2017 года . Проверено 23 мая 2017 г.
  2. ^ Jump up to: а б Коблас, Дэвид; Коблас, Мишель Р. СОКС (PDF) . USENIX Симпозиум по безопасности UNIX III . Проверено 16 ноября 2019 г.
  3. ^ Дармохрей, Тина. « Брандмауэры и сказки ». ;АВТОРИЗОВАТЬСЯ:. Том 30, нет. 1.
  4. ^ Архивный указатель на Wayback Machine
  5. ^ CNET: Киберпространство из космоса
  6. ^ США US8984268B2  
  7. ^ США US20210058367A1  
  8. ^ США US11190374B2  
  9. ^ ДП JP6761452B2  
  10. ^ США US11425565B2  
  11. ^ РФК 1928 . дои : 10.17487/RFC1928 .
  12. ^ Опплигер, Рольф (2003). «Шлюзы схемного уровня». Технологии безопасности во Всемирной паутине (2-е изд.). Артех Хаус. ISBN  1580533485 . Проверено 21 января 2020 г.
  13. ^ «Отчет об использовании средств обхода за 2010 г.» (PDF) . Беркмановский центр Интернета и общества при Гарвардском университете. Октябрь 2010.
  14. ^ «Часто задаваемые вопросы по Тору» .
  15. ^ «Часто задаваемые вопросы по OpenSSH» . Архивировано из оригинала 1 февраля 2002 г.
  16. ^ Ин-Да Ли. «SOCKS 4A: простое расширение протокола SOCKS 4» . ОпенСШ . Проверено 3 апреля 2013 г.
  17. ^ IANA.org
  18. ^ "CURLOPT_PROXY" . локон.se . Проверено 20 января 2020 г.
  19. ^ «Продукты, разработанные Inferno Nettverk A/S» . www.inet.no. ​Проверено 20 марта 2021 г.
  20. ^ «Легкая сеть с SOCKS5» . shimmercat.com . ШиммерКэт. Архивировано из оригинала 13 сентября 2018 г. Проверено 20 апреля 2016 г.
  21. ^ «Настройка прокси-сервера SOCKS в Chrome» . www.chromium.org . Проверено 19 марта 2024 г.
  22. ^ Биджак, Амброз (20 января 2020 г.). «ambrop72/badvpn: язык сценариев NCD, прокси-сервер tun2socks, P2P VPN» . Гитхаб . Проверено 20 января 2020 г.
  23. ^ «xjasonlyu/tun2socks: tun2socks — на базе стека TCP/IP gVisor» . Гитхаб .
  24. ^ «heiher/hev-socks5-tunnel: высокопроизводительный Tun2socks» . Гитхаб .
  25. ^ Хамсик, Адам (20 января 2020 г.). «proxychains: инструмент, который заставляет любое TCP-соединение, установленное любым приложением, следовать через прокси-сервер, такой как TOR или любой другой прокси-сервер SOCKS4, SOCKS5 или HTTP(S)» . Гитхаб . Проверено 20 января 2020 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c7be4b209e1fccf301955211f2274213__1714103040
URL1:https://arc.ask3.ru/arc/aa/c7/13/c7be4b209e1fccf301955211f2274213.html
Заголовок, (Title) документа по адресу, URL1:
SOCKS - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)