SSH 를 통한 오라클(Oracle) 보안 접속 - SSH Tunneling - SSH Forwarding

Last Updated on 12월 14, 2020 by 태랑(정현호)

SSH 터널링은 '프록시' 와 비슷한 역할



SSH 클라이언트와 서버 사이에 연결이 이루어지면 이를 터널링이라고 하며 여기에서 SSH 에서 다른 IP/Port 로 네트워킹을 전달해주는 기능을 포트포워딩 이라고 합니다.


통상적으로 SSH 터널링과 SSH 포트포워딩은 같은 의미로 불립니다.


SSH 터널링은 프록시와 비슷한 역활을 하게 되며 이 SSH 터널을 이용하여 통신하는 데이터는 암호화로 통신하게 됩니다.


Local 포트 포워딩과  과  Remote 포트 포워딩 으로 구분되며 여기 포스팅에서는 Local 포트 포워딩에 대한 내용을 다루게 됩니다.



Local 포트포워딩의 아래와 같은 상황에서 사용 되게 됩니다.

- Client는 Server 로 SSH(TCP/22) 로만 접속 할 수 있습니다
- Server 에는 Oracle 이나 다른 접속 하고자 하는(Web/WAS .. etc) 어플리케이션이 있습니다
혹은 Server 와 연결되어 접근이 허용된 다른 서버에 DB나 WEb/WAS가 있습니다.
- 이런 상황에서 Client는 SSH 를 통해 터널링을 만들고 터널링을 생성후 서버에서는 지정된 IP와 포트로 네트워크 패킷을 전달하게 됩니다.





위와 같은 그림에서는 Client인 192.168.56.101 이 SSH로 192.168.56.102 로 접속 하게되고
192.168.56.102 서버에서는 클라이언트에서 받은 패킷을 정해진 다른(포스팅에서는 오라클) 로 forwarding 해주게 되는 형태로 진행 됩니다.


테스트 진행 환경은 Windows 10 과 Mac 환경 입니다.







Windows 10 환경



Microsoft가 2018년 10월 경에 출시된 Windows 10 1809 빌드부터 openssh client와 openssh server 를 built-in 하여 기능을 제공 하기 시작하였습니다.


사용하는 빌드 버전에 따라서 openssh client 설치 여부가 달라 집니다.
설치가 안되어 있을 경우 아래 글을 참조하시면 됩니다.


그래서 ssh를 사용하는데 있어서 이제는 사실상 외부의 툴 없이 리눅스나 맥처럼 터미널(혹은 powershell) 에서 직접 ssh 접속이 가능해 졌습니다.




테스트 환경에서는 Client - Windows  / Server - Linux 이며 서버에는 Oracle 이 있지만 방화벽은 22번 포트만 open 되어 있는 상태 입니다.


그래서 아래와 같이 접속을 TNS Port 로 접속을 하게 되면 접속이 불가능한 상태 입니다.












#Local Port Forwarding 실행

cmd나 powershell 을 실행 후 아래와 같이 -L 옵션을 포함하여 실행 합니다.

C:\Users\test1> ssh -L 1521:192.168.56.51:1521 oracle@192.168.56.51

oracle@192.168.56.51's password:
Last login: Tue Nov 1 00:09:57 2020
Last login: Tue Nov 1 00:09:57 2020



명령어 설명
1521:192.168.56.51:1521 oracle@192.168.56.51


oracle@192.168.56.51 - Oracle이 구동되고 있는 서버의 접속 정보 입니다.
개인키(비밀키) 가 있고 config 파일에 설정이 되어 있다면 키를 이용하여 간편하게 접속 할 수 있습니다.

개인키(비밀키) 방식의 ssh 에 대한 정보는 이전 포스팅에서 윈도우 와 맥 환경으로 상세히 설명 되어 있습니다.


1521 - Windows 에서 터널링으로 접속 하기위한 포트 입니다.

