ProxyChains-NG ver 4.17 README
ProxyChains는 UNIX 프로그램으로, 미리 로드된 DLL(dlsym(), LD_PRELOAD)을 통해
동적 링크된 프로그램의 네트워크 관련 libc 함수를 후킹하고
연결을 SOCKS4a/5 또는 HTTP 프록시를 통해 리다이렉트합니다.
TCP만 지원합니다 (UDP/ICMP 등은 지원하지 않음).
동작 방식은 기본적으로 일종의 HACK입니다. 따라서 여러분의 프로그램에서
동작하지 않을 수 있으며, 특히 스크립트이거나, 백그라운드 데몬처럼
수많은 프로세스를 시작하거나, dlopen()을 사용하여
"모듈"을 로드하는 경우(glibc dynlinker의 버그)에는 그럴 가능성이 있습니다.
하지만 단순히 컴파일된(C/C++) 동적 링크 프로그램에서는
동작해야 합니다.
여러분의 프로그램이 proxychains와 함께 동작하지 않는다면,
대신 iptables 기반 솔루션을 사용하는 것을 고려하십시오. 이쪽이 훨씬 더 견고합니다.
지원 플랫폼: Linux, BSD, Mac, Haiku.
*********** 주의 ***********
이 프로그램은 검열을 우회하는 데 사용될 수 있습니다.
특정 국가에서는 그렇게 하는 것이 매우 위험할 수 있습니다.
STELLEN SIE IMMER SICHER, DASS PROXYCHAINS WIE ERWARTET FUNKTIONIERT,
BEVOR SIE ES FÜR ETWAS ERNSTES VERWENDEN.
이는 프로그램과 여러분이 사용하려는 프록시
양쪽 모두와 관련됩니다.
예를 들어, ifconfig.me와 같은 "내 IP는 무엇인가" 서비스에
연결하여 실제 IP가 사용되지 않는지 확인할 수 있습니다.
자신이 무엇을 하는지 아는 경우에만 PROXYCHAINS를 사용하십시오.
PROXYCHAINS의 저자와 관리자는 이 소프트웨어의 남용 또는 오용
및 그로 인한 결과에 대해 어떠한 책임도 지지 않습니다.
*** 설치 ***
작동하는 C 컴파일러가 필요하며, 가급적 gcc를 권장
./configure --prefix=/usr --sysconfdir=/etc
make
[선택 사항] sudo make install
[선택 사항] sudo make install-config (proxychains.conf를 설치)
설치하지 않는 경우, 빌드 디렉터리에서 다음과 같이
proxychains를 사용할 수 있습니다: ./proxychains4 -f src/proxychains.conf telnet google.com 80
변경 로그:
버전 4.17
- close_range 함수에 대한 후크 추가, 최신 버전의 openssh 수정
- mac용 fat-binary-m1 옵션
- proxy_dns_old의 DNS 오류 처리 수정
- 초기화 코드 단순화
- openbsd 프리로딩 수정
- 멀티스레드 앱에서의 이중 닫기 수정
- configure 스크립트에 대한 다양한 개선
버전 4.16
- configure 스크립트의 링커 플래그 감지 회귀 수정
- 잘못된 glibc getnameinfo 시그니처에 대한 10년 된 우회 처리 제거
- OSX Monterey용 새로운 DYLD 후킹 방식 지원
- netbsd 컴파일 수정
- IPv6 localnets 지원
- execvp 실패 시 더 사용자 친화적인 오류 메시지
- proxy_getaddrinfo(): 요청 시 ai_socktype 채우기
버전 4.15
- 버그가 있는 binutils 버전에 대한 configure 스크립트 수정
- 나노초 단위로 rand_seed 초기화
- getaddrinfo에서 숫자 IPv6 지원 추가
- node가 null이고 !passive일 때 getaddrinfo의 버그 수정
- dnat 기능 추가
- raw 프록시 유형 추가
- haiku 지원 추가
- proxychains 3.1 동작을 에뮬레이트하는 proxy_dns_old 추가
- 새로운 proxy_dns_daemon 기능 추가 (실험적)
- 기타 다양한 수정
버전 4.14
- 프록시 목록에 대해 대체 proto://user:pass@ip:port 구문 허용
- 모든 프록시가 다운되었을 때 라운드 로빈 모드에서의 무한 루프 수정 (#147)
- android에서의 컴파일 수정 (#265)
- 포크된 프로세스에서의 fd 누수 수정 (#273)
- nullrouted IP에 대한 연결 시도 건너뛰기
- 특정 상황에서 프록시 목록에 호스트 이름 허용
버전 4.13
- DNS 조회 스레드의 견고성 및 세그멘테이션 오류 수정
- 비표준 서버에서의 socks5 사용자/비밀번호 인증 수정
- 메모리 누수 수정
- Solaris 지원 추가
버전 4.12
- 여러 빌드 문제 수정
- MAC의 경우
- -pie 사용 시
- 사용자 지정 CC 사용 시
- 일부 GUI 앱에 대한 호환성 수정 (8870140)
- 일부 HTTP 프록시에 대한 호환성 수정 (cf9a16d)
- debian에서 더 깔끔한 빌드를 위한 여러 경고 수정
- OSX에서 random_chain 수정 (0f6b226)
버전 4.11
- 예비 IPv6 지원
- hostsreader의 버그 수정
- OpenBSD에서의 사용을 위한 예비 지원 (caveat emptor)
버전 4.10
- 사용자 지정 LDFLAGS 사용 시 링크 순서 회귀 수정
- 약 400개 이상의 서로 다른 조회를 수행하는 프로그램에서 DNS 매핑 코드의 세그멘테이션 오류 수정
버전 4.9
- 보안 이슈 CVE-2015-3887 수정
- MSG_FASTOPEN 플래그를 처리하기 위한 sendto 훅 추가
- 문제가 있던 hostentdb를 hostsreader로 교체
- OpenBSD에서의 컴파일 수정 (다만 그곳에서는 동작하지 않음)
버전 4.8.1:
- 4.8 install-config Makefile 타깃의 회귀 수정
버전 4.8:
- getaddrinfo가 숫자 IP를 확인하기 위해 해석 대신 AI_NUMERICHOST와 함께 사용되는 드문 예외 상황 수정 (nmap 수정).
- 자체적으로 LD_PRELOAD에 의존하는 프로그램과의 사용 허용
- 설정 파일의 잘못된 항목 거부
- 시작 시 버전 번호 출력
버전 4.7:
- crass가 만든 새로운 round_robin chaintype.
- GCC 생성자가 사용되지 않았을 때의 지연 할당 버그 수정.
- OS X에서 "fat" 바이너리/라이브러리를 생성하기 위한 새로운 configure 플래그 --fat-binary
- close 훅에서 EINTR 대신 EBADF 반환.
프로그램이 EINTR을 받았을 때 close() 호출을 재시도하는 것은 합법이며,
이는 chromium에서 확인된 것처럼 무한 루프를 유발할 수 있음.
버전 4.6:
- Makefile에 대한 몇 가지 외관상 수정, 숫자가 아닌 IP가
프록시 서버 주소로 사용될 때의 버그 수정.
버전 4.5:
- OpenSSH가 내부 인프라를 건드리지 않도록 close() 훅.
이로 인해 프록시화된 ssh 클라이언트가 세그멘테이션 오류를 일으켰음.
버전 4.4:
- FreeBSD 포트
- Debian 및 Mac에서의 일부 설치 문제 수정.
버전 4.3:
- irssi처럼 자식 프로세스(fork()된)에서 dns 조회를 수행하는 프로그램 수정.
이를 위해 pthreads 없이 컴파일하는 지원이 희생됨.
- gethostent() 호출의 스레드 안전성 수정.
- hostent db가 캐시되므로 DNS 처리 속도 향상.
버전 4.2:
- ubuntu 12.04 툴체인과의 컴파일 문제 수정
- 드문 코드 경로에서의 세그멘테이션 오류 수정
버전 4.1
- mac os x 지원 (모든 아키텍처)
- 모든 내부 함수는 -DTHREAD_SAFE로 컴파일될 때 스레드 안전함
(기본값).
버전 4.0
- dnsresolver 스크립트(동적으로 링크된 "dig" 바이너리가 존재해야 했음)를
원격 DNS 조회로 교체.
이는 이전 스크립트가 TCP를 사용해야 했기 때문에 DNS를 포함한 모든 작업의 속도를 높임.
추가로 TOR와 함께 사용할 때 .onion url을 사용할 수 있게 함.
- 깨진 autoconf 빌드 시스템을 간단한 Makefile로 교체.
다만 편의를 위해 ./configure 스크립트가 있음.
또한 명령줄 스위치/환경 변수를 통해 전달되는 설정 파일 지원을 추가함.
버전 3.0
- 프록시를 통한 DNS 해석 지원
SOCKS4, SOCKS5 및 HTTP CONNECT 프록시 서버 지원.
인증 유형: socks - "user/pass" , http - "basic".
언제 사용하나요?
- LAN에서 "외부"로 나가는 유일한 방법이 프록시 서버를 통하는 경우.
- 나가는 포트를 필터링하는 제한적인 방화벽 뒤에서 나가야 할 때.
- 두 개(또는 그 이상)의 프록시를 체인으로 사용할 때:
예: your_host <--> proxy1 <--> proxy2 <--> target_host
- 프록시 지원이 내장되지 않은 일부 프로그램(예: telnet)을 "프록시화"할 때
- 프록시를 통해 외부에서 인트라넷에 접근할 때.
- 프록시 뒤에서 DNS를 사용할 때.
- 숨겨진 tor onion 서비스에 접근할 때.
몇 가지 멋진 기능:
- 이 프로그램은 동일한 체인에서 서로 다른 프록시 유형을 혼합할 수 있음
예: your_host <-->socks5 <--> http <--> socks4 <--> target_host
- 다양한 체이닝 옵션 지원
목록에서 무작위 순서 (사용자 정의 체인 길이).
정확한 순서 (목록에 나타난 순서대로)
동적 순서 (죽은 프록시를 체인에서 스마트하게 제외)
- 표준 libc 기능을 사용하는 한 대부분의 TCP 클라이언트 애플리케이션,
어쩌면 네트워크 스캐너와도 함께 사용할 수 있음.
pcap 기반 스캐닝은 동작하지 않음.
- squid, sendmail 등과 같은 서버와 함께 사용할 수 있음.
- 프록시를 통한 DNS 해석.
설정:
proxychains는 다음 순서로 설정 파일을 찾음:
- 환경 변수 PROXYCHAINS_CONF_FILE에 나열된 파일 또는
proxychains 스크립트나 바이너리에 -f 인수로 제공된 파일.
- ./proxychains.conf
- $(HOME)/.proxychains/proxychains.conf
- $(sysconfdir)/proxychains.conf **
** 보통 /etc/proxychains.conf
[ProxyList]의 첫 번째 프록시는 ip와 포트 대신 unix 도메인 소켓을
통해 접근할 수 있음. 예를 들어 소유자만 접근할 수 있는 소켓에 바인딩된
ssh 터널의 SOCKS 프록시:
$ ssh -N -o StreamLocalBindMask=0177 -D ~/.ssh/sock/socks.sock relay
[ProxyList]
socks5 unix:/home/user/.ssh/sock/socks.sock
경로는 절대 경로여야 하며 최대 107자여야 합니다. 이러한 프록시는
체인의 첫 번째 프록시로만 사용할 수 있으며, random_chain 또는
round_robin_chain 모드에서 다른 프록시와 결합할 수 없습니다.
사용 예:
$ proxychains telnet targethost.com
이 예에서는 proxychains.conf에 지정된 프록시(또는 체인된 프록시)를
통해 telnet을 실행합니다.
사용 예:
$ proxychains -f /etc/proxychains-other.conf telnet targethost2.com
이 예에서는 proxychains.conf가 아닌 다른 구성 파일을 사용하여
targethost2.com 호스트에 연결합니다.
사용 예:
$ proxyresolv targethost.com
이 예에서는 proxychains.conf에 지정된 프록시(또는 체인된 프록시)를
통해 targethost.com을 확인합니다.
알려진 문제:
-
최신 버전의 nmap은 필요하지 않은 경우에도(예: 표준 POSIX 소켓 API를
사용하는 단순 syn 스캔 시) 사용할 네트워크 인터페이스를 확인하려고
시도합니다. 이로 인해 proxychains가 예약된 주소 공간에 IP 주소를
할당할 때 오류가 발생합니다.
가능한 해결 방법: proxy_dns 비활성화, 숫자 IP 사용, 또는 nmap의
기본 SOCKS 프록시 지원 사용.
-
Mac OS X 10.11 (El Capitan)에는 시스템 앱 후킹을 방지하는 SIP라는
새로운 보안 기능이 포함되어 있습니다.
해결 방법은 복구 모드에서 csrutil enable --without debug를 실행하여
SIP를 부분적으로 비활성화하거나, 시스템 바이너리를 홈 디렉터리에
복사하여 그곳에서 실행하는 것입니다.
자세한 내용은 github issue #78을 참조하세요.
-
glibc dynlinker에는 dlopen()된 모듈이 메인 프로그램에 설치된 것과
동일한 dlsym 후크의 적용을 받지 않도록 하는 버그 또는 보안 기능이
있습니다. 이는 주로 C로 작성된 모듈에 dlopen()을 많이 의존하는
perl이나 python 같은 스크립팅 언어에 영향을 미칩니다.
루트로는 작동한다는 확인되지 않은 보고가 있습니다.
musl libc는 이 버그의 영향을 받지 않습니다.
유용한 링크
다음 사이트는 누출 여부를 확인하는 데 유용할 수 있습니다:
https://ipfighter.com/
https://browserleaks.com/webrtc
https://dnsleaktest.com
http://check.torproject.org - tor 전용
http://ifconfig.me - curl을 통해 사용 가능
http://ifconfig.io/
커뮤니티:
irc.libera.chat의 #proxychains
기부:
비트코인 기부를 환영합니다 - 다음 주소로 보내주세요:
1C9LBpuy56veBqw5N33sZMoZW8mwCw3tPh