리눅스에서 SSH 터널링이나 포트 포워딩을 만드는 방법


SSH 터널링 (SSH 포트 전달이라고도 함)은 SSH를 통해 로컬 네트워크 트래픽을 원격 호스트에 라우팅하는 것입니다. 이것은 모든 연결이 암호화를 사용하여 보안된다는 것을 의미합니다. 그것은 인터넷과 같은 안전하지 않은 공용 네트워크를 통해 사설 네트워크에 연결하는 데 유용한 기본 VPN ( 가상 사설망 )을 설정하는 쉬운 방법을 제공합니다.

ngrok에서 구현 된 보안 터널을 통해 NAT 및 방화벽 뒤의 로컬 서버를 인터넷에 노출하는 데 사용할 수도 있습니다.

SSH 세션은 기본적으로 네트워크 연결을 터널링 할 수 있으며 로컬 , 원격 동적 의 세 가지 유형의 SSH 포트 전달이 있습니다 > 포트 포워딩.

이 기사에서는 Linux에서 SSH 터널링이나 다른 유형의 포트 포워딩을 쉽고 빠르게 설정하는 방법을 보여줍니다.

이 기사에서는 다음 설정을 사용합니다.

  1. Local Host: 192.168.43.31
  2. Remote Host: Linode CentOS 7 VPS with hostname server1.example.com.

일반적으로 다음과 같이 SSH를 사용하여 원격 서버에 안전하게 연결할 수 있습니다. 이 예에서는 로컬 호스트와 원격 호스트간에 암호가없는 SSH 로그인을 구성 했으므로 사용자 admin의 암호를 묻지 않았습니다.

$ ssh [email protected]  

로컬 SSH 포트 포워딩

이 유형의 포트 전달을 통해 로컬 컴퓨터에서 원격 서버로 연결할 수 있습니다. 제한적인 방화벽 뒤에 있거나 원격 방화벽의 3000 포트에서 실행중인 응용 프로그램에 나가는 방화벽으로 인해 차단되었다고 가정합니다.

로컬 포트를 전달하여 (예 : 8080 ) 다음과 같이 로컬에서 애플리케이션에 액세스 할 수 있습니다. -L 플래그는 원격 호스트와 원격 포트에 전달 된 포트를 정의합니다.

$ ssh [email protected] -L 8080: server1.example.com:3000

-N 플래그를 추가한다는 것은 원격 명령을 실행하지 않는다는 것을 의미합니다.이 경우에는 쉘을 얻지 못합니다.

$ ssh -N [email protected] -L 8080: server1.example.com:3000

-f 스위치는 ssh가 백그라운드에서 실행되도록 지시합니다.

$ ssh -f -N [email protected] -L 8080: server1.example.com:3000

이제 로컬 컴퓨터에서 server1.example.com:3000 주소를 사용하여 원격 응용 프로그램에 액세스하는 대신 브라우저를 열고 localhost : 8080 또는 192.168.43.31:8080 을 클릭하십시오.

원격 SSH 포트 포워딩

원격 포트 포워딩을 사용하면 원격 시스템에서 로컬 시스템으로 연결할 수 있습니다. 기본적으로 SSH는 원격 포트 포워딩을 허용하지 않습니다. 원격 호스트의 SSHD 기본 구성 파일 /etc/ssh/sshd_config 에서 GatewayPorts 지시어를 사용하여이 기능을 활성화 할 수 있습니다.

자주 사용하는 명령 행 편집기를 사용하여 편집 할 파일을 엽니 다.

$ sudo vim /etc/ssh/sshd_config 

스크린 샷과 같이 필요한 지시어를 찾아 주석 처리를 제거하고 해당 값을 yes 로 설정하십시오.

GatewayPorts yes

변경 사항을 저장하고 종료하십시오. 다음으로 최근 변경 사항을 적용하기 위해 sshd를 다시 시작해야합니다.

$ sudo systemctl restart sshd
OR
$ sudo service sshd restart 

그런 다음 원격 시스템의 5000 포트를 로컬 시스템의 3000 포트 로 전달하려면 다음 명령을 실행하십시오.

$ ssh -f -N [email protected] -R 5000:localhost:3000

이 터널링 방법을 이해하면 보안 터널을 통해 특히 NAT 및 방화벽 뒤의 로컬 개발 서버를 쉽고 안전하게 공개 할 수 있습니다. Ngrok, 페이지 킨 , localtunnel 및 많은 다른 사람들과 같은 터널은 비슷한 방식으로 작동합니다.

동적 SSH 포트 포워딩

이것은 세 번째 유형의 포트 전달입니다. 단일 포트와 통신 할 수있는 로컬 원격 포트 전달과 달리 포트 범위에서 모든 TCP 통신을 가능하게합니다. 동적 포트 포워딩은 기본적으로 포트 1080 에서 수신 대기하는 SOCKS 프록시 서버 로 기기를 설정합니다.

우선, SOCKS 는 클라이언트가 프록시 서버 (이 경우 SSH)를 통해 서버에 연결하는 방법을 정의하는 인터넷 프로토콜입니다. -D 옵션을 사용하여 동적 포트 전달을 사용하도록 설정할 수 있습니다.

다음 명령은 원격 호스트에 연결할 수 있도록 포트 1080 에서 SOCKS 프록시를 시작합니다.

$ ssh -f -N -D 1080 [email protected]

이제부터는 컴퓨터의 응용 프로그램이 설정을 편집하고이를 사용하도록 구성하여 원격 서버에 연결하여이 SSH 프록시 서버를 사용할 수 있습니다. SOCKS 프록시는 SSH 세션을 닫으면 작동을 멈 춥니 다.

이 기사에서는 보안 SSH 연결을 통해 트래픽을 터널링하기 위해 한 시스템에서 다른 시스템으로 포트를 전달하는 다양한 유형에 대해 설명했습니다. 이것은 SSH의 많은 용도 중 하나입니다. 아래 피드백 양식을 통해이 가이드에 음성을 추가 할 수 있습니다.

빨간