SSH 터널링을 사용하여 제한된 서버에 액세스하고 안전하게 탐색하는 방법
SSH 클라이언트는 다른 컴퓨터 앞에 앉아있는 것처럼 터미널 명령을 실행할 수있는 Secure Shell 서버에 연결합니다. 하지만 SSH 클라이언트를 사용하면 로컬 시스템과 원격 SSH 서버 사이에서 포트를 "터널링"할 수도 있습니다.
세 가지 유형의 SSH 터널링이 있으며 모두 다른 용도로 사용됩니다. 각각은 SSH 서버를 사용하여 하나의 네트워크 포트에서 다른 네트워크 포트로 트래픽을 리디렉션하는 것을 포함합니다. 트래픽은 암호화 된 SSH 연결을 통해 전송되므로 전송 중에 모니터링하거나 수정할 수 없습니다..
이 작업은 SSH
Linux, macOS 및 기타 UNIX와 유사한 운영 체제에 포함되어 있습니다. 내장 된 ssh 명령을 포함하지 않는 Windows에서는 SSH 서버에 연결하기 위해 PuTTY라는 무료 도구를 사용하는 것이 좋습니다. SSH 터널링도 지원합니다..
로컬 포트 포워딩 : 로컬 시스템에서 원격 리소스 액세스 가능
"로컬 포트 전달"을 사용하면 인터넷에 노출되지 않은 로컬 네트워크 리소스에 액세스 할 수 있습니다. 예를 들어 집에서 사무실의 데이터베이스 서버에 액세스하려고한다고 가정 해 봅시다. 보안상의 이유로 해당 데이터베이스 서버는 로컬 오피스 네트워크의 연결을 수락하도록 구성됩니다. 하지만 사무실의 SSH 서버에 액세스 할 수 있고 SSH 서버가 사무실 네트워크 외부의 연결을 허용하면 집에서 SSH 서버에 연결하고 사무실에있는 것처럼 데이터베이스 서버에 액세스 할 수 있습니다. 이는 다양한 네트워크 리소스를 보호하는 것보다 공격에 대해 단일 SSH 서버를 보호하는 것이 더 쉽기 때문에 종종 그렇습니다..
이렇게하려면 SSH 서버와 SSH 연결을 설정하고 로컬 PC의 특정 포트 (예 : 포트 1234)에서 트래픽을 데이터베이스 서버의 주소와 사무실 네트워크의 포트로 전달하도록 클라이언트에 지시하십시오. 따라서 포트 1234의 데이터베이스 서버에 액세스하려고하면 현재 PC 인 "localhost"가 트래픽을 자동으로 SSH 연결을 통해 "터널링"하여 데이터베이스 서버로 보냅니다. SSH 서버는 중간에 위치하여 트래픽을 앞뒤로 전달합니다. 모든 명령 행 또는 그래픽 도구를 사용하여 로컬 PC에서 실행중인 것처럼 데이터베이스 서버에 액세스 할 수 있습니다.
로컬 전달을 사용하려면 SSH 서버에 정상적으로 연결하면서 -엘
논의. 구문은 다음과 같습니다.
ssh -L local_port : remote_address : remote_port [email protected]
예를 들어 사무실의 데이터베이스 서버가 사무실 네트워크의 192.168.1.111에 있다고 가정 해 봅시다. 사무실의 SSH 서버에 대한 액세스 권한이 있습니다. ssh.youroffice.com
, SSH 서버의 사용자 계정은 다음과 같습니다. 단발
. 이 경우 명령은 다음과 같습니다.
ssh -L 8888 : 192.168.1.111 : 1234 [email protected]
이 명령을 실행하면 localhost의 포트 8888에서 데이터베이스 서버에 액세스 할 수 있습니다. 따라서 데이터베이스 서버가 웹 액세스를 제공하면 http : // localhost : 8888을 웹 브라우저에 연결하여 액세스 할 수 있습니다. 데이터베이스의 네트워크 주소가 필요한 명령 행 도구가 있다면 localhost : 8888을 가리 키십시오. PC의 포트 8888로 전송되는 모든 트래픽은 사무실 네트워크에서 192.168.1.111:1234로 터널됩니다..
SSH 서버 자체와 동일한 시스템에서 실행되는 서버 응용 프로그램에 연결하려면 좀 더 혼란 스럽습니다. 예를 들어 사무실 컴퓨터의 포트 22에서 실행중인 SSH 서버가 있다고 가정하지만 동일한 주소의 동일한 시스템에서 포트 1234에서 실행되는 데이터베이스 서버가 있다고 가정 해 봅시다. 집에서 데이터베이스 서버에 액세스하려고하지만 시스템은 포트 22에서 SSH 연결 만 수락하고 방화벽은 다른 외부 연결을 허용하지 않습니다..
이 경우 다음과 같은 명령을 실행할 수 있습니다.
ssh -L 8888 : localhost : 1234 [email protected]
현재 PC의 포트 8888에서 데이터베이스 서버에 액세스하려고하면 트래픽은 SSH 연결을 통해 전송됩니다. SSH 서버를 실행하는 시스템에 도착하면 SSH 서버는 SSH 서버 자체를 실행하는 동일한 PC 인 "localhost"에서 포트 1234로이 서버를 보냅니다. 따라서 위의 명령에서 "localhost"는 원격 서버의 관점에서 "localhost"를 의미합니다.
Windows의 PuTTY 응용 프로그램에서이를 수행하려면 연결> SSH> 터널을 선택하십시오. "로컬"옵션을 선택하십시오. "Source Port"에 로컬 포트를 입력하십시오. "대상"의 경우 remote_address 형식으로 대상 주소와 포트를 입력하십시오. remote_port.
예를 들어 위와 동일한 SSH 터널을 설정하려면 다음과 같이 입력하십시오. 8888
원본 포트로 localhost : 1234
목적지로. 나중에 "추가"를 클릭 한 다음 "열기"를 클릭하여 SSH 연결을 엽니 다. 연결하기 전에 메인 "세션"화면에 SSH 서버 자체의 주소와 포트를 입력해야합니다..
원격 포트 포워딩 : 원격 시스템에서 로컬 리소스에 액세스 가능하게 만들기
"원격 포트 포워딩"은 로컬 포워딩의 반대이며 자주 사용되지 않습니다. SSH 서버에서 로컬 PC의 리소스를 사용할 수 있습니다. 예를 들어 앞에 앉아있는 로컬 PC에서 웹 서버를 실행한다고 가정 해 봅시다. 하지만 PC가 서버 소프트웨어로 들어오는 트래픽을 허용하지 않는 방화벽 뒤에 있습니다..
원격 SSH 서버에 액세스 할 수 있다고 가정하면 해당 SSH 서버에 연결하고 원격 포트 전달을 사용할 수 있습니다. SSH 클라이언트는 SSH 서버의 특정 포트 (예 : 포트 1234)를 현재 PC 또는 로컬 네트워크의 특정 주소와 포트로 전달하도록 서버에 지시합니다. 누군가가 SSH 서버의 포트 1234에 액세스하면 해당 트래픽은 자동으로 SSH 연결을 통해 "터널링"됩니다. SSH 서버에 액세스 할 수있는 사용자라면 누구나 PC에서 실행중인 웹 서버에 액세스 할 수 있습니다. 이것은 효과적으로 방화벽을 통과하는 방법입니다.
원격 전달을 사용하려면 SSH
명령과 함께 -아르 자형
논의. 구문은 로컬 전달과 거의 같습니다.
ssh -R remote_port : local_address : local_port [email protected]
로컬 SSH 서버의 포트 8888에서 로컬 PC의 포트 1234를 수신하는 서버 응용 프로그램을 만들고자한다고 가정 해 봅시다. SSH 서버의 주소는 다음과 같습니다. ssh.youroffice.com
SSH 서버의 사용자 이름은 다음과 같습니다. 단발. 다음 명령을 실행합니다.
ssh -R 8888 : localhost : 1234 [email protected]
그런 다음 누군가가 8888 포트에서 SSH 서버에 연결할 수 있으며 그 연결은에서 연결을 설정 한 로컬 PC의 1234 포트에서 실행되는 서버 응용 프로그램으로 터널링됩니다..
Windows에서 PuTTY로이를 수행하려면 연결> SSH> 터널을 선택하십시오. "원격"옵션을 선택하십시오. "Source Port"에 원격 포트를 입력하십시오. "대상"의 경우 대상 주소 및 포트를 local_address 형식으로 입력하십시오. local_port.
예를 들어 위의 예를 설정하려면 다음을 입력하십시오. 8888
원본 포트로 localhost : 1234
목적지로. 나중에 "추가"를 클릭 한 다음 "열기"를 클릭하여 SSH 연결을 엽니 다. 연결하기 전에 메인 "세션"화면에 SSH 서버 자체의 주소와 포트를 입력해야합니다..
그러면 사람들은 SSH 서버의 포트 8888에 연결할 수 있으며 트래픽은 로컬 시스템의 포트 1234로 터널링됩니다.
기본적으로 원격 SSH 서버는 동일한 호스트의 연결 만 수신합니다. 즉, SSH 서버 자체와 동일한 시스템에있는 사람들 만 연결할 수 있습니다. 보안상의 이유로 이 동작을 무시하려면 원격 SSH 서버의 sshd_config에서 "GatewayPorts"옵션을 활성화해야합니다.
동적 포트 전달 : SSH 서버를 프록시로 사용
프록시 또는 VPN과 유사하게 작동하는 "동적 포트 포워딩"도 있습니다. SSH 클라이언트는 사용할 응용 프로그램을 구성 할 수있는 SOCKS 프록시를 만듭니다. 프록시를 통해 전송 된 모든 트래픽은 SSH 서버를 통해 전송됩니다. 이것은 로컬 전달과 비슷합니다. 로컬 트래픽은 PC의 특정 포트로 전송 된 로컬 트래픽을 받아 SSH 연결을 통해 원격 위치로 전송합니다.
예를 들어 공용 Wi-Fi 네트워크를 사용한다고 가정 해 보겠습니다. 기웃 거리지 않고 안전하게 탐색하려고합니다. 가정에서 SSH 서버에 액세스 할 수있는 경우 SSH 서버에 연결하여 동적 포트 전달을 사용할 수 있습니다. SSH 클라이언트는 PC에 SOCKS 프록시를 생성합니다. 해당 프록시로 전송 된 모든 트래픽은 SSH 서버 연결을 통해 전송됩니다. 공용 Wi-Fi 네트워크를 모니터링하는 사람은 누구도 액세스 할 수있는 웹 사이트를 탐색하거나 검열 할 수 없습니다. 방문하는 웹 사이트의 관점에서 볼 때, 집에서 PC 앞에 앉아있는 것처럼 보일 것입니다. 이것은 또한 미국 이외의 지역에서이 트릭을 사용하여 미국 전용 웹 사이트에 액세스 할 수 있음을 의미합니다. 물론 미국 내 SSH 서버에 액세스 할 수 있다고 가정 할 경우.
또 다른 예로, 홈 네트워크에있는 미디어 서버 응용 프로그램에 액세스 할 수 있습니다. 보안상의 이유로 SSH 서버 만 인터넷에 노출 될 수 있습니다. 인터넷에서 미디어 서버 응용 프로그램으로 들어오는 연결을 허용하지 않습니다. 동적 포트 포워딩을 설정하고 SOCKS 프록시를 사용하도록 웹 브라우저를 구성한 다음 집에서 SSH 시스템 앞에 앉아있는 것처럼 웹 브라우저를 통해 홈 네트워크에서 실행되는 서버에 액세스 할 수 있습니다. 예를 들어, 미디어 서버가 홈 네트워크의 포트 192.168.1.123에있는 경우 주소를 연결할 수 있습니다 192.168.1.123
SOCKS 프록시를 사용하는 모든 응용 프로그램에 연결하면 홈 네트워크에있는 것처럼 미디어 서버에 액세스 할 수 있습니다..
동적 전달을 사용하려면 다음 명령으로 ssh 명령을 실행하십시오. -디
인수, 이렇게 :
ssh -D local_port [email protected]
예를 들어 SSH 서버에 대한 액세스 권한이 있다고 가정 해 봅시다. ssh.yourhome.com
SSH 서버의 사용자 이름은 다음과 같습니다. 단발
. 동적 전달을 사용하여 현재 PC의 포트 8888에서 SOCKS 프록시를 열려고합니다. 다음 명령을 실행합니다.
ssh -D 8888 [email protected]
그런 다음 로컬 IP 주소 (127.0.01)와 포트 8888을 사용하도록 웹 브라우저 또는 다른 응용 프로그램을 구성 할 수 있습니다. 해당 응용 프로그램의 모든 트래픽은 터널을 통해 재 지정됩니다.
Windows에서 PuTTY로이를 수행하려면 연결> SSH> 터널을 선택하십시오. "동적"옵션을 선택하십시오. "Source Port"에 대해 로컬 포트를 입력하십시오.
예를 들어 포트 8888에서 SOCKS 프록시를 만들려면 다음을 입력합니다. 8888
원본 포트로. 나중에 "추가"를 클릭 한 다음 "열기"를 클릭하여 SSH 연결을 엽니 다. 연결하기 전에 메인 "세션"화면에 SSH 서버 자체의 주소와 포트를 입력해야합니다..
그런 다음 로컬 PC의 SOCKS 프록시 (즉, 로컬 PC를 가리키는 IP 주소 127.0.0.1)에 액세스하도록 응용 프로그램을 구성하고 올바른 포트를 지정합니다.
예를 들어, SOCKS 프록시를 사용하도록 Firefox를 구성 할 수 있습니다. 이것은 Firefox가 자체 프록시 설정을 가질 수 있고 시스템 전체의 프록시 설정을 사용할 필요가 없기 때문에 특히 유용합니다. Firefox는 SSH 터널을 통해 트래픽을 보내고 다른 애플리케이션은 인터넷 연결을 정상적으로 사용합니다..
Firefox에서이 작업을 수행 할 때 "수동 프록시 구성"을 선택하고 SOCKS 호스트 상자에 "127.0.0.1"을 입력 한 다음 "포트"상자에 동적 포트를 입력하십시오. HTTP 프록시, SSL 프록시 및 FTP 프록시 상자를 비워 둡니다..
터널은 SSH 세션 연결이 열려있는 한 활성 상태로 유지됩니다. SSH 세션을 종료하고 서버와의 연결을 끊으면 터널도 닫힙니다. 적절한 명령 (또는 PuTTY의 적절한 옵션)으로 다시 연결하면 터널을 다시 열 수 있습니다..