SSH 터널링을 사용하여 제한된 서버에 액세스하고 안전하게 탐색하는 방법

SSH 클라이언트는 Secure Shell 서버에 연결되어 다른 컴퓨터 앞에 앉아있는 것처럼 터미널 명령을 실행할 수 있습니다. 그러나 SSH 클라이언트를 사용하면 로컬 시스템과 원격 SSH 서버간에 포트를 "터널링"할 수도 있습니다.

SSH 터널링에는 세 가지 유형이 있으며 모두 다른 목적으로 사용됩니다. 각각은 SSH 서버를 사용하여 한 네트워크 포트에서 다른 네트워크 포트로 트래픽을 리디렉션합니다. 트래픽은 암호화 된 SSH 연결을 통해 전송되므로 전송 중에 모니터링하거나 수정할 수 없습니다.

sshLinux, macOS 및 기타 UNIX 계열 운영 체제에 포함 된 명령을 사용 하여이 작업을 수행 할 수 있습니다 . 기본 제공 ssh 명령이 포함되지 않은 Windows에서는 무료 도구 PuTTY를 사용하여 SSH 서버에 연결하는 것이 좋습니다. SSH 터널링도 지원합니다.

로컬 포트 ​​포워딩 : 로컬 시스템에서 원격 리소스에 액세스 할 수 있도록 설정

"로컬 포트 ​​전달"을 사용하면 인터넷에 노출되지 않은 로컬 네트워크 리소스에 액세스 할 수 있습니다. 예를 들어 집에서 사무실의 데이터베이스 서버에 액세스하려고한다고 가정 해 보겠습니다. 보안상의 이유로 해당 데이터베이스 서버는 로컬 사무실 네트워크의 연결 만 허용하도록 구성됩니다. 그러나 사무실에서 SSH 서버에 액세스 할 수 있고 해당 SSH 서버가 사무실 네트워크 외부의 연결을 허용하는 경우 집에서 해당 SSH 서버에 연결하여 사무실에있는 것처럼 데이터베이스 서버에 액세스 할 수 있습니다. 다양한 네트워크 리소스를 보호하는 것보다 공격으로부터 단일 SSH 서버를 보호하는 것이 더 쉽기 때문에 이러한 경우가 많습니다.

이를 위해 SSH 서버와 SSH 연결을 설정하고 클라이언트에게 로컬 PC의 특정 포트 (예 : 포트 1234)에서 데이터베이스 서버의 주소와 사무실 네트워크의 포트로 트래픽을 전달하도록 지시합니다. 따라서 포트 1234에서 데이터베이스 서버에 액세스하려고 할 때 현재 PC 인 "localhost"는 해당 트래픽이 SSH 연결을 통해 자동으로 "터널링"되어 데이터베이스 서버로 전송됩니다. SSH 서버는 중간에 위치하여 트래픽을 앞뒤로 전달합니다. 명령 줄 또는 그래픽 도구를 사용하여 로컬 PC에서 실행중인 것처럼 데이터베이스 서버에 액세스 할 수 있습니다.

로컬 전달을 사용하려면 SSH 서버에 정상적으로 연결하고 -L인수 도 제공하십시오 . 구문은 다음과 같습니다.

ssh -L local_port : remote_address : remote_port [email protected]

예를 들어 사무실의 데이터베이스 서버가 사무실 네트워크의 192.168.1.111에 있다고 가정 해 보겠습니다. 에서 사무실의 SSH 서버에 액세스 할 수 있으며 SSH 서버 ssh.youroffice.com의 사용자 계정은 bob입니다. 이 경우 명령은 다음과 같습니다.

ssh -L 8888 : 192.168.1.111 : 1234 [email protected]

이 명령을 실행 한 후 localhost의 포트 8888에서 데이터베이스 서버에 액세스 할 수 있습니다. 따라서 데이터베이스 서버가 웹 액세스를 제공 한 경우 // 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”에 로컬 포트를 입력합니다. "Destination"의 경우 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와 함께 명령을 사용하십시오 -R. 구문은 로컬 전달과 거의 동일합니다.

ssh -R remote_port : local_address : local_port [email protected]

원격 SSH 서버의 포트 8888에서 사용 가능한 로컬 PC의 포트 1234에서 수신 대기하는 서버 응용 프로그램을 만들고 싶다고 가정 해 보겠습니다. SSH 서버의 주소는 ssh.youroffice.com이고 SSH 서버의 사용자 이름은 bob 입니다. 다음 명령을 실행합니다.

ssh -R 8888 : localhost : 1234 [email protected]

그러면 누군가가 포트 8888에서 SSH 서버에 연결할 수 있으며 해당 연결은 연결을 설정 한 로컬 PC의 포트 1234에서 실행중인 서버 응용 프로그램으로 터널링됩니다.

Windows의 PuTTY에서이를 수행하려면 연결> SSH> 터널을 선택하십시오. "원격"옵션을 선택합니다. “Source Port”에 원격 포트를 입력합니다. "Destination"에 대상 주소와 포트를 local_address : local_port 형식으로 입력합니다.

