Published on

ssh 터널링이란? 기초 개념과 실무 사용법 정리

Authors
  • avatar
    Name
    Indo Yoon
    Twitter

SSH 터널링이란 이미 암호화된 SSH 연결 안에 다른 서비스의 트래픽을 실어 보내는 방식입니다. 핵심은 포트 포워딩을 통해 접근이 제한된 네트워크의 서비스에 안전하게 도달하는 데 있습니다. 이 글은 로컬·원격·동적 포워딩의 차이와 운영 서버에서 확인해야 할 기준을 차례로 설명합니다.

한눈에 보기

SSH 터널링은 SSH 클라이언트와 SSH 서버 사이에 만들어진 암호화 채널을 재사용합니다. 사용자는 SSH 클라이언트 쪽 또는 SSH 서버 쪽에 리스너를 만들고, 그 리스너로 들어온 연결을 다른 호스트와 포트로 전달합니다. 이때 실제 데이터는 SSH 세션 안에서 암호화되어 이동합니다.

가장 많이 쓰이는 방식은 로컬 포워딩, 원격 포워딩, 동적 포워딩입니다. 로컬 포워딩은 내 환경에서 원격 내부 서비스로 접근할 때, 원격 포워딩은 반대로 원격 환경에서 내 쪽 서비스로 접근할 때, 동적 포워딩은 여러 대상에 임시 SOCKS 프록시를 제공할 때 적합합니다.

SSH 터널링은 편리하지만 권한을 새로 만들어 주는 기능은 아닙니다. SSH 계정이 가진 권한, 대상 서비스의 인증 정책, 서버의 포워딩 허용 설정, 조직의 네트워크 정책 안에서만 사용해야 합니다.

로컬·원격·동적 포워딩 비교

구분트래픽이 시작되는 곳대표 옵션주 사용 상황운영 시 유의점
로컬 포워딩내 작업 환경의 로컬 포트-L원격 내부의 데이터베이스나 웹 서비스에 접근로컬 포트 충돌, 대상 호스트 제한, 바인딩 주소 확인
원격 포워딩SSH 서버 쪽의 원격 포트-R원격 환경에서 내 쪽 개발 서비스나 내부 서비스로 접근SSH 서버의 포워딩 정책, 방화벽, 접근 제어 확인
동적 포워딩내 작업 환경의 로컬 SOCKS 프록시-D여러 대상에 임시 프록시가 필요할 때애플리케이션 프록시 설정, DNS 동작, 정책 준수 확인

표에서 중요한 차이는 연결을 기다리는 리스너가 어디에 생기느냐입니다. 로컬 포워딩과 동적 포워딩은 내 쪽에 리스너가 생기고, 원격 포워딩은 SSH 서버 쪽에 리스너가 생깁니다. 이 차이를 이해하면 어떤 옵션을 선택해야 하는지가 비교적 명확해집니다.

단계별 설정 방법

설정 전에는 SSH 클라이언트가 설치되어 있는지, 대상 SSH 서버에 접속할 계정과 키가 준비되어 있는지, 서버가 포워딩을 허용하는지 확인해야 합니다. 아래 예시는 설명을 위해 호스트와 포트를 대문자 자리표시자로 표시합니다. 실제 값은 환경에 맞게 바꾸되, 운영 서버에서는 먼저 정책과 권한을 확인하는 편이 안전합니다.

로컬 포워딩 설정

로컬 포워딩의 기본 형태는 ssh -L LOCAL_PORT:DEST_HOST:DEST_PORT USER@SSH_SERVER입니다. 내 작업 환경에서 localhost:LOCAL_PORT로 접속하면, SSH 클라이언트가 그 연결을 SSH 서버로 보내고 SSH 서버가 DEST_HOST:DEST_PORT로 연결합니다. 원격 내부의 데이터베이스나 관리 도구에 접근할 때 자주 사용합니다.

로컬 포워딩은 내 쪽에 리스너를 만들기 때문에 로컬 포트가 이미 사용 중이면 실패할 수 있습니다. 또한 기본적으로 루프백 주소에 바인딩하는 습관이 안전합니다. 외부 인터페이스에 바인딩해야 한다면 다른 사용자가 접근할 수 있다는 뜻이므로 접근 제어와 인증 정책을 반드시 함께 검토해야 합니다.

원격 포워딩 설정

원격 포워딩의 기본 형태는 ssh -R REMOTE_PORT:DEST_HOST:DEST_PORT USER@SSH_SERVER입니다. SSH 서버 쪽에서 REMOTE_PORT로 들어온 연결을 SSH 클라이언트 쪽으로 전달하고, SSH 클라이언트가 DEST_HOST:DEST_PORT로 연결합니다. 원격 테스트 환경에서 내 로컬 개발 서비스에 접근해야 할 때 유용합니다.

원격 포워딩은 SSH 서버가 리스너를 열게 하므로 서버 운영자의 통제가 중요합니다. SSH 서버 설정의 GatewayPorts 값과 바인딩 주소에 따라 외부 인터페이스 노출 여부가 달라질 수 있습니다. 운영 환경에서는 원격 포워딩을 기본으로 허용하기보다 필요한 계정과 필요한 대상에만 제한하는 편이 좋습니다.

