SOCKS
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