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 байт:
Посилання
RFC 1928 — Протокол SOCKS 5 RFC 1929 — Username/Password Authentication for SOCKS V5 RFC 1961 — GSS-API Authentication Method for SOCKS Version 5 SOCKS: A protocol for TCP proxy across firewalls — Протокол SOCKS 4