# SSH란?
원격 호스트에 접속하기 위해 사용되는 보안 프로토콜.
일반적으로는 Public key / Private key를 사용하는 비대칭 암호화(Asymmetric Encryption) 방식을 사용한다.
Public Key가 자물쇠, Private Key가 자물쇠를 여는 열쇠라고 비유를 해서 그려본 그림이다. 중간에 누군가 박스를 탈취한다 하더라도 자물쇠는 오직 A/B 두사람만이 열수 있기때문에 보안성이 확보된다.
# SSH 터널링이란? (SSH 포트 포워딩)
SSH 클라이언트와 서버사이 연결이 수립되어 만들어진 통로가 "터널"
여기에 포트 포워딩(Port Forwarding)을 이용하면 만들어진 터널을 다른 애플리케이션이 이용할 수 있다.
방화벽을 우회할 수도있으며, 암호화를 지원하지 않는 프로그램을 SSH 터널을 통해 안전하게 사용할 수 있게 할 수 있다.
로컬 터널링 - 클라이언트에서 서버로 연결하여 서버의 포트를 이용함
리모트 터널링 - 서버에서 클라이언트로 연결하여 클라이언트의 포트를 이용함
SSH 터널링 예시 - MySQL 보안 강화하기
기본 MySQL 포트인 3306을 열어두면 보안에 좋지 않을 수 있으니, 이를 SSH 터널링을 통해 접속하는 방식을 예시로 들 수 있다.
1) 방화벽으로 3306포트 막기
MySQL이 설치된 서버에 우분투의 기본 방화벽인 UFW를 이용해 22번 포트를 제외한 나머지 포트를 허용하지 않도록 설정했다.
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw enable을 통해 방화벽을 활성화 시켜주면 외부 컴퓨터에서 3306으로 직접 접속을 하려고 할때 방화벽에 막혀 접속되지 않는다.
2) 포트포워딩 설정
ssh -L 33060:101.101.210.88:3306 root@101.101.210.88
로컬 컴퓨터의 33060 포트를 통해 MySQL서버(101.101.~)의 3306 포트를 접근할 수 있는 터널을 만드는 명령어다. 명령어를 입력하게 되면 SSH 연결이 수립되는데, 연결 수립 상태에서 다른 터미널 창을 열어 33060 포트로 MySQL에 접속해보면 된다.
클라이언트에서 netstat 명령어로 확인해보면 33060 포트를 LISTENING 하고있음을 확인할 수 있다.
3) 클라이언트에서 MySQL 접속
mysql -P 33060 -u root -p
이제 다음 명령어로 원격 호스트의 MySQL에 접속할 수 있게 된다.
비밀번호를 틀려보니 이렇게 원격 호스트로 접속된다는 것을 한방에 알 수 있다. ㅋ_ㅋ;
MySQL Workbench / DBeaver등 DB 툴에서도 SSH 터널링을 설정할 수 있다.
참고자료
https://naknaklee.github.io/etc/2020/10/22/linux-ssh-tunneling/
https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS5064906327
'프로그래밍 > General' 카테고리의 다른 글
SSH 인증키 생성 및 간편 접속방법 (0) | 2022.02.02 |
---|---|
암호학에서 Salt란? 소금이 필요한 이유 (0) | 2022.02.02 |
[SSH] UNPROTECTED PRIVATE KEY FILE 해결방법 (0) | 2022.01.31 |
내 소스 코드가 실행되기까지의 과정 (1) | 2022.01.27 |
파일 시스템 - FAT32 / NTFS / ZFS / HDFS (0) | 2022.01.15 |