ProxyChains — це інструмент командного рядка для Linux, який змушує будь-яке TCP-з'єднання, встановлене програмою, проходити через вказаний список проксі-серверів, утворюючи «ланцюг» для підвищеної конфіденційності або для обходу мережевих обмежень. Він працює шляхом динамічного перехоплення системних викликів, пов'язаних з мережею, перенаправляючи їх через один або кілька налаштованих проксі-серверів, перш ніж вони досягнуть цільового призначення.
Огляд ProxyChains
ProxyChains функціонує як обгортка для інших програм, дозволяючи маршрутизувати їхній мережевий трафік через послідовність проксі. Цей механізм ланцюгування може приховати походження мережевих запитів, ускладнюючи відстеження фактичної IP-адреси джерела. Він часто використовується для анонімності, обходу географічних обмежень або доступу до мереж зі специфічними засобами контролю доступу на основі IP.
Як працює ProxyChains
ProxyChains використовує механізм LD_PRELOAD у Linux. LD_PRELOAD — це змінна середовища, яка вказує список спільних бібліотек, що завантажуються до будь-яких інших бібліотек, включаючи стандартну бібліотеку C (libc). ProxyChains надає власну спільну бібліотеку (libproxychains4.so), яка містить модифіковані версії стандартних мережевих функцій (наприклад, connect(), send(), recv()).
Коли програма виконується за допомогою ProxyChains (наприклад, proxychains4 <команда>), libproxychains4.so попередньо завантажується. Ця бібліотека перехоплює виклики програми до мережевих функцій. Замість встановлення прямих з'єднань, ці перехоплені виклики перенаправляються через налаштований проксі-ланцюг. Цей процес є прозорим для обгорнутого застосунку, який продовжує працювати так, ніби він встановлює прямі мережеві з'єднання.
Встановлення
Процедури встановлення дещо відрізняються залежно від дистрибутива Linux.
Debian/Ubuntu
sudo apt update
sudo apt install proxychains4
Fedora/CentOS/RHEL
sudo dnf install proxychains-ng
# Або для старих систем:
sudo yum install proxychains-ng
Arch Linux
sudo pacman -S proxychains-ng
З вихідного коду
Для інших дистрибутивів або специфічних версій ProxyChains можна скомпілювати з вихідного коду.
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install
sudo make install-config # Встановлює файл конфігурації за замовчуванням до /etc/proxychains.conf
Конфігурація
Основний файл конфігурації для ProxyChains зазвичай знаходиться за адресою /etc/proxychains.conf або ~/.proxychains/proxychains.conf. Якщо жоден з них не існує, proxychains.conf можна скопіювати з вихідного каталогу або /usr/share/proxychains/proxychains.conf до /etc/proxychains.conf.
Ключові директиви
Файл конфігурації визначає, як використовуються проксі та які проксі доступні.
strict_chain: Усі проксі зі списку використовуються в тому порядку, в якому вони з'являються. Якщо будь-який проксі в ланцюзі виходить з ладу, з'єднання переривається.dynamic_chain: Усі проксі зі списку використовуються, але якщо один виходить з ладу, він пропускається, і ланцюг продовжується з наступним проксі. Це забезпечує більшу стійкість.random_chain: Вказана кількість проксі (chain_len) випадково вибирається зі списку та використовується у випадковому порядку.chain_len: (Використовується зrandom_chain) Вказує кількість проксі для випадкового вибору.proxy_dns: Примушує DNS-запити вирішуватися через проксі-ланцюг, пом'якшуючи витоки DNS. Це критично важливо для анонімності.remote_dns_subnet: (Використовується зproxy_dns) Вказує IP-підмережу для використання для віддалених DNS-запитів, якщоproxy_dnsувімкнено. За замовчуванням10.0.0.0/8.
Формат списку проксі
Проксі визначаються в кінці файлу proxychains.conf у розділі [ProxyList]. Кожен запис проксі має такий формат:
type ip_address port [username] [password]
Підтримувані типи включають socks4, socks5 та http.
Приклад фрагмента proxychains.conf
# Файл конфігурації ProxyChains
# Розкоментуйте один з типів проксі-ланцюга:
# strict_chain
# dynamic_chain
random_chain
# Рандомізувати список проксі - ні, це не має сенсу.
# Зберігайте порядок проксі за замовчуванням у списку проксі та використовуйте їх у цьому порядку.
# Якщо ви хочете рандомізувати, використовуйте 'random_chain' вище.
# random_chain_len 2
# Створити хост, з якого починається ланцюг.
# Це може бути корисно для деяких застосунків.
# chain_len 2
# Проксіювати DNS-запити через ланцюг.
# Це настійно рекомендується для анонімності.
proxy_dns
# Підмережа віддаленого DNS
# Коли proxy_dns увімкнено, ця підмережа використовується для віддалених DNS-запитів.
# За замовчуванням 10.0.0.0/8
# remote_dns_subnet 10.0.0.0/8
# Тайм-аут для проксі-з'єднань.
# proxy_timeout 10000
# Список проксі – додайте свої проксі сюди
# Формат: type ip_address port [username] [password]
[ProxyList]
# socks4 127.0.0.1 9050 # Приклад для Tor (порт SOCKS за замовчуванням)
# socks5 192.168.1.1 1080
# http proxy.example.com 8080 user pass
# Приклад використання кількох проксі для ланцюга
socks5 192.168.1.10 1080
socks5 192.168.1.11 1080
http 192.168.1.12 8080
Підтримувані типи проксі
ProxyChains підтримує такі проксі-протоколи:
- SOCKS4: Простий проксі-протокол для TCP-застосунків. Не підтримує UDP або автентифікацію.
- SOCKS5: Розширений проксі-протокол, що підтримує TCP, UDP та автентифікацію. Рекомендовано для більшості випадків використання.
- HTTP: Підтримує HTTP-проксі для тунелювання TCP-з'єднань. Може використовуватися з автентифікацією або без неї.
Приклади використання
Щоб використовувати ProxyChains, додайте proxychains4 (або proxychains на деяких системах) до команди, яку ви хочете виконати через проксі.
Базове використання
Перевірте свою зовнішню IP-адресу через проксі-ланцюг:
proxychains4 curl ifconfig.me
Ця команда маршрутизуватиме запит curl через налаштований проксі-ланцюг, і ifconfig.me повідомить IP-адресу останнього проксі в ланцюзі або першого робочого проксі, якщо увімкнено dynamic_chain.
Тестування витоків DNS
З увімкненим proxy_dns у proxychains.conf:
proxychains4 curl https://ipleak.net/
Перегляньте розділ DNS на ipleak.net, щоб підтвердити, що DNS-запити вирішуються через проксі-ланцюг, а не ваш локальний DNS-сервер.
Використання з мережевими сканерами
Сканування цілі через проксі-ланцюг може приховати джерело сканування.
proxychains4 nmap -sT -Pn target.example.com
Примітка: -sS (SYN-сканування) nmap та інші режими сирих пакетів не працюють з ProxyChains, оскільки LD_PRELOAD перехоплює лише виклики сокетів вищого рівня, а не генерацію сирих пакетів. Використовуйте -sT (сканування TCP-з'єднань).
Використання з Secure Shell (SSH)
Щоб встановити SSH-з'єднання через проксі-ланцюг:
proxychains4 ssh user@remote_host.com
Використання з Wget
Завантаження файлів через проксі-ланцюг:
proxychains4 wget https://example.com/file.zip
Використання з веб-браузером (наприклад, Firefox)
ProxyChains розроблено для застосунків командного рядка. Для графічних застосунків, таких як веб-браузери, зазвичай ефективніше налаштувати параметри проксі безпосередньо в браузері або використовувати спеціальне розширення менеджера проксі. Однак, його можна примусово використовувати:
proxychains4 firefox
Цей метод часто менш стабільний і надійний для складних графічних застосунків порівняно з нативними налаштуваннями проксі.
Порівняння типів ланцюгів
| Функція | strict_chain |
dynamic_chain |
random_chain |
|---|---|---|---|
| Використання проксі | Усі проксі зі списку, по порядку. | Усі проксі зі списку, по порядку, пропускаючи невдалі. | chain_len проксі, випадково вибрані та впорядковані. |
| Відмовостійкість | Низька (з'єднання переривається, якщо будь-який проксі виходить з ладу). | Висока (пропускає невдалі проксі). | Помірна (переривається, якщо вибрані випадкові проксі виходять з ладу). |
| Анонімність | Висока (фіксований шлях, використовуються всі проксі). | Висока (фіксований шлях, використовуються всі працюючі проксі). | Змінна (випадковий шлях, щоразу різний). |
| Продуктивність | Потенційно повільніше через фіксований, повний шлях. | Швидше, якщо деякі проксі повільні/не працюють. | Змінна, залежить від вибраних проксі. |
| Варіант використання | Коли всі проксі надійні, і порядок має значення. | Коли важлива стійкість. | Коли бажано змінювати шлях для анонімності. |
Міркування безпеки та обмеження
ProxyChains — це інструмент для маршрутизації трафіку, а не повне рішення для анонімності. Користувачі повинні розуміти його обмеження.
Витоки DNS
Без увімкненого proxy_dns DNS-запити можуть вирішуватися безпосередньо локальною системою, розкриваючи реальну IP-адресу користувача DNS-серверу. Увімкнення proxy_dns є критично важливим для анонімності.
Витоки трафіку
ProxyChains в основному перехоплює TCP-з'єднання. Застосунки, які використовують UDP або інші протоколи безпосередньо (наприклад, деякі VPN-клієнти, VoIP-застосунки, певні ігри або режими сирих пакетів nmap), можуть обійти проксі-ланцюг, що призведе до витоків трафіку. Він не підходить для застосунків, що вимагають повної анонімізації мережевого стека.
Накладні витрати на продуктивність
Ланцюгування кількох проксі призводить до затримки та знижує пропускну здатність. Кожен стрибок у ланцюзі додає час обробки та мережеву затримку. Чим більше проксі в ланцюзі, тим повільнішим буде з'єднання.
Не панацея для анонімності
ProxyChains надає додатковий рівень приховування, але не гарантує абсолютної анонімності. Досвідчені зловмисники все ще можуть корелювати шаблони трафіку або використовувати інші вразливості (наприклад, відбитки браузера, витоки WebRTC) для деанонімізації користувача. Його слід використовувати в поєднанні з іншими практиками безпеки, такими як безпечна операційна система, надійні правила брандмауера та ретельний вибір застосунків.
Сумісність застосунків
ProxyChains покладається на LD_PRELOAD для перехоплення викликів бібліотек. Не всі застосунки поводяться передбачувано, коли їхні мережеві функції перехоплюються. Застосунки, які використовують власні мережеві бібліотеки, статичне компонування або специфічні інтерфейси ядра, можуть не працювати належним чином або взагалі з ProxyChains.