가끔 액세스가 매우 제한적인 서버에 연결해야합니다.
DMZ 방화벽에는 인바운드 SSH 만 허용됩니다.
아웃 바운드 HTTP 연결이 차단되었습니다.
SSH 세션을 통해 웹 액세스를 터널링하는 쉬운 방법을 찾고 있으므로 yum / apt-get을 통해 업데이트 및 소프트웨어를 설치할 수 있습니다. 이상적으로는 보호 구역에 추가 소프트웨어 / 서비스를 설치하지 않으려 고합니다.
그런 상황에서 무엇을하십니까?
SSH에는 -D <port>
SOCKS 프록시 옵션이 있습니다. 그러나 불행히도 클라이언트에서 서버로의 단방향 일뿐이며 반대 옵션은 없습니다.
답변
나는 마침내 이것을 달성 할 수있었습니다 ssh
.
- 클라이언트 시스템의 로컬 SOCKS 프록시를 시작 (사용
ssh -D
) - 원격 서버에 연결하고
ssh -R
로컬 SOCKS 프록시에 역방향 포트 전달 ( )을 설정하십시오. - 전달 된 프록시를 사용하도록 서버 소프트웨어 구성
1. 백그라운드에서 로컬 양말 프록시를 시작하십시오.
SSH를 통해 로컬 호스트에 연결하고 포트 54321에서 SOCKS 프록시를 엽니 다.
$ ssh -f -N -D 54321 localhost
-f
백그라운드에서 SSH를 실행합니다.
참고 : 명령을 시작한 터미널을 닫으면 프록시 프로세스가 종료됩니다. 또한 완료되면 터미널 창을 닫거나 프로세스를 직접 종료하여 스스로 정리해야합니다!
2. 원격 서버에 연결하고 역방향 포트 전달 설정
원격 포트 6666을 로컬 포트 54321에 바인딩합니다. 그러면 로컬 양말 프록시를 포트 6666의 원격 사이트에서 사용할 수 있습니다.
$ ssh root@target -R6666:localhost:54321
3. 전달 된 프록시를 사용하도록 서버 소프트웨어 구성
프록시를 사용하도록 yum, apt, curl, wget 또는 SOCKS를 지원하는 기타 도구 만 구성하십시오 127.0.0.1:6666
.
보일라! 행복한 터널링!
4. 옵션 : 전달 된 프록시를 사용하도록 서버 소프트웨어를 구성하십시오.
proxychains
대상 서버에 설치 하면 작업이 훨씬 쉬워졌습니다.
임의의 명령에서 프록시로 TCP 및 DNS 요청을 리디렉션 telnet
하는 LD_PRELOAD
트릭을 사용하여 모든 소프트웨어가 SOCKS 프록시를 사용할 수 있습니다 .
/etc/proxychains.conf
전달 된 양말 프록시를 사용하도록 설정 :
[ProxyList]
# SSH reverse proxy
socks5 127.0.0.1 6666
터널 임의의 도구 (즉, 사용하는 TCP)과 proxychains
:
$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
답변
최신 버전의 SSH를 사용하면 매우 간단한 옵션을 사용할 수 있습니다 ssh-R <[bind_address:]port>
. 호스트의 포트와 바인드 주소 만 사용하고 클라이언트 측 포트를 지정하지 않으면 역방향 SOCKS 프록시가 작성됩니다.
이것은 최신 SSH 버전의 매뉴얼 페이지에도 나와 있습니다.
[…] 명시 적 대상이 지정되지 않은 경우 ssh는 SOCKS 4/5 프록시로 작동하고 원격 SOCKS 클라이언트가 요청한 대상으로 연결을 전달합니다.
http://ifconfig.io 와 같은 간단한 “나에게 내 IP를주십시오”-API에 연결하여 curl로 이것을 테스트 할 수 있습니다 .
$ curl ifconfig.io
vs
$ curl --socks5 localhost:<PORT> ifconfig.io