stamper
SSH포트포워딩터널링노출

원격 포트 포워딩으로 로컬 서비스 노출하기

개발자김철수2026. 7. 21.조회 89추천 0
변수 입력4

SSH 원격 포트 포워딩은 로컬 서비스를 SSH 서버 쪽에 노출합니다. 0.0.0.0 바인딩은 인터넷 또는 내부망의 다른 사용자가 서비스에 접근하게 만들 수 있으므로 기본값으로 안내하면 안 됩니다.

내 컴퓨터의 127.0.0.1:{{LOCAL_PORT}} 서비스를 SSH 서버 {{SSH_HOST}}{{REMOTE_PORT}}로 임시 전달하려고 해.
기본은 SSH 서버 자신만 접근하도록 하고, 포워딩 성공 확인·접근 제어·종료 방법을 알려 줘.
외부 공개가 필요한 경우에는 방화벽과 인증 확인을 별도 위험 단계로 구분해 줘.

1. 로컬 서비스 확인

curl --fail --show-error http://127.0.0.1:{{LOCAL_PORT}}/
lsof -nP -iTCP:{{LOCAL_PORT}} -sTCP:LISTEN

민감한 관리자 화면이나 인증 없는 개발 서버라면 원격 포워딩으로 공개하지 마세요.

2. SSH 서버 loopback에만 열기

ssh -N \
  -o ExitOnForwardFailure=yes \
  -R 127.0.0.1:{{REMOTE_PORT}}:127.0.0.1:{{LOCAL_PORT}} \
  {{SSH_HOST}}

이 설정은 SSH 서버 내부에서만 접근하는 것을 기본으로 합니다.

3. 서버에서 검증

다른 터미널로 서버에 접속해 확인합니다.

ssh {{SSH_HOST}} "ss -ltn 'sport = :{{REMOTE_PORT}}'"
ssh {{SSH_HOST}} "curl --fail --show-error http://127.0.0.1:{{REMOTE_PORT}}/"

4. 외부 공개가 정말 필요한 경우

외부 주소에 바인딩하려면 서버의 GatewayPorts 설정, 방화벽, 클라우드 보안 그룹이 모두 관련됩니다. GatewayPorts yes보다 요청한 주소만 허용하는 clientspecified 정책이 더 제한적입니다. 공개 전에는 다음을 확인하세요.

  • 애플리케이션 자체 인증과 TLS
  • 허용할 source IP 범위
  • 서버 방화벽과 보안 그룹
  • 노출 시간과 종료 담당자
  • 접근 로그와 비정상 요청 감시

조건을 충족했을 때만 명시적 bind address를 사용합니다.

ssh -N -o ExitOnForwardFailure=yes \
  -R {{BIND_ADDRESS}}:{{REMOTE_PORT}}:127.0.0.1:{{LOCAL_PORT}} \
  {{SSH_HOST}}

포그라운드 터널은 Ctrl+C로 즉시 종료할 수 있습니다. 백그라운드로 실행했다면 정확한 SSH PID를 찾아 kill로 정상 종료하고 서버에서 포트가 닫혔는지 다시 확인하세요.

확인 기준: man ssh, man sshd_configGatewayPorts, PermitListen, AllowTcpForwarding

댓글 0

아직 댓글이 없습니다.