3. Протокол SOCKS організовує процедуру взаємодії
клієнт-серверних додатків на сеансовому рівні моделі OSI
через сервер-посередник або рrоху-сервер.
Призначення протоколу
4. У загальному випадку програми-посередники, які
традиційно використовуються в міжмережевих екранах,
можуть виконувати наступні функції:
ідентифікацію і автентифікацію користувачів;
криптозахист даних, що передаються;
розмежування доступу до ресурсів внутрішньої мережі;
розмежування доступу до ресурсів зовнішньої мережі;
фільтрацію і перетворення потоку повідомлень, наприклад
пошук вірусів і прозоре шифрування інформації;
трансляцію внутрішніх мережевих адрес для вихідних
потоків повідомлень.
Функції SOCKS 5
6. Елементи SOCKS 5
Згідно специфікації протоколу SOCKS
розрізняють SOCKS-cepвep, який доцільно
встановлювати на шлюз мережі (міжмережний
екран в серверному виконанні), і SOCKS-клієнт,
який встановлюють на кожен комп'ютер
користувача.
SOCKS-сервер забезпечує взаємодію з будь-
яким прикладним сервером від імені відповідного
цьому серверу прикладного клієнта.
SOCKS-клієнт призначений для перехоплення
усіх запитів до прикладного сервера з боку клієнта
і передачі їх SOCKS-серверу.
6
7. Порядок встановлення з'єднання
по протоколу SOCKS
Загальний порядок встановлення з'єднання по
протоколу SOCKS версії 5 :
запит прикладного клієнта, що бажає встановити
з'єднання з будь-яким прикладним сервером в мережі,
перехоплює встановлений на цьому ж комп'ютері
SOCKS-клієнт;
з'єднавшись з SOCKS-сервером, SOCKS-клієнт
повідомляє йому ідентифікатори усіх методів
автентифікації, які він підтримує;
SOCKS-сервер вирішує, яким методом автентифікації
скористатися (якщо SOCKS-сервер не підтримує жоден з
методів автентифікації, запропонованих SOCKS-
клієнтом, з'єднання розривається);
7
8. Порядок встановлення з'єднання
по протоколу SOCKS
за підтримки яких-небудь запропонованих методів
автентифікації SOCKS-сервер відповідно до вибраного
методу автентифікує користувача, від імені якого
виступає SOCKS-клієнт; у разі безуспішної
автентифікації SOCKS-сервер розриває з'єднання;
після успішної автентифікації SOCKS-клієнт
передає SOCKS-серверу DNS-ім’я або IP-адрес
прикладного сервера в мережі до якого здійснюється
запит, і далі SOCKS-сервер на основі наявних правил
розмежування доступу приймає рішення про
встановлення з'єднання з цим прикладним сервером;
8
9. Порядок встановлення з'єднання
по протоколу SOCKS
у разі встановлення з'єднання прикладний клієнт і
прикладний сервер взаємодіють один з одним цепі
з'єднань, в якій SOCKS-сервер ретранслює дані, а
також може виконувати функції посередництва по
захисту мережевої взаємодії; наприклад, якщо в ході
автентифікації SOCKS-клієнт і SOCKS-сервер
обмінялися сеансовим ключем, то увесь трафік між
ними може шифруватися.
9
11. Взаємодія сервера та клієнта
При спробі користувача захищеної
віртуальної мережі встановити з'єднання з яким-
небудь прикладним сервером SOCKS-клієнт
починає взаємодіяти з SOCKS -сервером. Після
закінчення першого етапу взаємодії користувач
буде автентифікован, а перевірка правил
доступу покаже, чи має він право з'єднатися з
конкретним серверним додатком, що
функціонує на комп'ютері з вказаною адресою.
Подальша взаємодія може відбуватися по
криптографічний захищеному каналу.
11
12. Приклад реалізаці SOCKS5 HTTP
Client з GitHub
SOCKS v5 HTTP client implementation in JavaScript for Node.js.
var shttp = require('socks5-http-client');
shttp.get('http://www.google.com/', function(res) {
res.setEncoding('utf8');
res.on('readable', function() {
console.log(res.read()); // Log response to console.
});
});
URLs are parsed using url.parse. You may also pass an options hash as the
first argument to get or request.
12
13. Приклад реалізаці SOCKS5 HTTP
Client з GitHub
Using with Request
To use with Request, just pass a reference to the Agent constructor.
var Agent = require('socks5-http-client/lib/Agent');
request({
url: 'http://en.wikipedia.org/wiki/SOCKS',
agentClass: Agent,
agentOptions: {
socksHost: 'my-tor-proxy-host', // Defaults to 'localhost'.
socksPort: 9050 // Defaults to 1080.
}
}, function(err, res) {
console.log(err || res.body);
});
13