-
ssh 포트포워딩(터널링) 뚫기 (feat. 로컬에서 AWS VPC내 RDS 접속하기)🏢 업무 리서치 기록 2022. 12. 15.
회사에서 사용중인 RDS는 VPC내에 구성되어 운용중이라서 bastion EC2 인스턴스를 통해 RDS에 접근이 가능한 구조였다. SSH 란 무엇일까?
Secure Sell의 약자로 원격지에 있는 컴퓨터를 안전하게 제어하기 위한 프로토콜 또는 이 프로토콜을 사용하는 프로그램들을 의미한다.
사용자 인증부터 데이터 전송까지 모든 과정이 암호화되기 때문에 보안성이 매우 높다.
이전까지는 Telnet을 주로 사용했는데 이것을 대체하기 위한 수단으로 등장했다고 한다.
SSH Key 란?
SSH 서버에 접속할 때 비밀번호 대신 키를 제출하는 방식을 말한다.
비밀번호방식보다 높은 수준의 보안을 필요로 하거나 비밀번호 없이 자동으로 서버에 접속하고 싶을때 키 방식을 사용한다.
SSH key는 공개키와 비공개 키로 동작이 이루어진다.
공개키는 서버에 위치시키고, 비공개 키를 클라이언트가 가지고 있게 한다. 그리고 SSH 요청시에 클라이언트가 서버에 비공개키를 보내면 서버가 가지고있는 공개키와 비교하게 되는데 이 과정이 비밀번호를 입력하는 과정을 대신하는 것이다.
포트포워딩(=포트 매핑) 이란?
일반적으로 포트포워딩이란 IP 주소:포트 번호 형식으로 된 주소로 보내는 통신 요청을 원래 보내려는 주소가 아닌 다른 주소로 넘겨주는것을 말한다.
포트 포워딩이 필요한 상황을 생각 해보면
위 그림 처럼 User가 서버 A 내 특정 Web Server에 접속을 해야하는데 서버 A에서는 보안상의 이유로 SSH 서버가 붙어있는 22번 포트외에는 전부 막아놓은 상태라고하자. 그러면 User는 어떻게해야 Web Server에 요청을 보낼 수 있을까?
이 때, SSH에 연결된 22번 포트를 Web Server에 연결 된 80번 포트로 포트포워딩 해주면 아래 그림처럼 User가 방화벽을 피해 Web Server에 접근할 수 있다.
SSH를 이용한 포트포워딩의 경우 사용자 인증부터 데이터 전송까지 모든 과정이 암호화 되게 되는데 보안측면에서 터널링을 적용했다고 볼 수도 있다. 그래서 SSH 포트포워딩을 SSH 터널링이라고도 부른다.
SSH 포트포워딩 (= SSH 터널링)의 종류
1. 로컬 포트포워딩 💻 -> 🛢
로컬(SSH Client) -> 서버(SSH Server)로의 포트포워딩
예를 들면 회사에서 사용하는 RDS 같은 상황이다.
내 로컬에서 RDS에 접근하기 위해서는 bastion EC2를 통해 접근을 하는 수 밖엔 없다.
이때 bastion EC2에서 포트포워딩을 통해 내 로컬의 13306(사용하지 않는 임의의 포트)를 RDS가 붙어있는 3306 포트로 터널링 해주면 내 로컬의 13306 포트를 통해 RDS에 접속할 수 있다.
회사에서 사용중인 RDS는 VPC내에 구성되어 운용중이라서 bastion EC2 인스턴스를 통해 RDS에 접근이 가능한 구조였다. 그림의 예시에 맞게 명령어를 구성해보면
ssh -L 13306:RDS주소:3306 EC2주소
그런데 bastion EC2서버에 접속하기 위해서는 키 인증이 필요하므로 키 인증에 관련된 명령어 옵션도 추가해 주면 다음과 같다.
ssh -i 키파일경로 -L 13306:RDS주소:3306 EC2주소
명령어를 치고나면 EC2 인스턴스 쉘 환경이 생성 된다. 터미널이 열려있는동안, 포트포워딩은 유지되고 아래 그림 처럼 로컬 13306 포트로 바로 RDS에 접근할 수 있게 된다.
RDS 연결은 Sequel Ace 툴로 확인해 보았다.로컬 13306 포트로 RDS에 접속해서 테이블을 확인 한 모습 만약 터미널 창이 열려있는동안만 터널링이 유지되는것이 불편하다면, 아래 옵션을 명령어에 추가해 주어서 SSH 프로세스를 백그라운드로 실행시키면 된다.
-f : 백그라운드로 실행 하겠다.
-N : -f 옵션 만 지정 하면 `Cannot fork into background without a command to execute.` 에러가 나는데 -N 옵션을 함께 지정해 주어야 에러가 나지 않는다.
-v : 상세 모드를 켜서 디버깅용 로그를 표시하겠다.
최종적인 백그라운드 실행용 명령어는 다음과 같다.
ssh -f -N -i 키파일경로 -L 13306:RDS주소:3306 EC2주소 -v
명령어 실행시 이번엔 EC2 쉘을 환경으로 가지 않고, 아래와 같이 디버깅용 로그만 표시된다. 이 상태에서 터미널을 닫아도 ssh 프로세스는 살아있기 때문에 아래와 같이 로컬 포트 13306으로 RDS 접속이 가능하다.
lsof -i :ssh 로 ssh가 실행중인 프로세스를 확인해 보았다. 로컬 13306 포트로 RDS에 접속해서 테이블을 확인 한 모습 출처:
Cannot tunnel over ssh without command/getting shell
I would like using ssh tunneling options. For that purpose I use command: ssh -L 1234:localhost:5678 host however this logs me into the shell on remote host. Next I tried -f as: ssh -f -L 8999:
unix.stackexchange.com
SSH 로컬 포트 포워딩 (SSH 터널링)
SSH 로컬 포트 포워딩 (SSH 터널링) 포트 포워딩 방식에는 3가지가 있는데(Local, Remote, Dynamic), 이번 포스팅에서는 회사에서 주로 쓰고 있는 Local Port Forwarding만 다룰 것이다. 로컬 포트 포워딩을 이해
deep-jin.tistory.com
[공부] SSH (Secure Shell) : 기초 및 심화 개념
* 개인적인 공부 내용을 기록한 글입니다. SSH 기초 1. SSH란? Secure Shell = 보안 셸 원격지 호스트 컴퓨터에 접속하기 위해 사용하는 인터넷 프로토콜이다. 과거에 주로 사용되던 Telnet은 암호화가 이
choco4study.tistory.com
150. [SSH, Network] SSH 포트 포워딩(SSH 터널링)의 개념 및 사용 방법
이번 포스트에서는 'SSH 포트 포워딩' 또는 'SSH 터널링' 이라고 불리는 것에 대해서 설명한다. 1. ...
blog.naver.com
역시! 생코 '🏢 업무 리서치 기록' 카테고리의 다른 글
로그인 기능 구현의 과정 (feat. OAuth2.0 와 JWT) (0) 2022.12.16 OLTP VS OLAP (feat. 트랜잭션 ACID 특성) (0) 2022.12.15 [BigQuery] Streaming Insert VS Insert Into DML Query (1) (0) 2022.12.01 YouTube 데이터와 친해지기 (2) - Channel Reports VS Content Owner Reports (1) 2022.12.01 YouTube 데이터와 친해지기 (1) - YouTube Analytics API VS YouTube Reporting API (0) 2022.10.27