****************************
SSH-туннелінг або заміна VPN
****************************

Автор: Terabyte (http://www.web-hack.ru)

Останнім часом досить велике поширення отримала технологія VPN (Virtual Private Networks). У більшості випадків її використовують люди для шифрування інформації, що передається через локальну мережу (захист від снифанья трафіку, що досить легко здійснити в мережі, навіть на свичах) та/або наступної передачі інформації через Інтернет (тут вже метою приховування своєї IP-адреси, захист від глобального снифа трафіку всієї країни (aka СОРМ, він же нинішній СОРМ2) і. д.). Багато хто вже давно використовують дану технологію VPN, але не багато знають про її дешевшою і мобільного альтернативу. А називається це — SSH-туннелінг.

Принцип даної реалізації наступного. Весь мережевий софт на компі (ну або не весь) форвардится на призначений порт (вашого локалхоста), на якому висить сервіс, з’єднаний по SSH з сервером (а як ми знаємо, з’єднання по SSH протоколу шифрується) і туннелирующий всі запити; далі, весь ваш трафік (вже не в зашифрованому вигляді) може форвардится з нашого сервера проксі (підтримує туннерирование) або сокс, який передають весь трафік до необхідних адресами. Наявність проксі або соксу не обов’язково, але якщо нам потрібна повна конспірація, то ми можемо організувати цей сервіс (proxy/socks) на іншому сервері (дана схема потрібна для створення ланцюжка адрес), але про це пізніше.

Тепер давайте розберемося з мінімальним набором інструментів і сервісів необхідних для організації даного процесу. В першу чергу нам потрібна програма для організації тунелю по SSH-протоколу. Для цієї задачі ми можемо застосувати VanDyke Entunnel (http://www.vandyke.com/products/entunnel/) або Putty (http://www.web-hack.ru/download/info.php?go=35) (вкладка ConnectionSSHTunnels). У наших прикладах я буду використовувати обидва клієнта. Далі ми можемо вручну прописувати в кожній програмі роботу через проксі або використовувати спеціалізовану програму для переспрямування запитів, таку як ProxyCap (http://proxylabs.netwu.com), SocksCap (http://www.socks.nec.com), FreeCap (http://www.freecap.ru) і т. п. В нашому прикладі буде використовуватися ProxyCap, як найбільш зручна програма (до речі, через ProxyCap ми зможемо зробити туннерирование навіть WebMoney, яка відома захистом від такого виду софта, для приховування IP). Так само нам знадобиться SSH-аккаунт (на сервері бажано розташованому за межами вашої країни =), який можна без проблем дістати (наприклад, я купую VPS-хостинг для цього) і ѕоскѕы.

Насамперед створюємо SSH-аккаунт. Далі, я пропоную вам використовувати socks-сервер, а не proxy, т. к. не всі проксі підтримують тунелювання. Також може виявитися, що сьогодні анонімний проксі, а завтра вже і не немає (якщо, звичайно, не ви самі відповідаєте за нього). До речі, перевірити свою анонімність можна тут (http://ip.xss.ru). Як я вже говорив, ми можемо використовувати сокс на віддаленій машині (для більшої безпеки). Для прикладу я покажу як встановити сокс-демон. Найбільш популярні і просунуті демони під нікс це socks5 від Permeo/NEC (http://freeware.sgi.com/source/socks5/), Dante (http://www.inet.no/dante/) та вітчизняний продукт 3proxy (http://www.security.nnov.ru/soft/3proxy/). Для прикладу я обрав класичний демон на FreeBSD — socks5.

Для тестування використовувалася FreeBSD 5-ої гілки. Я встановлював socks5 з портів (/usr/ports/net/socks5/), але і з сорца під фряхой теж все добре збирається і ставиться:
cd /usr/ports/net/socks5/
make install clean
rehash

Для нормальної роботи демона необхідний конфіг до демону socks5.conf і файл паролів socks5.passwd (якщо необхідна аутификация до сокс-сервера по паролю):
touch /usr/local/etc/socks5.conf
touch /usr/local/etc/socks5.passwd

Далі додаємо в конфіг наступні рядки:
auth — – u
permit u— – — – –
SET SOCKS5_BINDINTFC 1.2.3.4:8080
SET SOCKS5_CONFFILE /usr/local/etc/socks5.conf
SET SOCKS5_PWDFILE /usr/local/etc/socks5.passwd
SET SOCKS5_MAXCHILD 128
SET SOCKS5_NOIDENT
SET SOCKS5_NOREVERSEMAP
SET SOCKS5_NOSERVICENAME
SET SOCKS5_V4SUPPORT
SET SOCKS5_ENCRYPT
SET SOCKS5_FORCE_ENCRYPT
SET SOCKS5_UDPPORTRANGE 1023-5000

Перші два рядки вказують, що необхідна аутификация по логін/пароль. SOCKS5_BINDINTFC вказує на якийсь IP (якщо сервер кілька аліасів) і порт повісити демон. SOCKS5_MAXCHILD за замовчуванням 64, я раджу збільшити до 128, щоб всім юзерам (якщо їх багато) вистачило потоків. Далі йдуть рядки для прискорення роботи демона. SOCKS5_V4SUPPORT — підтримка 4-ої версії протоколу. SOCKS5_ENCRYPT і SOCKS5_FORCE_ENCRYPT підтримка шифрування, якщо клієнт це підтримує. За більш детальною інформацією щодо встановлення звертайтеся до файлів README і INSTALL, а за інформацією по налаштуванню до манам socks5(1) і socks5.conf(5).

Далі заповнюємо файл паролів. Він має звичайний текстовий формат і login/password поділяються в ньому пробілами:
user password
root toor

Тепер можна запускати демон і приступити до налаштування клієнтського софта:
/usr/local/bin/socks5

Запусках ProxyCap (http://forum.web-hack.ru/index.php?showtopic=29262), натискаємо правою кнопкою миші на значку в треї, Preferences. На вкладці «Proxies» вписуємо 127.0.0.1:8080 і встановлюємо у «Require Authorization» наш login/password на сокс. На вкладці «Rules» додаємо спочатку правило для Entunnel, вказавши в «Rule Type» — direct Force connetion. Далі, створюємо правило, для всього іншого софта, трафік від якого буде шифруватися і туннелироваться через сокс. У правилі вказуємо «All Programs», «Tunnel through proxy» і в випадаючому меню наш сокс. Так само можна створити правило не для всього софта, а лише вибірковий софт пускати через тунель або навпаки, створити правило для всього софта, але для деякого софта зробити прямий доступ в інет (direct Force connetion). Як доповнення можу сказати, що якщо ваша мережева програма підтримує роботу через сокс/проксі (і немає необхідності пускати відразу весь мережевий софт через тунель), то в якості налаштувань проксі ви можете вказати забинденный Entunnelем адресу і порт — 127.0.0.1:8080.

Запускаємо Entunnel і створюємо в ньому нове з’єднання по SSH. Далі, у властивостях з’єднання (Port Forwarding) додаємо наш сокс. В категорії «Local» вписуємо 127.0.0.1:8080, а в категорії «Remote» вписуємо IP і порт нашого сокс-сервера. Налаштування закінчена! Якщо щось не працює, то ще раз перечитайте всі пункти настройки.

У разі, якщо ви хочете використовувати SSH-аккаунт, як кінцеву точку (тобто не юзати соксы або проксі), то ваші налаштування повинні бути наступні (на прикладі Putty): на вкладці ConnectionSSHTunnels у рядку «Source port» вказуємо порт, на який Putty забиндится на локалхосте (наприклад, 8080), далі ставимо влажок на «Dynamic» і йдемо на вкладку «Session» прописувати адресу і порт сервера SSH. Коннектимся…