웹사이트 검색

Linux에서 SSH 터널링 또는 포트 전달을 만드는 방법


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

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

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

이 기사에서는 Linux에서 SSH 터널링 또는 다양한 유형의 포트 전달을 빠르고 쉽게 설정하는 방법을 보여줍니다.

테스트 환경:

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

  1. 로컬 호스트: 192.168.43.31
  2. 원격 호스트: 호스트 이름이 server1.example.com인 Linode CentOS 7 VPS.

일반적으로 SSH를 사용하여 원격 서버에 안전하게 접속하는 방법은 다음과 같습니다. 이 예에서는 로컬 호스트와 원격 호스트 사이에 비밀번호 없는 SSH 로그인을 구성했기 때문에 사용자 관리자의 비밀번호를 묻지 않았습니다.

ssh [email   

로컬 SSH 포트 전달

이러한 유형의 포트 전달을 사용하면 로컬 컴퓨터에서 원격 서버로 연결할 수 있습니다. 제한적인 방화벽 뒤에 있거나 나가는 방화벽에 의해 원격 서버의 3000 포트에서 실행되는 애플리케이션에 액세스하는 것이 차단되어 있다고 가정합니다.

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

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

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

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

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

ssh -f -N [email  -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  -R 5000:localhost:3000

이 터널링 방법을 이해하면 특히 NAT 및 방화벽 뒤의 로컬 개발 서버를 보안 터널을 통해 인터넷에 쉽고 안전하게 노출할 수 있습니다. Ngrok, pagekite, localtunnel 등의 터널도 비슷한 방식으로 작동합니다.

동적 SSH 포트 전달

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

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

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

ssh -f -N -D 1080 [email 

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

추가 읽기: SSH를 닫은 후에도 원격 SSH 세션을 계속 실행하는 5가지 방법

요약

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

주의: SSH 포트 전달에는 몇 가지 상당한 단점이 있으며 남용될 수 있습니다. 즉, 네트워크 모니터링 및 트래픽 필터링 프로그램(또는 방화벽)을 우회하는 데 사용될 수 있습니다. 공격자는 이를 악의적인 활동에 사용할 수 있습니다. 다음 기사에서는 SSH 로컬 포트 전달을 비활성화하는 방법을 보여 드리겠습니다. 대기 중!