Какво прихваща ProxyChains и какво оставя на мира
ProxyChains прихваща библиотечни извиквания в програмата, която стартира. Проверете покритието на TCP с maps, strace и една заявка, после не приемайте, че DNS или UDP следват.
ProxyChains-NG не създава тунел. Той предварително зарежда библиотека, която заменя мрежовите извиквания на libc вътре в единствената програма, която стартира, така че границата е извикване в процес, а не маршрут за цялото устройство. Тази разлика решава какво всъщност доказва успешният тест. Работещият curl през веригата потвърждава едно прихванато извикване, а не че разрешаването на имена, UDP или всеки дъщерен процес са поели същия път. Упътването по-долу проверява покритието в три стъпки, след което изброява какво прихващането не може да достигне.
Как предварителното зареждане достига до връзка
При стартиране пускачът поставя libproxychains в LD_PRELOAD и след това изпълнява целевата програма. Библиотеката разкрива истинските символи на libc и подменя свои версии на функции като connect и getaddrinfo. Извикванията, които минават през тези символи, се пренасочват към SOCKS или HTTP прокси от конфигурационния файл. Извикванията, които поемат друг път, никога не срещат прихващането, затова гаранцията е за извикване, а не за машина.
Участват само динамично свързани програми, а setuid изпълнимите файлове при сигурно изпълнение напълно пренебрегват предварителното зареждане. Дъщерните процеси наследяват средата, но само докато пускачът я държи на място.
Потвърдете, че библиотеката е заредена в този процес
Стартирайте заявката и прегледайте живия процес, а не обвивката, която го е стартирала. Файлът maps показва всеки споделен обект, който в момента е съпоставен в процеса.
proxychains4 -q curl -sS --max-time 8 https://example.com/ -o /dev/null &
pgrep -a curl
grep libproxychains /proc/$(pgrep -n curl)/mapsСъвпадението потвърждава, че прихващащата библиотека присъства, което е необходимо, но недостатъчно. Празният резултат обикновено означава, че сте прегледали друг процес, например браузър, който е предал URL на инстанция, стартирана преди пускача. Проверете с ldd дали изпълнимият файл е динамично свързан, преди да гоните друго, защото статичната сглобка изобщо не може да зареди предварителното зареждане. След това прочетете списъка с проксита в конфигурацията, която пускачът действително е използвал, тъй като остарял път или затворен порт дава работещо прихващане без работеща верига.
Проследете връзките, които напускат процеса
Наличието на библиотеката не доказва, че всяко извикване е пренаписано, затова следете системните извиквания. Пуснете една заявка под трасировчика и прочетете накъде всъщност са отишли сокетите.
strace -f -e trace=connect -o /tmp/pc.trace proxychains4 -q curl -sS https://example.com/ -o /dev/null
grep -o "sin_port=htons([0-9]*)" /tmp/pc.trace | sort -uТрасата трябва да показва връзки само към вашата прокси крайна точка, с порт, съответстващ на записа в конфигурационния файл. Ако адресите на местоназначение на целевия сайт се появят директно в трасата, това извикване е заобиколило прихващането и точно това е находката, която търсите. Сравнете номерата на портовете със списъка с проксита, вместо да вярвате на името на файла, защото останала конфигурация от друг проект е чест източник на тих директен достъп. Запазете трасата за протокола за приемане; тя отнема секунди и решава спорове за покритието.
Решете какво прихващането не може да покрие
Проектът proxychains-ng ограничава пренасочването до TCP и предупреждава, че скриптовете, фоновите процеси и заредените модули може да се държат различно от основната програма. UDP и ICMP стоят извън механизма, така че всичко, което разчита на тях, се нуждае от свой поддържан път. DNS следва настройката proxy_dns и собственото поведение на резолвера на приложението, което означава, че една успешна HTTPS заявка не ви казва нищо за разрешаването на имена. Пазете проверката на сертификати и на мястото ѝ: достигането до сървър през прокси не е причина да изключвате проверките за самоличност.
Ако директното отпадане трябва да е невъзможно, използвайте граница на прилагане, която управлява самия трафик, например мрежово пространство от имена, правила на защитна стена или VPN, и я дръжте отделно от библиотечното прихващане. Прихващането е инструмент за съвместимост за конкретна програма, а не kill switch. Запишете програмата, точната команда, прокси порта, видян в трасата, и дали DNS е бил разрешен отдалечено; тези четири факта са разликата между проверен обхват и обхват на надеждата.