Interested Article - SOCKS
- 2020-07-29
- 1
SOCKS — сетевой протокол сеансового уровня модели OSI , который позволяет пересылать пакеты от клиента к серверу через прокси-сервер прозрачно (незаметно для них) и таким образом использовать сервисы за межсетевыми экранами (файрволами) .
Более поздняя версия SOCKS5 предполагает аутентификацию, так что только авторизованные пользователи получают доступ к серверу.
Введение
Клиенты за межсетевым экраном , нуждающиеся в доступе к внешним серверам, вместо этого могут быть соединены с SOCKS- прокси-сервером . Такой прокси-сервер управляет правами клиента на доступ к внешним ресурсам и передаёт клиентский запрос внешнему серверу. SOCKS может использоваться и противоположным способом, осуществляя управление правами внешних клиентов соединяться с внутренними серверами, находящимися за межсетевым экраном (брандмауэром).
В отличие от HTTP -прокси-серверов, SOCKS передаёт все данные от клиента, ничего не добавляя от себя, то есть, с точки зрения конечного сервера, данные, полученные им от SOCKS-прокси, идентичны данным, которые клиент передал бы напрямую, без проксирования. SOCKS более универсален, он не зависит от конкретных протоколов уровня приложений (7-го уровня модели OSI ) и оперирует на уровне TCP-соединений (4‑й уровень модели OSI ). Зато HTTP -прокси кэширует данные и может более тщательно фильтровать содержимое передаваемых данных.
Протокол был разработан системным администратором компании MIPS Дэвидом Кобласом ( David Koblas ). После того, как в 1992 году MIPS вошла в состав корпорации Silicon Graphics , Коблас сделал доклад о SOCKS на Симпозиуме по безопасности Usenix, и SOCKS стал публично доступным. Четвёртую версию протокола разработал Ин-Да Ли ( Ying-Da Lee ) из NEC .
SOCKS-серверы обычно используют порт 1080 .
Протокол SOCKS 4
SOCKS 4 предназначен для работы через межсетевой экран без аутентификации для приложений типа клиент-сервер, работающих по протоколу TCP , таких, как Telnet , FTP и таких популярных протоколов обмена информацией, как HTTP , WAIS и Gopher . По существу, можно рассматривать как межсетевой экран, поддерживающий протокол SOCKS.
Типичный запрос SOCKS 4 выглядит следующим образом:
Запрос клиента к SOCKS-Серверу:
Размер | Описание |
---|---|
1 байт | Номер версии SOCKS, 1 байт (для этой версии должен быть 0x04) |
1 байт |
Код команды:
|
2 байта | Номер порта |
4 байта | IP-адрес |
n+1 байт | ID пользователя. Строка переменной длины, завершается NUL-байтом (0x00). Поле предназначено для идентификации пользователя (см. Ident ) |
Ответ сервера SOCKS-Клиенту:
Размер | Описание |
---|---|
1 байт | Версия кода ответа, которая должна быть равна 0 |
1 байт |
Код ответа:
|
2 байта | Номер порта |
4 байта | IP-адрес |
Протокол SOCKS 5
SOCKS 5 это несовместимое расширение протокола SOCKS 4. Он добавляет поддержку UDP , обеспечивает универсальные схемы строгой аутентификации и расширяет методы адресации, добавляет поддержку доменных имен и адресов IPv6 . Начальная установка связи теперь состоит из следующего:
- Клиент подключается, и посылает приветствие, которое содержит перечень поддерживаемых методов аутентификации
- Сервер выбирает из них один (или посылает ответ о неудаче запроса, если ни один из предложенных методов не приемлем)
- В зависимости от выбранного метода между клиентом и сервером может пройти некоторое количество сообщений
- Клиент посылает запрос на соединение аналогично SOCKS 4
- Сервер отвечает аналогично SOCKS 4
Методы аутентификации пронумерованы следующим образом:
0x00 | Аутентификация не требуется |
0x01 | GSSAPI |
0x02 | Имя пользователя / пароль |
0x03-0x7F | Зарезервировано IANA |
---|---|
0x03 | CHAP |
0x04 | Не занято |
0x05 | Вызов-ответ (аутентификация) |
0x06 | SSL |
0x07 | NDS аутентификация |
0x08 | Фреймворк многофакторной аутентификации |
0x09 | Блок JSON параметров |
0x0A–0x7F | Не занято |
0x80-0xFE | Зарезервировано для методов частного использования |
Начальное приветствие от клиента:
Размер | Описание |
---|---|
1 байт | Номер версии SOCKS (должен быть 0x05 для этой версии) |
1 байт | Количество поддерживаемых методов аутентификации |
n байт | Номера методов аутентификации, переменная длина, 1 байт для каждого поддерживаемого метода |
Сервер сообщает о своём выборе:
Размер | Описание |
---|---|
1 байт | Номер версии SOCKS (должен быть 0x05 для этой версии) |
1 байт | Выбранный метод аутентификации или 0xFF, если не было предложено приемлемого метода |
Последующая идентификация зависит от выбранного метода.
Запрос клиента:
Размер | Описание |
---|---|
1 байт | Номер версии SOCKS (должен быть 0x05 для этой версии) |
1 байт |
Код команды:
|
1 байт | Зарезервированный байт, должен быть 0x00 |
1 байт |
Тип адреса:
|
Зависит от типа адреса |
Назначение адреса:
|
2 байта | Номер порта, в порядке от старшего к младшему ( big-endian ) |
Ответ сервера:
Размер | Описание |
---|---|
1 байт | Номер версии SOCKS (0x05 для этой версии) |
1 байт |
Код ответа:
|
1 байт | Байт зарезервирован, должен быть 0x00 |
1 байт |
Тип последующего адреса:
|
Зависит от типа адреса |
Назначение адреса:
|
2 байта | Номер порта, в порядке от старшего к младшему ( big-endian ) |
Реализации
- — кеширующий прокси сервер для Solaris , Linux , Windows , поддерживает HTTPS, фильтры NSAPI I/O, динамическую реконфигурацию и обратный прокси .
- DeleGate — многофункциональный шлюз прикладного уровня и прокси-сервер, работающий на различных платформах, кроме SOCKS также поддерживает HTTP(S), FTP , NNTP , SMTP , POP3 , IMAP , LDAP , Telnet , DNS и другие протоколы.
- 3proxy — лёгкий прокси-сервер с поддержкой SOCKS-proxy
- WinGate — многопротокольный прокси-сервер с поддержкой SOCKS для Windows.
- OpenSSH позволяет динамически создавать туннели, заданные через подмножество протокола SOCKS.
- - сервер SOCKS прокси для Linux.
См. также
- Tor — анонимная сеть луковой маршрутизации с SOCKS-интерфейсом.
Примечания
- . IANA. Дата обращения: 8 января 2016. 3 марта 2016 года.
- Marcus Leech <[email protected]>. (англ.) . tools.ietf.org. Дата обращения: 6 июня 2020. 18 октября 2020 года.
Ссылки
- (англ.) — SOCKS Protocol Version 5
- (англ.) — Username/Password Authentication for SOCKS V5
- (англ.) — GSS-API Authentication Method for SOCKS Version 5
- (англ.) — Протокол SOCKS 4
- 2020-07-29
- 1