SOCKSмережевий протокол, який дозволяє клієнт-серверним додаткам прозоро використовувати сервіси за міжмережевими екранами (фаєрволами).

Вступ ред.

Клієнти за міжмережевим екраном, що потребують доступ до зовнішніх серверів, замість цього можуть з'єднуватися з SOCKS проксі-сервером. Такий проксі-сервер контролює права клієнта для доступу до зовнішніх ресурсів і передає запит до сервера. SOCKS може використовуватися і протилежним способом, дозволяючи зовнішнім клієнтам з'єднуватися з серверами за міжмережевим екраном (брандмауером).

На відміну від HTTP проксі-серверів, SOCKS передає всі дані від клієнта, нічого не додаючи від себе, тобто з точки зору кінцевого сервера, SOCKS проксі є звичайним клієнтом. SOCKS більш універсальний - не залежить від конкретних протоколів прикладного рівня (7-го рівня моделі OSI) і базується на стандарті TCP/IP - протоколі 4-го рівня. Зате HTTP проксі кешує дані і може ретельніше фільтрувати вміст переданих даних.

Цей протокол був розроблений Девідом Кобласом (David Koblas), системним адміністратором MIPS Computer Systems. Після того, як в 1992 році MIPS увійшла до складу Silicon Graphics (SGI), Коблас зробив доповідь про SOCKS на Симпозіумі з Безпеки Usenix (Usenix Security Symposium), і SOCKS став публічно доступним. Протокол був розширений до четвертої версії Ін-Да Лі (Ying-Da Lee) з NEC Systems Laboratory

Протокол SOCKS 4 ред.

SOCKS 4 призначений для роботи через фаєрвол без аутентифікації для додатків типу клієнт-сервер, що працюють за протоколом TCP, таких, як TELNET, FTP і таких популярних протоколів обміну інформацією, як HTTP, WAIS і GOPHER. По суті, SOCKS-сервер можна розглядати як міжмережевий екран, що підтримує протокол SOCKS.

Типовий запит SOCKS 4 виглядає наступним чином (кожне поле - один байт):

Запит Клієнта до SOCKS-Серверу:

  • Поле 1: номер версії SOCKS, 1 байт (повинен бути 0x04 для цієї версії)
  • Поле 2: код команди, 1 байт:
    • 0x01 = установка TCP / IP з'єднання
    • 0x02 = призначення TCP/IP порту (binding)
  • Поле 3: номер порту, 2 байти
  • Поле 4: IP-адреса, 4 байти
  • Поле 5: ID користувача, рядки змінної довжини, завершується null-байтом (0x00)

Відповідь Сервера SOCKS-Клієнту:

  • Поле 1: null-байт
  • Поле 2: код відповіді, 1 байт:
    • 0x5a = запит наданий
    • 0x5b = запит відхилений чи помилковий
    • 0x5c = запит не вдався, бо не запущений identd (або не доступний з сервера)
    • 0x5d = запит не вдався, оскільки клієнтський identd не може підтвердити ідентифікатор користувача в запиті
  • Поле 3: 2 довільних байта, повинні бути проігноровані
  • Поле 4: 4 довільних байта, повинні бути проігноровані

Протокол SOCKS 5 ред.

SOCKS 5 розширює модель SOCKS 4, додаючи до неї підтримку UDP, забезпечення універсальних схем строгої аутентифікації і розширює методи адресації, додаючи підтримку доменних імен і адрес IPv6. Початкова установка зв'язку тепер складається з наступного:

  • Клієнт підключається, і посилає запит, який включає перелік підтримуваних методів аутентифікації
  • Сервер вибирає з них один (чи надсилає відповідь про невдачу запиту, якщо жоден із запропонованих методів недоступний)
  • В залежності від обраного методу, між клієнтом і сервером може пройти деяка кількість повідомлень
  • Клієнт посилає запит на з'єднання, аналогічно SOCKS 4
  • Сервер відповідає, аналогічно SOCKS 4

Методи аутентифікації пронумеровані таким чином:

  • 0x00 - аутентифікація не вимагається
  • 0x01 - GSSAPI
  • 0x02 - ім'я користувача / пароль
  • 0x03-0x7F - зарезервовано IANA
  • 0x80-0xFE - зарезервовано для методів приватного використання

Початковий запит від клієнта:

  • Поле 1: номер версії SOCKS (повинен бути 0x05 для цієї версії)
  • Поле 2: кількість підтримуваних методів аутентифікації, 1 байт
  • Поле 3: номери методи аутентифікації, змінна довжина, 1 байт для кожного підтримуваного методу

Сервер повідомляє про свій вибір:

  • Поле 1: Версія SOCKS, 1 байт (0x05 для цієї версії)
  • Поле 2: обраний метод аутентифікації, 1 байт, або 0xFF, якщо не було запропоновано прийнятного методу

Подальша ідентифікація залежить від обраного методу.

Запит клієнта:

  • Поле 1: номер версії SOCKS (повинен бути 0x05 для цієї версії)
  • Поле 2: код команди, 1 байт:

Посилання ред.