동적 포워딩 설정

동적 포워딩의 기본 형태는 ssh -D LOCAL_PORT USER@SSH_SERVER입니다. SSH 클라이언트가 내 쪽에 SOCKS 프록시 리스너를 만들고, 애플리케이션이 그 프록시를 사용하도록 설정하면 트래픽이 SSH 서버를 거쳐 나갑니다. 여러 웹 대상에 임시로 접근해야 하거나 브라우저 테스트 환경을 분리할 때 사용할 수 있습니다.

동적 포워딩은 로컬 포워딩처럼 대상 호스트를 명령마다 지정하지 않습니다. 대신 애플리케이션의 프록시 설정이 필요하고, DNS 질의가 어디에서 처리되는지에 따라 동작이 달라질 수 있습니다. 따라서 특정 서비스만 연결해야 하는 상황이라면 로컬 포워딩이 더 명확할 수 있습니다.

연결 유지와 확인

터널만 유지하고 원격 셸을 열지 않으려면 -N을 함께 사용할 수 있습니다. 연결 과정을 확인하려면 -v를 붙여 SSH 협상과 포워딩 요청 로그를 확인합니다. 장시간 유지가 필요한 터널은 네트워크 유휴 시간과 서버 정책을 고려해 연결 유지 옵션을 검토해야 합니다.

상황별 선택 기준

내 작업 환경에서 원격 내부의 특정 서비스로 접근하려면 로컬 포워딩을 선택합니다. 예를 들어 원격 서버 뒤에 있는 관리 도구나 데이터베이스에 접근해야 할 때 대상 호스트와 포트를 명시할 수 있어 통제가 쉽습니다.

원격 환경에서 내 쪽의 개발 서비스나 사내망 서비스로 접근해야 하면 원격 포워딩을 검토합니다. 다만 SSH 서버 쪽에 리스너가 생기므로 서버 설정과 방화벽 정책을 먼저 확인해야 합니다.

여러 대상에 임시 프록시가 필요하면 동적 포워딩을 사용합니다. 반면 단일 대상만 필요하거나 감사와 접근 제어를 단순하게 유지해야 한다면 로컬 포워딩이 더 적합합니다.

점프 호스트를 거쳐 SSH에 접속해야 하는 환경에서는 ProxyJump 옵션을 별도로 검토할 수 있습니다. 이는 터널링 자체와 목적이 다르므로, 접속 경로를 단순화하려는 것인지 특정 포트를 전달하려는 것인지 구분해야 합니다.

주의할 점

SSH 터널링은 네트워크 정책을 우회하는 도구가 아닙니다. 조직이 허용한 범위와 서버 운영 정책을 벗어난 포워딩은 보안 사고로 이어질 수 있으므로, 운영 환경에서는 목적과 대상을 명확히 기록하는 편이 좋습니다.

포워딩 리스너를 외부 인터페이스에 열면 예상하지 않은 접근이 발생할 수 있습니다. 특히 원격 포워딩은 SSH 서버 쪽 리스너를 만들기 때문에 GatewayPorts 설정과 방화벽, 인증 정책을 함께 확인해야 합니다.

SSH 접속 자체의 보안도 중요합니다. 호스트 키 검증을 생략하지 말고, 용도별 SSH 키를 분리하며, 필요 이상의 권한을 가진 계정으로 터널을 유지하지 않는 것이 안전합니다. 터널을 오래 열어 둘수록 세션 관리와 로그 점검도 함께 필요합니다.

대상 서비스가 인증을 요구한다면 SSH 터널이 그 인증을 대신하지 않습니다. 터널은 연결 경로를 제공할 뿐이므로, 데이터베이스 계정이나 관리 도구의 권한은 별도로 최소화해야 합니다.

자주 묻는 질문

SSH 터널링과 VPN은 무엇이 다른가요?

SSH 터널링은 특정 포트나 SOCKS 프록시를 SSH 연결로 전달하는 방식이고, VPN은 네트워크 계층에서 더 넓은 범위의 트래픽을 라우팅합니다. 따라서 터널링은 목적이 좁고 권한과 정책 검토가 비교적 단순하지만, 전체 네트워크를 대신하지는 않습니다.

터널이 끊기면 어떻게 확인하나요?

먼저 SSH 프로세스가 살아 있는지 확인하고, 필요하면 -v로 연결 로그를 봅니다. 로컬 포워딩이라면 ss -lntp로 로컬 리스너가 열려 있는지 확인합니다. 대상 서비스가 SSH 서버 쪽에서 실제로 응답하는지도 별도로 점검해야 합니다.

운영 서버에서 원격 포워딩을 써도 되나요?

가능하지만 기본 정책으로 두는 것은 권장하지 않습니다. 원격 포워딩은 SSH 서버가 리스너를 열게 하므로 GatewayPorts 설정과 방화벽, 접근 제어를 함께 확인해야 합니다. 꼭 필요할 때만 제한된 계정과 대상으로 허용하고 사용 후에는 세션을 닫는 편이 안전합니다.

출처

함께 보면 좋은 운영 글: SSH 접속과 포워딩 운영 체크리스트에서 키 관리, 접속 로그, 포워딩 허용 범위를 점검하는 방법을 이어서 확인할 수 있습니다.