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

Share

Last Updated on 1월 20, 2024 by Jade(정현호)

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 에는 이와 같은 기능이 내장된 것으로 알고 있습니다.


연관된 다른 글 

 

 

 

 

 

 

 

                

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x