별도의 아이피를 앞에 기재할 수 있으나 지금처럼 바로 포트만 입력한다면 기본값으로 localhost(127.0.0.1) 이 되게 됩니다

접속 화면을 보면 이해가 더 빠르실 수 있습니다.




192.168.56.51:1521 - 위에서 Oracle 이 구동되고 있는 서버로 접속 한 이후 Forwarding 으로 접속할 최종 목적지 정보 입니다

예를 들어 Oracle Listener 나 이런 터널링으로 접속할 데몬이 127.0.0.1 로 포트 listen 중이라면 127.0.0.1:8009 이와 같이 사용하여도 됩니다.

Oracle Listener 의 Listen 바인딩 주소가 loopback(127.0.0.1) 이 아닌 아이피로 구동중이라면 127.0.0.1:1521 이와 같이 접속시 접속이 안될수 있습니다.
보통은 loopback 이 아닌 아이피로 listener는 구동 됩니다.






위와 같이 터미널에서 실행하여 PW를 입력하여 접속이 완료 되었다면 해당 창은 그대로 두고 Oracle Client 툴로 접속을 시도 해봅니다


아래 이미지 처럼 주소를 서버 IP대신 localhost 로 변경 하여 접속을 시도 합니다.
터널링이 정상적으로 수행 되었다면 아래와 같이 접속이 가능한 것을 확인 하실 수 있습니다.







아래와 같이 SID : ORCL DB 에 정상적으로 접속된걸 확인 하실 수 있습니다.




[참고] 해당 DB는 19.7 New Feature -  SEHA의 테스트시 생성한 Linux 환경의 DB 입니다.


SSH 터널링의 종료는 위에서 SSH로 접속한 터미널에서 exit 로 접속을 해제 하시면 됩니다.









Mac 환경에서 실행



맥은 원래 freebsd 기반의 운영체제로 터미널에서의 ssh 접속이 가능합니다.


사용법은 위의 Windows 와 크게 다르지 않으며 오히려 백그라운드로 수행 처리가 원할하게 사용할 수 있습니다.


SSH 터널링은 아래와 같이 실행 합니다.


ssh -f -N -L 1521:192.168.56.101:1521 oracle@192.168.56.101
or
ssh  -L 1521:192.168.56.101:1521 oracle@192.168.56.101


둘다 가능하며 -f -N 옵션을 추가하게 되면 백그라운드로 ssh 터널링을 진행 하라는 옵션 입니다.

그외 내용은 위에서 설명한 내용과 동일 합니다.




클라이언트 툴에서는 사용중인 PC를 바라보는, 즉 localhost 로 설정 하고 접속을 시도 하시면 됩니다.










아래와 같이 특이사항 없이 정상 적으로 접속한 화면을 보실 수 있습니다.






맥에서 SSH 터널링을 백그라운드로 수행하였다면 ps -ef | grep ssh 등으로 검색하여 kill -9  로 해당 프로세스를 종료 하시면 되며
포그라운드 모드로 접속 하였다면 exit 로 접속을 종료 하시면 됩니다.








Conclusion



사실 SSH 터널링을 이용하는 것이 주된 내용이며 SSH 터널링으로는 사용하기에 따라 여러 활용방안이 나올수 있습니다 


키 인증 방식을 사용한 SSH 접속이 가능한 클라우드나 서버를 통해 뒤에 있는 Oracle DB의 접속이 필요할 때 이와 같은 방법으로 사용 해보시면 좋을것 같습니다.


[참고] Mysql 용 클라이언트인 Mysql Workbench 에도 이와 같은 기능이 내장되어 있고 이전부터 사용하였던 방식이긴 합니다.


오라클 툴에서는 Oracle SQL Developer 에는 이와 같은 기능이 내장된것으로 알고 있습니다.



연관된 글 
- Oracle 19c client , Instance Client 설치 - Orange 툴 설치 및 설정

 SSH 키 방식을 사용한 서버 접속 - 윈도우 와 맥

 

답글 남기기