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

0
843

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

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

당신은 이것을 할 수 있습니다 ssh Linux, macOS 및 기타 UNIX 유사 운영 체제에 포함 된 명령입니다. 기본 제공 ssh 명령이 포함되지 않은 Windows에서는 SSH 서버에 연결하기 위해 무료 도구 인 “PuTTY”를 권장합니다. SSH 터널링도 지원합니다.

로컬 포트 ​​전달 : 로컬 시스템에서 원격 리소스에 액세스 가능

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

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

로컬 포워딩을 사용하려면 SSH 서버에 정상적으로 연결하고 -L 논의. 구문은 다음과 같습니다.

ssh -L local_port:remote_address:remote_port username@server.com

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

ssh -L 8888:192.168.1.111:1234 bob@ssh.youroffice.com

이 명령을 실행하면 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 bob@ssh.youroffice.com

현재 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 와 명령 -R 논의. 구문은 로컬 전달과 거의 동일합니다.

ssh -R remote_port:local_address:local_port username@server.com

로컬 PC의 포트 1234에서 수신 대기하는 서버 응용 프로그램을 원격 SSH 서버의 포트 8888에서 사용할 수 있도록한다고 가정하겠습니다. SSH 서버의 주소는 ssh.youroffice.com SSH 서버의 사용자 이름은 단발. 다음 명령을 실행하십시오.

ssh -R 8888:localhost:1234 bob@ssh.youroffice.com

그런 다음 누군가 포트 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과 프록시의 차이점은 무엇입니까?

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

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

예를 들어 공개 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 명령을 실행하십시오. -D 인수, 이렇게 :

ssh -D local_port username@server.com

예를 들어 SSH 서버에 액세스 할 수 있다고 가정 해 보겠습니다. ssh.yourhome.com SSH 서버의 사용자 이름은 bob . 동적 전달을 사용하여 현재 PC의 포트 8888에서 SOCKS 프록시를 열려고합니다. 다음 명령을 실행하십시오.

ssh -D 8888 bob@ssh.yourhome.com

그런 다음 로컬 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에서이 작업을 수행 할 때“Manual proxy configuration (수동 프록시 구성)”을 선택하고 SOCKS 호스트 상자에“127.0.0.1”을 입력 한 다음“Port”상자에 동적 포트를 입력하십시오. HTTP 프록시, SSL 프록시 및 FTP 프록시 상자를 비워 두십시오.

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