LabHub
배우기 러닝패스 코스

SSHとファイル転送

トンネルを三方向に掘る

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

-L, -R, -D 세 가지 포워딩을 모두 만들어 보고, 각 터널이 어디에 포트를 여는지 직접 확인합니다.

왜 중요한가

포워딩은 방향만 헷갈리지 않으면 전부 쉽습니다. -L 은 내 쪽 포트를 열고, -R 은 저쪽 포트를 열고, -D 는 내 쪽에 SOCKS 프록시를 세웁니다. 그리고 -L 의 가운데 호스트 이름은 SSH 서버 기준으로 해석됩니다 — 내 쪽에서 그 이름이 안 풀려도 상관없습니다. 이 사실 하나가 배스천 경유 접속의 거의 전부입니다.

이 실습에서 SSH 서버는 127.0.0.1:2222 입니다. 서버와 클라이언트가 같은 호스트라 -R 결과도 바로 확인할 수 있습니다.

단계

  1. /opt/fixtures/nt-http/server.py9200 포트, 127.0.0.1 바인딩으로 띄우세요. 이것이 터널의 목적지입니다.
  2. 로컬 포워딩으로 19200127.0.0.1:9200 터널을 백그라운드로 열고, curl -s http://127.0.0.1:19200/ok 결과를 /root/tun/local.txt 로 저장하세요.
  3. 19200 을 누가 열었는지 확인해 /root/tun/proof.txt 로 저장하세요. 프로세스 이름에 ssh 가 보여야 합니다.
  4. 원격 포워딩으로 SSH 서버 쪽에 19300 을 열어 127.0.0.1:9200 으로 보내고, curl -s http://127.0.0.1:19300/ok 결과를 /root/tun/remote.txt 로 저장하세요.
  5. 동적 포워딩(SOCKS)으로 11080 을 열고, 그 프록시를 통해 http://127.0.0.1:9200/ok 를 요청한 결과를 /root/tun/socks.txt 로 저장하세요.
  6. 로컬 포워딩 하나를 더 열되 이번에는 모든 주소에 바인딩19201127.0.0.1:9200 으로 보내고, 자기 인터페이스 IP 로 접속한 결과를 /root/tun/gateway.txt 로 저장하세요.
  7. 현재 떠 있는 ssh 터널 프로세스들의 커맨드라인을 /root/tun/inventory.txt 로 저장하세요. 최소 4줄(-L 두 개, -R, -D)이 있어야 합니다.
  8. /root/tun/report.txt 를 다음 3줄로 만드세요. 각 값은 그 옵션이 포트를 여는 쪽입니다. L=local / R=remote / D=local

참고

백엔드 서비스 띄우기

/opt/fixtures/nt-http/server.py9200 포트, 127.0.0.1 바인딩으로 띄우세요. 이것이 터널의 목적지입니다.

터널의 목적지가 될 서비스가 필요합니다. 루프백에만 띄워도 터널을 통하면 접근됩니다.

로컬 포워딩

로컬 포워딩으로 19200127.0.0.1:9200 터널을 백그라운드로 열고, curl -s http://127.0.0.1:19200/ok 결과를 /root/tun/local.txt 로 저장하세요.

-L 뒤에는 세 값을 콜론으로 이어 씁니다. 가운데 호스트는 SSH 서버 기준으로 해석됩니다.

터널이 연 포트 확인

19200 을 누가 열었는지 확인해 /root/tun/proof.txt 로 저장하세요. 프로세스 이름에 ssh 가 보여야 합니다.

ss 로 리슨 소켓을 보면 프로세스 이름이 나옵니다. 터널은 ssh 프로세스가 포트를 엽니다.

원격 포워딩

원격 포워딩으로 SSH 서버 쪽에 19300 을 열어 127.0.0.1:9200 으로 보내고, curl -s http://127.0.0.1:19300/ok 결과를 /root/tun/remote.txt 로 저장하세요.

-R 은 SSH 서버 쪽에 포트를 엽니다. 이 실습에서는 서버가 같은 호스트라 결과를 바로 확인할 수 있습니다.

SOCKS 프록시

동적 포워딩(SOCKS)으로 11080 을 열고, 그 프록시를 통해 http://127.0.0.1:9200/ok 를 요청한 결과를 /root/tun/socks.txt 로 저장하세요.

-D 는 포트 하나만 받습니다. curl 에는 SOCKS5 프록시를 지정하는 옵션이 있습니다.

바깥 주소에 바인딩

로컬 포워딩 하나를 더 열되 이번에는 모든 주소에 바인딩19201127.0.0.1:9200 으로 보내고, 자기 인터페이스 IP 로 접속한 결과를 /root/tun/gateway.txt 로 저장하세요.

-L 의 앞쪽에 바인딩 주소를 추가로 적을 수 있습니다. 또는 -g 옵션을 쓰는 방법도 있습니다.

터널 목록 정리

현재 떠 있는 ssh 터널 프로세스들의 커맨드라인을 /root/tun/inventory.txt 로 저장하세요. 최소 4줄(-L 두 개, -R, -D)이 있어야 합니다.

지금 떠 있는 ssh 프로세스들의 커맨드라인을 보면 각 터널의 방향을 알 수 있습니다.

세 방향 비교표

/root/tun/report.txt 를 다음 3줄로 만드세요. 각 값은 그 옵션이 포트를 여는 쪽입니다. L=local / R=remote / D=local

포트가 어디에 열리는지가 핵심 차이입니다. 값은 local 또는 remote 로 적으세요.