SSH Tunneling
SSH Tunneling
SSH Tunneling은 SSH 프로토콜을 사용하여 네트워크 트래픽을 암호화하고 안전하게 전달하는 방법. 이를 통해 원격 서버에 대한 안전한 연결을 설정하거나 방화벽 뒤에 있는 서비스에 접근할 수 있다.
1. 로컬 포트 포워딩
로컬 포트 포워딩은 로컬 머신의 특정 포트를 원격 서버의 포트로 전달하는 방법이다. 예를 들어, 로컬 머신의 8080 포트를 원격 서버의 80 포트로 포워딩하려면 다음 명령을 사용한다.
1
2
# ssh -L [로컬 포트]:[원격 호스트]:[원격 포트] [사용자]@[원격 서버]
ssh -L 8080:10.10.10.10:80 user@remote-server
이 명령을 실행하면 로컬 머신의 8080 포트로 들어오는 트래픽이 원격 서버의 80 포트로 전달된다. 이제 로컬 브라우저에서 http://localhost:8080에 접속하면 원격 서버의 웹 페이지를 볼 수 있다.
bastion 서버를 통한 폐쇄망 접근
터널링 + bastion 서버를 통해 폐쇄망에 있는 서비스에 접근할 수 있다. 예를 들어, 폐쇄망에 있는 데이터베이스 서버에 접근하려면 다음과 같이 명령을 실행한다.
bastion 서버: 외부망과 폐쇄망을 연결하는 중간 서버
1
ssh -L 35432:db-server:5432 user@bastion-server # telnet localhost 35432등을 통해서 db-server:5432에 접근 가능
2. 원격 포트 포워딩
원격 포트 포워딩은 원격 서버의 특정 포트를 로컬 머신의 포트로 전달하는 방법이다. 예를 들어, 원격 서버의 8080 포트를 로컬 머신의 80 포트로 포워딩하려면 다음 명령을 사용한다.
1
2
# ssh -R [원격 포트]:[로컬 호스트]:[로컬 포트] [사용자]@[원격 서버]
ssh -R 8080:localhost:80 user@remote-server
이 명령을 실행하면 원격 서버의 8080 포트로 들어오는 트래픽이 로컬 머신의 80 포트로 전달된다. 이제 원격 서버에서 http://localhost:8080에 접속하면 로컬 머신의 웹 페이지를 볼 수 있다.
Gateway Port 설정을 통한 원격 포트 포워딩
원격 포트 포워딩을 사용할 때, 원격 서버의 SSH 설정 파일(/etc/ssh/sshd_config)에서 GatewayPorts 옵션을 yes로 설정하면, 원격 포트가 외부에서 접근 가능하도록 할 수 있다. 이 설정을 적용한 후 SSH 서버를 재시작해야 한다.
1
2
# /etc/ssh/sshd_config 파일 수정
GatewayPorts yes
이 설정을 통해 원격 서버의 포트가 외부에서 접근 가능해지며, 다른 사용자나 시스템이 해당 포트를 통해 로컬 머신의 서비스에 접근할 수 있다.
원격 포트 포워딩은 보안상 주의가 필요하다.
3. 동적 포트 포워딩
동적 포트 포워딩은 SOCKS 프록시를 사용하여 트래픽을 전달하는 방법이다. 이 방법은 여러 포트를 동시에 포워딩할 수 있으며, 특정 포트에 대한 트래픽을 필터링할 수 있다. 동적 포트 포워딩을 사용하려면 다음 명령을 실행한다.
1
2
# ssh -D [로컬 포트] [사용자]@[원격 서버]
ssh -D 1080 user@remote-server
이 명령을 실행하면 로컬 머신의 1080 포트에서 SOCKS 프록시가 실행된다. 이제 로컬 머신의 애플리케이션에서 SOCKS 프록시를 사용하도록 설정하면 원격 서버를 통해 트래픽을 전달할 수 있다.
ssh -D는 내 PC에 SOCKS5 프록시를 만들어줌 애플리케이션을 이 프록시로 연결하면 모든 트래픽이 SSH 터널로 암호화되어 원격 서버를 거침 네트워크 제한 우회, 보안 접속, IP 우회에 효과적
4. SSH Tunneling을 위한 추가 옵션
SSH Tunneling을 사용할 때 유용한 몇 가지 추가 옵션이 있다.
-L: 로컬 포트 포워딩을 설정한다.-N: 원격 명령을 실행하지 않고 포트 포워딩만 수행한다.-f: 백그라운드에서 실행한다.-C: 데이터 압축을 활성화한다.-v: 디버깅 정보를 출력한다.
5. SSH Tunneling의 보안 고려사항
SSH Tunneling은 보안에 유리하지만, 몇 가지 주의사항이 있다
- 강력한 인증: SSH 키를 사용하여 강력한 인증을 설정한다. (
~/.ssh/authorized_keys파일에 공개 키 추가) - 방화벽 설정: SSH 포트(기본적으로 22번 포트)를 방화벽에서 허용한다.
- 접근 제어: SSH 서버의 접근 제어를 설정하여 신뢰할 수 있는 IP 주소만 허용한다.
- 로그 모니터링: SSH 로그를 모니터링하여 비정상적인 접근을 감지한다.
6. SSH Tunneling을 위한 도구
SSH Tunneling을 쉽게 관리할 수 있는 도구들이 있다.
- PuTTY: Windows에서 SSH Tunneling을 설정할 수 있는 GUI 도구.
- OpenSSH: Linux 및 macOS에서 기본적으로 제공되는 SSH 클라이 언트로, 명령줄에서 SSH Tunneling을 설정할 수 있다.
- SSH Config 파일:
~/.ssh/config파일을 사용하여 SSH Tunneling 설정을 저장하고 관리할 수 있다.
1
2
3
4
5
6
7
# ~/.ssh/config 예시
Host remote-server
HostName remote-server.com
User user
LocalForward 8080 localhost:80
RemoteForward 8080 localhost:80
DynamicForward 1080
이 설정을 사용하면 ssh remote-server 명령으로 SSH Tunneling을 쉽게 설정할 수 있다. 각 포워딩 옵션을 필요에 따라 조정할 수 있다.
7. SSH Tunneling의 활용 사례
SSH Tunneling은 다양한 상황에서 유용하게 사용될 수 있다.
- 원격 서버 관리: 원격 서버에 안전하게 접속하여 관리 작업을 수행할 수 있다.
- 보안된 데이터 전송: 민감한 데이터를 전송할 때 SSH Tunneling을 사용하여 암호화된 연결을 유지할 수 있다.
- 방화벽 우회: 방화벽 뒤에 있는 서비스에 접근할 수 있다.
- 개발 환경 설정: 로컬 개발 환경에서 원격 서버의 서비스에 접근하여 개발 작업을 수행할 수 있다.