일반인의 용어로 설명된 SSH 터널링

일반인의 용어로 설명된 SSH 터널링

방금 사용했어요이 가이드내 회사 프록시를 우회하기 위한 SSH 터널을 만듭니다. 일반적인 "Putty"를 사용하는 대신 "MobaXterm"(유닉스 도구도 제공하는 퍼티와 유사한 프로그램)을 사용하여 터널을 생성했습니다.

ssh -D 7070 -p 22 [email protected] sleep 9999

그런 다음 브라우저(Firefox)를 열고 사용하라고 했습니다.양말존재하다로컬 호스트포트7070.

모든 것이 잘 작동하고 있지만 기본 기술이 실제로 어떻게 작동하는지 모르겠습니다. 제 말은, 일반적으로 프로세스가 어떻게 진행되는지 알고 있지만 좀 더 깊이 들어가고 싶습니다.

내 말은, 현재 우리는 내 지식을 자동차에 대한 지식과 비교할 수 있다는 뜻입니다. 엔진, 바퀴 4개 등이 있다는 것은 알지만, 엔진이 실제로 휘발유를 사용하여 자동차를 움직이는 방법은 알 수 없습니다. 지금까지 제가 받은 두 가지 답변은 제가 이미 알고 있는 내용을 설명해 줄 뿐입니다. 저는 CCNP를 보유하고 있으며 데이터 센터에서 네트워크 엔지니어로 일했으며 프로그래밍 방법을 알고 Linux 환경에 대한 충분한 지식을 가지고 있습니다. 완전한(그러나 20페이지 미만의 RFC 길이) 답변을 제공해 주시기 바랍니다.

답변에는 다음이 포함되어야 합니다.

  1. 기본 터널 옵션에 대한 설명입니다. 좋은 예는 이 답변의 그림입니다.SSH 터널에 대해 알아보기
  2. 어떤 터널을 언제, 어떤 용도로 사용하는지(일반 터널, 역방향 터널)
  3. 터널 전/후의 Wireshark 캡처
  4. 과정을 설명하는 사진 (결국 나는 시각적인 사람이다)

약속해요100점 드립니다이 문제에 현상금을 걸 수 있게 되자마자. 정말 좋은 대답이 필요해요. (포상금을 잊어버린 경우 ilcon7e[at]gmail[dot]com으로 이메일을 보내주세요.

편집하다

문제가 개선되었습니다.

답변1

회사 방화벽에 의해 차단되지 않은 웹사이트를 방문하면 브라우저는 포트 80(기본값)을 통해 URL에 나열된 서버로 요청을 보냅니다. 예를 들어, 이 사이트에 액세스하기 위해 당사 브라우저는 포트 80에서 서버와 통신합니다.unix.stackexchange.com

프록시 설정을 지정할 때 localhostURL이 무엇이든 상관없이 모든 것을 포트 7070으로 보내도록 브라우저에 지시합니다. 프록시 서버는 클라이언트를 대신하여 단순히 데이터를 가져오도록 설계되었습니다. 다양한 프록시 서버를 사용할 수 있습니다(disto 저장소를 빠르게 검색하면 일부를 찾을 수 있습니다. squid그 중 하나 이며 apache웹 서버 nginx도 프록시 역할을 할 수 있습니다). 프록시가 웹 사이트에 대한 액세스를 시도하므로 서버를 설치해도 도움이 되지 않습니다. 귀하를 대신하지만 여전히 회사 방화벽에 의해 차단됩니다.

그러나 원격 사이트( )의 데몬 ssh과 함께 -D 옵션을 사용하면 서버가 로컬 과 원격의 두 부분으로 분할된다는 점을 제외하면 프록시 서버처럼 작동합니다 .sshdyourserver.comsshsshd

브라우저의 요청은 포트에서 수신 대기 중인 컴퓨터의 클라이언트 http://unix.stackexchange.com로 전송됩니다 . 그러면 요청이 암호화되어 원격 서버로 전송됩니다. 그러면 요청을 해독하여 관련 서버(역시 포트 80)로 보내고 반환 경로(서버가 응답을 반환해야 하는 IP 주소 및 포트)를 서버 경로 ( )로 수정합니다.ssh7070sshdunix.stackexchange.comsshdyourserver.com

Stack Exchange 웹 서버는 이 프록시에 대해 아무것도 모르고 서버의 IP 주소와 포트에 대해 사용자가 요청하는 모든 페이지에 응답합니다 sshd(이 작은 수정 덕분에). 그러나 이 서버는 요청이 ssh귀하의 컴퓨터에서 실행되어 발생했음을 알고 있으므로(이러한 정보 테이블을 유지 관리함) 이를 암호화하여 귀하에게 다시 보냅니다. ssh귀하의 컴퓨터에 있는 서버는 귀하의 브라우저로 응답을 다시 보내며, 브라우저는 귀하를 위해 웹페이지를 충실하게 표시합니다.

ssh이는 분산 에이전트처럼 작동합니다. 여기서 "터널"은 프록시가 두 부분으로 분할되어 누구도 스누핑할 수 없는 암호화된 터널을 통해 서로 통신하며 (귀하의 경우) 방화벽에 의해 차단되지 않는 포트를 사용하고 있다는 사실입니다. (포트 22).

답변2

매우 높은 수준의 개요:

  1. -D옵션은 ssh가 SOCKS 프로토콜을 사용하여 이 포트에서 연결을 수신하도록 지시합니다. SSH에 연결하고 SOCKS 프로토콜을 사용하도록 Firefox를 구성합니다.

  2. 당신은 입력http://www.google.com브라우저로 이동하세요.

  3. Firefox는 이 SOCKS 포트에 연결됩니다. SOCKS는 많은 일을 할 수 있지만 우리가 관심을 갖는 것은 이것입니다: Firefox는 SOCKS 서버(ssh)에게 "야, www.google.com에 접속해서 이 HTTP 요청을 줄 수 있니? 그런 다음 말해줘(Firefox) ) www.google .com 이에 대한 응답은 무엇입니까?" (Firefox는 ssh가 SSH 터널을 통해 요청을 전달할 것이라는 사실을 모르고 실제로 신경 쓰지 않습니다.)

  4. ssh는 ssh 연결을 따라 해당 요청을 원격 시스템(아마도 sshd)에서 실행 중인 항목으로 전달합니다.

  5. 원격 컴퓨터에서 실행되는 프로그램은 연결을 설정하고 Google에 데이터를 보내고 응답을 받습니다.

  6. 요청 시 원격 컴퓨터의 프로그램은 컴퓨터의 SSH 응답이 무엇인지 알려줍니다.

  7. 요청 시 컴퓨터의 SSH는 Firefox에 응답이 무엇인지 알려줍니다.

  8. Firefox는 그것이 웹 페이지임을 알고 표시하기 시작합니다.

  9. 모든 이미지, JavaScript, CSS 등에 대해 여러 번 반복합니다.

관련 정보