예를 들어 위의 예를 설정 8888하려면 소스 포트와 localhost:1234대상으로 입력 합니다. 나중에 "추가"를 클릭 한 다음 "열기"를 클릭하여 SSH 연결을 엽니 다. 물론 연결하기 전에 메인“세션”화면에서 SSH 서버 자체의 주소와 포트를 입력해야합니다.

그런 다음 사람들은 SSH 서버의 포트 8888에 연결할 수 있으며 트래픽은 로컬 시스템의 포트 1234로 터널링됩니다.

기본적으로 원격 SSH 서버는 동일한 호스트의 연결 만 수신합니다. 즉, SSH 서버 자체와 동일한 시스템에있는 사람 만 연결할 수 있습니다. 이것은 보안상의 이유입니다. 이 동작을 재정의하려면 원격 SSH 서버의 sshd_config에서 "GatewayPorts"옵션을 활성화해야합니다.

동적 포트 전달 : SSH 서버를 프록시로 사용

관련 : VPN과 프록시의 차이점은 무엇입니까?

프록시 또는 VPN과 유사하게 작동하는 "동적 포트 전달"도 있습니다. SSH 클라이언트는 사용할 애플리케이션을 구성 할 수있는 SOCKS 프록시를 생성합니다. 프록시를 통해 전송 된 모든 트래픽은 SSH 서버를 통해 전송됩니다. 이것은 로컬 포워딩과 유사합니다. 로컬 트래픽을 PC의 특정 포트로 보내고 SSH 연결을 통해 원격 위치로 보냅니다.

관련 : 암호화 된 웹 사이트에 액세스 할 때에도 공용 Wi-Fi 네트워크를 사용하는 것이 위험한 이유

예를 들어 공용 Wi-Fi 네트워크를 사용하고 있다고 가정 해 보겠습니다. 스누핑되지 않고 안전하게 탐색하고 싶습니다. 집에서 SSH 서버에 액세스 할 수있는 경우 여기에 연결하여 동적 포트 전달을 사용할 수 있습니다. SSH 클라이언트는 PC에 SOCKS 프록시를 생성합니다. 해당 프록시로 전송되는 모든 트래픽은 SSH 서버 연결을 통해 전송됩니다. 공용 Wi-Fi 네트워크를 모니터링하는 사람은 탐색을 모니터링하거나 액세스 할 수있는 웹 사이트를 검열 할 수 없습니다. 방문하는 웹 사이트의 관점에서 보면 마치 집에서 PC 앞에 앉아있는 것처럼 보일 것입니다. 이것은 또한 미국 이외의 지역에서 미국 전용 웹 사이트에 액세스하는 데이 트릭을 사용할 수 있음을 의미합니다. 물론 미국의 SSH 서버에 액세스 할 수 있다고 가정합니다.

다른 예로, 홈 네트워크에있는 미디어 서버 응용 프로그램에 액세스 할 수 있습니다. 보안상의 이유로 인터넷에 SSH 서버 만 노출 될 수 있습니다. 인터넷에서 미디어 서버 응용 프로그램으로 들어오는 연결을 허용하지 않습니다. 동적 포트 포워딩을 설정하고, SOCKS 프록시를 사용하도록 웹 브라우저를 구성한 다음, 집에서 SSH 시스템 앞에 앉아있는 것처럼 웹 브라우저를 통해 홈 네트워크에서 실행되는 서버에 액세스 할 수 있습니다. 예를 들어 미디어 서버가 홈 네트워크의 포트 192.168.1.123에 192.168.1.123있는 경우 SOCKS 프록시를 사용하는 모든 응용 프로그램에 주소 를 연결하면 홈 네트워크에있는 것처럼 미디어 서버에 액세스 할 수 있습니다.

동적 전달을 사용하려면 다음과 같이 -D인수 와 함께 ssh 명령을 실행합니다 .

ssh -D local_port [email protected]

예를 들어에서 SSH 서버에 액세스 할 수 있고 SSH 서버 ssh.yourhome.com의 사용자 이름이 bob. 동적 전달을 사용하여 현재 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)에 액세스하도록 애플리케이션을 구성하고 올바른 포트를 지정할 수 있습니다.

관련 : Firefox에서 프록시 서버를 구성하는 방법

예를 들어 SOCKS 프록시를 사용하도록 Firefox를 구성 할 수 있습니다. 이것은 Firefox가 자체 프록시 설정을 가질 수 있고 시스템 전체 프록시 설정을 사용할 필요가 없기 때문에 특히 유용합니다. Firefox는 SSH 터널을 통해 트래픽을 보내고 다른 응용 프로그램은 인터넷 연결을 정상적으로 사용합니다.

Firefox에서이 작업을 수행 할 때 "수동 프록시 구성"을 선택하고 SOCKS 호스트 상자에 "127.0.0.1"을 입력 한 다음 "포트"상자에 동적 포트를 입력합니다. HTTP 프록시, SSL 프록시 및 FTP 프록시 상자는 비워 둡니다.

터널은 SSH 세션 연결이 열려있는 한 활성 상태로 유지됩니다. SSH 세션을 종료하고 서버에서 연결을 끊으면 터널도 닫힙니다. 터널을 다시 열려면 적절한 명령 (또는 PuTTY의 적절한 옵션)으로 다시 연결하십시오.