SOCKS5 — це більш досконалий і широко рекомендований протокол проксі-сервера порівняно з SOCKS4, який насамперед пропонує підтримку UDP-трафіку, IPv6 та різних методів автентифікації, тоді як SOCKS4 обмежений TCP-з'єднаннями, IPv4 та не має автентифікації.
Проксі SOCKS (Socket Secure) працює на рівні 5 (сесійний рівень) моделі OSI, діючи як посередник між клієнтською програмою та сервером. На відміну від проксі-серверів, специфічних для програм (наприклад, HTTP-проксі), SOCKS-проксі є протокольно-незалежними, пересилаючи весь трафік від імені клієнта без інтерпретації самого мережевого протоколу. Це дозволяє їм обробляти різні типи трафіку, включаючи HTTP, HTTPS, FTP та інші, шляхом встановлення з'єднання з цільовим сервером та ретрансляції даних.
Протокол SOCKS4
SOCKS4 — це старіша версія протоколу SOCKS, розроблена для простіших вимог до проксі-серверів.
Основна функціональність
SOCKS4 виключно підтримує проксіювання TCP (Transmission Control Protocol) з'єднань. Коли клієнт хоче встановити з'єднання з цільовим сервером через SOCKS4-проксі, він надсилає запит на з'єднання до проксі-сервера. Проксі потім встановлює з'єднання з цільовим сервером від імені клієнта та ретранслює дані між ними.
Обмеження
- Тільки TCP: SOCKS4 не може обробляти UDP (User Datagram Protocol) трафік, що робить його непридатним для програм, які покладаються на UDP для зв'язку, таких як онлайн-ігри, потокове відео або певні VoIP-сервіси.
- Тільки IPv4: Він розроблений для роботи виключно з IPv4-адресами. Він не підтримує IPv6, що обмежує його корисність у сучасних мережевих середовищах, які все частіше використовують IPv6.
- Без автентифікації: SOCKS4 не надає жодних вбудованих механізмів автентифікації. Будь-який клієнт може підключитися та використовувати проксі, що робить його менш безпечним для публічних або спільних проксі-сервісів. Поле
USERIDу запиті SOCKS4 є лише ідентифікатором, а не для автентифікації. - Роздільна здатність DNS на стороні клієнта: Клієнтська програма повинна розв'язати ім'я хоста призначення в IPv4-адресу перед надсиланням запиту до SOCKS4-проксі. Проксі отримує IP-адресу, а не доменне ім'я.
- Обмежені команди: SOCKS4 в основному підтримує одну команду для встановлення з'єднання.
Розширення SOCKS4a
Неофіційне розширення, SOCKS4a, було представлено для вирішення обмеження роздільної здатності DNS на стороні клієнта. За допомогою SOCKS4a клієнти можуть надсилати доменне ім'я замість IP-адреси. Проксі-сервер потім виконує роздільну здатність DNS. Незважаючи на це покращення, SOCKS4a все ще зберігає інші обмеження SOCKS4, такі як підтримка лише TCP та лише IPv4.
Структура запиту SOCKS4 (концептуальна)
Запит на з'єднання SOCKS4 зазвичай передбачає надсилання клієнтом послідовності байтів до проксі-сервера.
+----+----+----+----+----+----+----+----+----+----+....+----+
| VN | CD | DSTPORT | DSTIP | USERID | NULL |
+----+----+----+----+----+----+----+----+----+----+....+----+
1 1 2 4 variable 1
VN: Номер версії (0x04 для SOCKS4)CD: Код команди (0x01 для CONNECT)DSTPORT: Порт призначенняDSTIP: IP-адреса призначенняUSERID: Ідентифікатор користувача (змінної довжини, нуль-термінований)
Для SOCKS4a, якщо DSTIP є 0.0.0.X (де X ненульовий), фактичне доменне ім'я додається після нульового байта, що слідує за USERID.
Протокол SOCKS5
SOCKS5 є поточним стандартом і значним покращенням порівняно з SOCKS4, пропонуючи більшу гнучкість та можливості.
Основна функціональність
SOCKS5 підтримує як TCP, так і UDP трафік. Ця подвійна можливість робить його придатним для ширшого спектра застосувань, включаючи ті, що вимагають зв'язку в реальному часі. Він також вводить фазу узгодження методів автентифікації, що дозволяє більш безпечне використання проксі.
Ключові покращення
- Підтримка TCP та UDP: SOCKS5 може проксіювати як TCP, так і UDP з'єднання. Підтримка UDP є критично важливою для таких програм, як VPN (при використанні тунелів на основі UDP), онлайн-ігри, прямі трансляції та DNS-запити (якщо використовується DNS-розв'язувач на основі UDP).
- Методи автентифікації: SOCKS5 підтримує кілька методів автентифікації, підвищуючи безпеку. Поширені методи включають:
- Без автентифікації (0x00): Аналогічно SOCKS4, облікові дані не потрібні.
- Ім'я користувача/Пароль (0x01): Клієнти надають ім'я користувача та пароль проксі-серверу для перевірки.
- GSS-API (0x02): Більш надійний, розширюваний механізм безпеки, який зазвичай використовується в корпоративних середовищах.
- Підтримка IPv4 та IPv6: SOCKS5 нативно підтримує як IPv4, так і IPv6 адресацію, що робить його перспективним та сумісним із сучасними мережевими інфраструктурами.
- Роздільна здатність DNS на стороні сервера: Клієнти можуть надсилати доменне ім'я безпосередньо до SOCKS5-проксі, який потім виконує роздільну здатність DNS. Це знімає завдання роздільної здатності з клієнта та іноді може покращити конфіденційність, запобігаючи локальним DNS-запитам.
- Розширені команди: SOCKS5 підтримує три основні команди:
- CONNECT (0x01): Встановлює TCP-з'єднання з пунктом призначення.
- BIND (0x02): Використовується для протоколів, де серверу потрібно ініціювати зворотне з'єднання з клієнтом (наприклад, деякі режими FTP). Проксі прослуховує вхідне з'єднання від імені клієнта.
- UDP ASSOCIATE (0x03): Встановлює UDP-ретрансляцію, дозволяючи клієнту надсилати та отримувати UDP-пакети через проксі.
Структура запиту SOCKS5 (концептуальна)
SOCKS5 передбачає початкову фазу узгодження автентифікації, за якою слідує фактичний запит на з'єднання.
Узгодження автентифікації (Клієнт до Проксі)
+----+----------+----------+
| VER | NMETHODS | METHODS |
+----+----------+----------+
1 1 1 to 255
VER: Версія протоколу (0x05 для SOCKS5)NMETHODS: Кількість методів автентифікації, підтримуваних клієнтомMETHODS: Список підтримуваних методів автентифікації
Відповідь автентифікації (Проксі до Клієнта)
+----+--------+
| VER | METHOD |
+----+--------+
1 1
VER: Версія протоколу (0x05)METHOD: Обраний метод автентифікації (0xFF, якщо немає прийнятного методу)
Запит на з'єднання (Клієнт до Проксі)
+----+-----+-------+------+----------+----------+
| VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
+----+-----+-------+------+----------+----------+
1 1 1 1 variable 2
VER: Версія протоколу (0x05)CMD: Команда (0x01 для CONNECT, 0x02 для BIND, 0x03 для UDP ASSOCIATE)RSV: Зарезервовано (0x00)ATYP: Тип адреси (0x01 для IPv4, 0x03 для доменного імені, 0x04 для IPv6)DST.ADDR: Адреса призначення (змінної довжини залежно від ATYP)DST.PORT: Порт призначення
SOCKS4 проти SOCKS5: Ключові відмінності
| Функція | SOCKS4 | SOCKS5 |
|---|---|---|
| Версія протоколу | 4 | 5 |
| Підтримка TCP | Так | Так |
| Підтримка UDP | Ні | Так |
| Автентифікація | Без вбудованої автентифікації | Так (Без автентифікації, Ім'я користувача/Пароль, GSS-API тощо) |
| Підтримка IPv4 | Так | Так |
| Підтримка IPv6 | Ні | Так |
| Роздільна здатність DNS | На стороні клієнта (SOCKS4a дозволяє на стороні проксі) | На стороні проксі (також може бути на стороні клієнта) |
| Типи адрес | IPv4 (та доменні імена з SOCKS4a) | IPv4, IPv6, Доменне ім'я |
| Команди | CONNECT | CONNECT, BIND, UDP ASSOCIATE |
| Безпека | Нижча (через відсутність автентифікації) | Вища (через параметри автентифікації) |
Який протокол обрати
Вибір між SOCKS4 та SOCKS5 залежить від конкретних вимог програми, мережевого середовища та міркувань безпеки.
Коли обирати SOCKS4
SOCKS4 зазвичай вважається застарілим. Його використання обмежене конкретними сценаріями:
- Застарілі системи: При роботі зі старими клієнтськими програмами або проксі-серверами, які підтримують лише SOCKS4.
- Простота: Для надзвичайно простих потреб проксіювання, де UDP, IPv6 та автентифікація суворо непотрібні, SOCKS4 пропонує незначно простішу реалізацію (хоча різниця в продуктивності незначна).
- Мінімальні накладні витрати: Хоча різниця в накладних витратах на практиці мінімальна, SOCKS4 має дещо простіший процес встановлення з'єднання.
У більшості сучасних контекстів SOCKS4 не є кращим вибором через його обмеження.
Коли обирати SOCKS5
SOCKS5 є рекомендованим вибором для майже всіх сучасних випадків використання завдяки його чудовим можливостям та гнучкості:
- UDP-трафік: Необхідний для програм, що вимагають UDP, таких як:
- Онлайн-ігри
- Голос через IP (VoIP)
- Відеоконференції та потокове передавання
- Обмін файлами за принципом "рівний-рівному" (P2P)
- DNS-запити (якщо пересилаються через проксі)
- Вимоги до автентифікації: Якщо проксі-сервіс вимагає автентифікації користувача для контролю доступу та безпеки, вбудовані методи автентифікації SOCKS5 є незамінними.
- Підключення IPv6: Для середовищ, які використовують або вимагають IPv6, SOCKS5 забезпечує нативну підтримку, гарантуючи сумісність з майбутньою мережевою інфраструктурою.
- Роздільна здатність DNS на стороні сервера: Якщо клієнт віддає перевагу, щоб проксі обробляв роздільну здатність DNS (наприклад, щоб потенційно маскувати локальні DNS-запити клієнта або для зручності), SOCKS5 пропонує цю можливість.
- Сучасні програми: Більшість сучасного програмного забезпечення та операційних систем, які підтримують SOCKS-проксі, підтримуватимуть SOCKS5.
- Гнучкість та перспективність: SOCKS5 пропонує більш надійне та універсальне рішення, яке краще пристосоване для обробки різноманітних та мінливих мережевих вимог.
Практичні міркування
При інтеграції SOCKS-проксі враховуйте наступне:
- Безпека: Ні SOCKS4, ні SOCKS5 не шифрують самі дані. Вони насамперед полегшують з'єднання. Для безпечного зв'язку переконайтеся, що трафік програми сам по собі зашифрований (наприклад, за допомогою TLS/SSL для HTTPS-трафіку або шляхом тунелювання SOCKS-з'єднання через VPN).
- Підтримка програм: Переконайтеся, що клієнтська програма або конфігурація операційної системи підтримує обрану версію протоколу SOCKS. Більшість сучасних програм за замовчуванням використовують SOCKS5, якщо він доступний.
- Продуктивність: Різниця в продуктивності між SOCKS4 та SOCKS5 зазвичай незначна для типових TCP-з'єднань. Накладні витрати, спричинені узгодженням та автентифікацією SOCKS5, мінімальні. Основним фактором продуктивності буде затримка мережі та пропускна здатність між клієнтом, проксі та цільовим сервером.
- Конфігурація: Налаштування SOCKS-проксі зазвичай передбачає вказівку IP-адреси або імені хоста проксі-сервера, порту, а для SOCKS5 — потенційно облікових даних для автентифікації.
# Приклад конфігурації програми (концептуальна)
proxy_type = SOCKS5
proxy_host = proxy.example.com
proxy_port = 1080
proxy_username = myuser
proxy_password = mypassword
Вибір SOCKS5 замість SOCKS4 є чіткою перевагою для сучасних мереж, пропонуючи ширший набір функцій та покращені можливості безпеки для широкого спектра застосувань.
