# SSH 터널링 및 포트 포워딩 시각 가이드 (2023)

> Clean Markdown view of GeekNews topic #16859. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16859](https://news.hada.io/topic?id=16859)
- GeekNews Markdown: [https://news.hada.io/topic/16859.md](https://news.hada.io/topic/16859.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-09-20T18:38:19+09:00
- Updated: 2024-09-20T18:38:19+09:00
- Original source: [ittavern.com](https://ittavern.com/visual-guide-to-ssh-tunneling-and-port-forwarding/)
- Points: 6
- Comments: 1

## Topic Body

##### SSH 터널링 및 포트 포워딩에 대한 시각적 가이드

- **요약**: 이 블로그 포스트는 SSH 터널링 및 포트 포워딩에 대한 이해를 돕기 위해 작성되었음. 주제는 사용 사례, 설정, SSH 점프호스트, 로컬/원격/동적 포트 포워딩, 그리고 제한 사항을 포함함.

###### 사용 사례

- **보안**:
  - FTP와 같은 안전하지 않은 연결 암호화
  - SSH 터널을 통한 웹 관리자 패널 접근 (공개 키 인증)
  - 노출되는 포트 수 감소 (22번 포트만 노출)

- **문제 해결**:
  - 방화벽/콘텐츠 필터 우회
  - 다른 경로 선택

- **연결**:
  - NAT 뒤에 있는 서버 접근
  - 점프호스트를 사용하여 인터넷을 통해 내부 서버 접근
  - 로컬 포트를 인터넷에 노출

###### 포트 포워딩

- **설정/준비**:
  - 로컬 및 원격 사용자는 포트를 열기 위한 권한이 필요함
  - 0-1024번 포트는 루트 권한이 필요함
  - 클라이언트와 네트워크 방화벽을 적절히 설정
  - SSH 서버에서 포트 포워딩을 활성화해야 함: `AllowTcpForwarding yes`
  - 다른 인터페이스에서 포트를 포워딩하려면 `GatewayPorts yes`를 활성화해야 함

###### SSH 점프호스트 / SSH 터널

- **점프호스트를 통한 연결**:
  ```bash
  ssh -J user@REMOTE-MACHINE:22 -p 22 user@10.99.99.1
  ```

- **여러 점프호스트 사용**:
  ```bash
  ssh -J user@REMOTE-MACHINE:22,user@ANOTHER-REMOTE-MACHINE:22 -p 22 user@10.99.99.1
  ```

###### 로컬 포트 포워딩

- **예제 1**:
  ```bash
  ssh -L 10.10.10.1:8001:localhost:8000 user@REMOTE-MACHINE
  ```

- **예제 2**:
  ```bash
  ssh -L 8001:10.99.99.1:8000 user@REMOTE-MACHINE
  ```

###### 원격 포트 포워딩

- **예제 1+2**:
  ```bash
  ssh -R 8000:localhost:8001 user@REMOTE-MACHINE
  ssh -R 8000:10.10.10.2:8001 user@REMOTE-MACHINE
  ```

- **예제 3**:
  ```bash
  ssh -R 10.99.99.2:8000:10.10.10.2:8001 user@REMOTE-MACHINE
  ```

###### 동적 포트 포워딩

- **SOCKS 프로토콜 사용**:
  ```bash
  ssh -D 10.10.10.1:5555 user@REMOTE-MACHINE
  ```

###### SSH TUN/TAP 터널링

- **양방향 TCP 터널 생성**:
  ```bash
  ssh -w local_tun[:remote_tun]
  ```

###### 백그라운드에서 SSH 실행

- **백그라운드 실행**:
  ```bash
  ssh -fN -L 8001:127.0.0.1:8000 user@REMOTE-MACHINE
  ```

- **백그라운드 SSH 중지**:
  ```bash
  ps -ef | grep ssh
  kill &lt;PID&gt;
  ```

###### SSH 연결 유지

- **타임아웃 처리**:
  - `ClientAliveInterval 15`
  - `ClientAliveCountMax 3`

###### 제한 사항

- **UDP**:
  - SSH는 신뢰할 수 있는 전달을 필요로 하므로 UDP는 지원되지 않음

- **TCP-over-TCP**:
  - 오버헤드 증가로 인해 처리량이 감소하고 지연 시간이 증가함

- **VPN 대체 아님**:
  - SSH 터널링은 VPN을 대체할 수 있지만, 성능 면에서 VPN이 더 적합함

- **잠재적 보안 위험**:
  - 필요하지 않은 기능은 비활성화하는 것이 좋음

##### GN⁺의 정리

- 이 글은 SSH 터널링과 포트 포워딩의 다양한 사용 사례와 설정 방법을 설명함
- SSH 터널링은 보안 연결을 제공하고 방화벽을 우회하는 데 유용함
- 그러나 VPN을 대체할 수는 없으며, 성능 저하와 같은 제한 사항이 있음
- 관련된 다른 프로젝트로는 OpenVPN과 같은 VPN 솔루션이 있음

## Comments



### Comment 29067

- Author: neo
- Created: 2024-09-20T18:38:19+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41596818) 
- 2024년에는 SSH 명령어를 직접 작성하는 대신, `~/.ssh/config` 파일을 사용하여 LocalForward, RemoteForward, ProxyJump를 설정하는 것이 좋음
  - 예시 설정을 통해 여러 중간 SSH 연결을 거쳐 데이터를 전송할 때 시간을 절약할 수 있음
  - 설정 후에는 별칭을 통해 target-server에 SSH, SCP, RSYNC를 사용할 수 있음
  - LocalForward와 RemoteForward 설정을 통해 포트 포워딩을 쉽게 할 수 있음

- SSH 터널링은 복잡한 회사 환경에서 필수적임
  - 많은 관료주의와 대기 시간 때문에 필요한 접근 권한을 얻는 데 시간이 걸림
  - `ssh -D 8888 someserver` 명령어를 사용하여 브라우저의 SOCKS 프록시를 localhost:8888로 설정하면 브라우저 트래픽이 해당 서버를 통해 라우팅됨

- 방화벽 뒤에 있고 고정 IP가 없는 리눅스 서버나 IoT 장치에 SSH 접속을 원할 때는 터널링 서비스를 사용할 수 있음
  - 예: [sshreach.me](https://sshreach.me)

- 가장 복잡한 SSH 터널링 해킹 경험은 데이터 센터 간 연결에서 발생함
  - A에서 B로, B에서 C로 데이터를 이동해야 했음
  - rsync, SSH 터널, 키, 라우팅을 조합하여 데이터를 성공적으로 이동시킴
  - 당시에는 큰 성취였으며, 지금도 그 기억이 생생함

- 네트워킹 시각화가 더 많이 이루어지길 바람
  - 특히 저수준 연결에서의 트래픽 시각화가 필요함

- TCP-over-TCP는 오버헤드가 증가하고 지연 시간이 늘어나 성능이 저하될 수 있음
  - SSH 터널에서는 TAP/TUN을 사용하지 않는 한 문제가 되지 않음
  - 그러나 여러 채널을 사용할 경우 성능 저하가 발생할 수 있음

- SSH 터널은 훌륭한 도구지만, 요즘에는 TLS와 리버스 프록시 기능이 내장된 도구를 더 많이 사용함
  - 관련 도구 목록: [awesome-tunneling](https://github.com/anderspitman/awesome-tunneling)

- sshuttle은 터널링에 더 나은 도구임
  - `sshuttle -r user@host 10.0.0.0/8` 명령어를 사용하여 VPN처럼 사용할 수 있음

- 15년 전 대학 네트워크의 방화벽을 우회하기 위해 SSH 터널을 사용하기 시작함
  - 기본 포트를 443으로 변경하여 사용함
  - 이후로 방화벽 우회 외에도 다양한 용도로 사용 중임

- SSH 자체에 리다이렉트 기능이 있는지 궁금함
  - A가 B에 SSH 접속을 시도하면 B가 C에 접속하라고 지시하고, A가 투명하게 C에 직접 접속하는 기능
  - B는 더 이상 중요한 데이터 경로의 일부가 아님
  - 이러한 기능이 존재하는지 궁금함
