
proxychains - 주어진 애플리케이션이 만드는 모든 TCP 연결이 TOR 또는 다른 SOCKS4, SOCKS5, HTTP(S) 프록시 같은 프록시를 거치도록 강제하는 도구. 지원되는 인증 유형: SOCKS4/5의 경우 "user/pass", HTTP의 경우 "basic".
ProxyChains는 UNIX 프로그램으로, 동적으로 링크된 프로그램에서 미리 로드된 DLL을 통해 네트워크 관련 libc 함수를 후킹(hook)하고 SOCKS4a/5 또는 HTTP 프록시를 통해 연결을 리디렉션합니다.
경고: 이 프로그램은 동적으로 링크된 프로그램에서만 작동합니다. 또한 proxychains와 호출할 프로그램 모두 동일한 동적 링커(즉, 동일한 libc)를 사용해야 합니다.
프로세스가 fork를 수행하고, 자식 프로세스에서 DNS 조회를 한 다음, 부모 프로세스에서 해당 IP를 사용하는 경우, 해당 IP 매핑을 찾을 수 없습니다. 이는 fork가 부모의 매핑 테이블에 다시 기록할 수 없기 때문입니다. IRSSI에서 이런 동작이 나타나므로, 확인된 IP 주소를 직접 전달해야 합니다. (이때 proxyresolv 스크립트를 사용할 수 있으며, "dig"가 필요합니다.)
즉, 현재 irssi에 토르 onion URL을 사용할 수 없습니다. 이 문제를 해결하려면 외부 데이터 저장소(파일, 파이프 등)가 DNS <-> IP 매핑을 관리해야 합니다. 물론 적절한 잠금(locking)도 필요합니다. shm_open, mkstemp은 파일 기반 접근 방식의 후보이며, 다른 옵션은 맵 조회를 관리하는 일종의 서버 프로세스를 생성하는 것입니다. connect() 등이 후킹되므로 TCP 서버가 되어서는 안 됩니다.
설명된 동작이 꽤 어리석어 보이고(fork를 DNS 조회만을 위해 수행), 현재 irssi만이 알려진 유일한 영향을 받는 프로그램이므로 이 변경을 꺼리는 입장입니다.
Proxychains-4.3.0은 Linux, NetBSD, FreeBSD, OpenBSD, DragonFlyBSD 또는 _Mac OS X_를 사용하는 모든 사용자에게 pkgsrc로 제공됩니다. pkgsrc-wip 저장소를 설치하고 다음을 실행하기만 하면 됩니다. make install wip/proxychains 디렉터리에서 실행합니다.
pkgsrc에 대한 자세한 내용은 link:http://www.pkgsrc.org[pkgsrc]에서, pkgsrc-wip에 대한 자세한 내용은 link:https://pkgsrc.org/wip[Pkgsrc-wip 홈페이지]에서 확인할 수 있습니다.
현재 proxychains는 homebrew로 Mac OS X에 설치할 수 있습니다. 비공식 link:https://gist.github.com/3792521[homebrew formula]를 기본적으로 /usr/local/Library/Formula/인 BREW_HOME에 다운로드한 후 다음을 실행해야 합니다.
$ brew install proxychains
# needs a working C compiler, preferably gcc
./configure
make
sudo make install
*버전 (4.x)*에서는 원격 DNS 조회 시 동적으로 링크된 "dig" 바이너리가 필요했던 dnsresolver 스크립트를 제거했습니다. 이로 인해 이전 스크립트가 TCP를 사용해야 했던 DNS 관련 모든 작업이 빨라집니다. 또한 TOR와 함께 사용할 때 .onion URL을 사용할 수 있게 해줍니다. 그리고 문제가 많았던 autoconf 빌드 시스템을 간단한 Makefile로 대체했습니다. 편의를 위해 ./configure 스크립트가 여전히 제공됩니다. 또한 명령줄 스위치/환경 변수를 통해 전달되는 구성 파일 지원도 추가했습니다.
*버전 (3.x)*에서는 프록시를 통한 DNS 확인 지원을 도입했습니다. SOCKS4, SOCKS5 및 HTTP CONNECT 프록시 서버를 지원합니다.
like: your_host <--> proxy1 <--> proxy2 <--> target_host
like: your_host <-->socks5 <--> http <--> socks4 <--> target_host
proxychains nmap -sT -PO -p 80 -iR (find some webservers through proxy)
proxychains는 다음 순서로 구성을 찾습니다:
자세한 내용은 /etc/proxychains.conf를 참조하세요.
$ proxychains4 telnet targethost.com
이 예에서는 proxychains.conf에 지정된 프록시(또는 체인 프록시)를 통해 telnet을 실행합니다.
$ proxychains4 -f /etc/proxychains-other.conf targethost2.com
이 예에서는 targethost2.com 호스트에 연결하기 위해 proxychains.conf가 아닌 다른 구성 파일을 사용합니다.
$ proxyresolv targethost.com
이 예에서는 proxychains.conf에 지정된 프록시(또는 체인 프록시)를 통해 targethost.com을 확인합니다.
$ ssh -fN -D 4321 some.example.com
$ PROXYCHAINS_SOCKS5_HOST=127.0.0.1 PROXYCHAINS_SOCKS5_PORT=4321 proxychains zsh
이 예에서는 localhost 포트 4321에서 OpenSSH의 "동적 프록시"(SOCKS5 프록시)를 통해 모든 트래픽이 프록시되는 셸을 실행합니다.
$ export PROXY_DNS_SERVER=8.8.8.8
$ proxychains4 telnet targethost.com
이 예에서는 사용자가 PROXY_DNS_SERVER를 통해 지정한 8.8.8.8 네임서버를 사용하여 targethost.com에 telnet으로 접속합니다.