원문 게재일 : 2006 년 12 월 26 일
Secure Shell (SSH), PuTTY, Cygwin 같은 오픈 소스 툴을 사용하여, 액세스 할 모든 리소스에 보안 연결을 구축할 수 있습니다. 현재 SSH 터널링과 설정에 대한 정보는 불충분하고, 특정 애플리케이션으로 제한되어 있거나, 시스템 관리자 레벨에 맞춰 작성되었습니다. 보안 필요성의 대두, 방화벽의 추가, 네트워크 포트 허용의 제한 등으로 인해 사용자들은 새로운 방법을 모색하고 있습니다. 설정이 간단하고, 작동이 쉬우며, 안전하게 일상의 태스크를 수행하고 서비스에 액세스 할 수 있는 방법이 필요하게 되었습니다.
작업을 하다 보면, 사용자들이 네트워크 관리자들이 부과한 새로운 보안 제약 때문에 곤란을 겪는 것을 많이 본다. 사용자들은 보안의 필요성에 대해서는 이해하지만, 이러한 제한 때문에 생산성에 심각한 병목 현상을 초래할 수 있다. 사용자들은 기술적으로는 박식하지만, 네트워크 서비스 설정과 방화벽은 그들의 지식 영역 밖에 있는 문제이다.
SSH 서비스를 통해 데이터와 서비스를 연결하는 유연한 수단을 설치, 구성, 운영하는 기능을 제공하는, AIX®- 또는 Linux®-기반 SSH 서버로 연결하는 SSH 클라이언트를 설정하는 방법을 설명하겠다. 사용자들은 자신의 환경을 제어할 수 있고, 매일매일의 필요에 맞춰 변경할 수 있고, 포트 개방에 대한 사용자 요청이 줄어들고, 결과적으로 보안 환경을 보다 엄격하게 제어할 수 있게 되기 때문에 관리자들도 혜택이 돌아간다.
보 안 위협은 매일 생겨나고, 네트워크 관리자들은 컴퓨팅 자산에 대해 당연히 방어적이 된다. 하지만, 보안 범위의 증가로 인해 합법적 사용자들 조차도 심각한 타격을 받을 수 있고, 좌절감, 생산성 감소, 위험한 시도 등을 야기시킨다. 올바른 연결 툴로 무장한다면 태스크가 훨씬 더 쉬워지고, 네트워크 보안과 무결성은 유지될 것이다. 주목할 만한 IT 툴킷 중 Secure Shell (SSH)이 있다. Telnet을 대체하는 SSH에 대해 대부분의 사용자들은 잘 알고 있지만, 장점에 대해서는 많이 모르는 것 같다. 올바르게만 설정된다면, 서버와 클라이언트는 SSH 링크를 사용하여 어떤 서비스와도 가상으로 연결 및 통신할 수 있다. 게다가, SSH는 본질적으로 Telnet, FTP, 또는 다른 암호화 되지 않은 프로토콜 보다 안전하기 때문에, 대부분의 네트워크 관리자들은 SSH 통신을 사용하고 있다. 다음은 효과적이고 안전하게 방화벽을 통해 연결하는데 사용했던 기술을 소개하겠다.
시작하기 전에,
- Windows® 호스트 (이하 SSH 클라이언트)와 SSH 클라이언트 소프트웨어(PuTTY)가 있는지를 확인한다.
- SSH 서버(이하 SSH 서버)가 필요하다. -- 일반적으로 방화벽으로 보호를 받는 네트워크 영역 안에 있고, 서버는 보통 AIX®, Linux®, 또는 UNIX® 계열에 기반하고 있지만, Windows 기반 서버도 사용될 수 있다.
- 추가 서버 프로세스(Server Message Block (SMB), Virtual Network Computing (VNC) 등)가 필요하다.
대부분의 유닉스 계열 운영 체계에는 다양한 OpenSSH 소프트웨어가 포함된다. 배포판에 없을 경우, OpenSSH 사이트(참고자료) 에서 바이너리나 소스 코드를 찾아보기 바란다. 서버 설치는 Redhat Package Manager (RPM)를 설치하고 설정 사항을 확인하는 것만큼 간단하다. 정확한 설치 방법은 운영환경에 따라 다를 수 있다. 실제로, OpenSSH는 대부분의 유닉스 시스템에 기본적으로 설치된다.
이 글에서는, 무료 SSH 클라이언트인 PuTTY를 사용할 것이다. 설정은 비교적 평이하지만, 클라이언트 선택은 사용자에게 달려있다. 기본적인 SSH 연결 과정은 여러분도 알고 있다고 가정하고, 연결된 서비스들간 연결하는 부분을 자세히 설명하겠다.
그림 1은 SSH 터널을 통한 기본적인 VNC 연결의 기본 개념을 묘사한 것이다.
그림 1. SSH 터널을 통한 기본적인 VNC 연결
- 어 떤 서비스도 원격 서버상에 연결할 로컬 포트에서 실행되어서는 안된다. 다음 단계에서는, SSH 클라이언트를 사용하여 로컬 클라이언트에 있는 가상 서비스를 정의한다. 이것은 원격 시스템상의 서비스와 상응한다. 따라서 원격 포트와 상응하는 로컬 포트는 사용할 수 있어야 한다. 예를 들어, 터널링을 사용하여 원격 시스템에 SMB 공유에 액세스를 시도한다면 로컬 시스템 상의 Microsoft® Networks용 File and Printer Sharing를 중지시켜야 한다. 마찬가지로, 원격 호스트에 VNC 서버로 붙일 의도라면, VNC 서버 세션이 로컬 시스템에서 실행 중이라면, 여러분이 연결 할 원격 시스템의 세션과 같은 포트에 없어야 한다.
- 클라이언트 워크스테이션에서, 표준 SSH 연결 프로파일을 만들어서 원격 호스트로 연결한다. 다음 예제는 여러분이 무료 PuTTY SSH 클라이언트를 사용하고 있다고 가정한다. 하지만 클라이언트와 상관 없이 원리는 같다.
|
그림 2. 대안 PuTTY 설정
- 위 그림 2에 정보를 입력한 후에, Category tree에서 Session 아이템을 선택하고 앞으로 사용할 때를 대비하여 세션을 저장한다.
- Client 워크스테이션에서, 위에서 만든 세션을 연다. 클라이언트와 서버 간 연결이 처음 이루어질 때 서버 키를 로컬 키 스토어에 추가했는지를 확인한다. 원격 서버 키를 검토하고 수락했다면, 원격 서버에 사용자 아이디와 패스워드를 준다. 원격 시스템에 명령어 프롬프트를 받으면, SSH 연결과 터널은 사용할 준비가 된다.
- Client 워크스테이션에서, VNC 뷰어 소프트웨어를 시작하고 VNC 서버 필드에
localhost:5900
을 입력한다.(그림 3) 그리고 나서 Connect를 클릭한다. 연결 창 모양은 사용하고 있는 VNC 버전에 따라 다르다. 원리는 같다.
그림 3. VNC 옵션
- 몇 초 안에, VNC 창이 나타난다. 이제 시스템은 SSH 링크를 통해 VNC 세션을 수행한다.
위 에서 상세히 설명한 대로 기본 연결을 구축했다면, 이 패턴을 반복하여 포트를 설정할 서비스를 연결할 수 있다. 게다가, 하나의 링크를 사용하여 보안 영역 내에 다중 서비스와 추가 서버들에 액세스 하도록 포워딩(forwarding)이 설정될 수 있다. 다음 예제에서, SSH 클라이언트는 이전 예제와 마찬가지로 SSH 서버로 연결한다. 그리고, SSH 클라이언트는 추가 포트(139)를 또 다른 원격 서버에 전달하도록 설정된다. 원격 서버는 설정을 적용하기 위해 특별한 설정이나 소프트웨어가 필요 없으며, 설정은 운영 체계와는 독립적이다. SSH 함수는 통신용 도관으로서 작동한다. 이전 예제의 SSH 서버 설정은 아래 묘사되어 있다. 새로운 설정 아이템들은 파란색으로 되어 있다. 클라이언트가 하나의 보안 포트를 사용하여 동시에 여러 서버들과 서비스들에 액세스 할 수 있도록 해준다. 그림 4는 연결이 사용되는 방법을 묘사한 것이다.
그림 4. SSH 서버 설정
보다 일반적인 포트도 있다.
- Windows File Sharing: 139
- Windows Remote Desktop Protocol: 3389
이것은 전체 리스트가 아니다. 앞서 언급했듯이, 포트가 구분될 수 있는 대부분의 네트워크 서비스들은 이 방식으로 포워딩 될 수 있다.
- 이전 섹션의 단계를 따라가면서, 아래 그림과 같이, 추가로 전달된 포트를 PuTTY Configuration 윈도우에 추가한다. 그림 5는 Windows File 공유용 터널 정의를 묘사한 것이다.
그림 5. Windows 파일 공유
- 터널을 정의하고 프로파일을 저장한 후에, SSH 세션을 열고 Server 1에 로그인 한다.
- 로컬 Windows Client에서, Windows Explorer 세션을 열고
\\localhost\sharename_on_Server2
를 입력한 다음, Enter를 누른다. - 몇 초가 지난 후에, 원격 공유를 위해 로그인 크리덴셜을 요청하는 패스워드 프롬프트를 받게 된다. Server 2에 사용자 이름과 패스워드를 입력한다.
- 몇 초가 더 지난 후에, 윈도우는 리프레쉬 되고 파일 리스팅을 나타낸다.
가 장 난해한 SSH 중 하나가 X11 포워딩이다. 애플리케이션의 그래픽 부분이 SSH 클라이언트에서 실행되도록 하면서, 로직은 원격 서버에서 실행된다. 이 같은 방식을 사용하여, 사용자들은 링크를 통해 전체 데스크탑을 전달할 때의 네트워크 오버헤드를 피할 수 있고, 디스플레이의 관련 부분들만 받을 수 있다. 그림 6은 X11 포워딩의 기본 시나리오이다.
그림 6. X11 포워딩
필요한 것:
- Windows host (SSH 클라이언트) X 서버와 SSH 클라이언트 (Cygwin-X)
- 한 개의 SSH 서버 (SSH 서버) -- SSH 서버 소프트웨어 (*IX: OpenSSH)
- 그래픽 서버 애플리케이션
로 컬 Windows 워크스테이션에 X 서버를 설정하려면, Cygwin 설정 프로그램에 액세스 한다. 디폴트 설치로 Cygwin-X 패키지를 설치한다. 디폴트 설치가 완료되면 다음 단계를 따라 GUI 디스플레이를 로컬 시스템으로 전달한다.
- 원격 SSH 서버에서, sshd_config 파일을 찾는다. 일반적으로 이 파일은 /etc/ssh/에 있지만, 운영 체계나 배포판에 따라 다르다.
-
sshd_config를 편집하고 X11Forwarding를 포함하고 있는 라인을 찾는다. 아래 예제와 비슷하다.
.
.
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
.
.
편집을 끝마쳤을 때, 위 예제와 같은지를 확인하라. 코멘트 마크(#)가 앞에 붙어서는 안되며, 값은 Yes로 설정되어야 한다. sshd_config 파일을 변경해야 한다면, SSH 서브 시스템을 재시작 해야 한다. - 로컬 SSH 클라이언트에서, ssh_config 파일을 찾아라. CygwinX로 설정된 시스템에서, 파일은 /cygdrive/c/cygwin/etc/에 있게 된다.
- ssh_config를 편집하고 다음 라인을 찾는다.
.
.
#Host *
#ForwardAgent no
ForwardX11 yes
#RhostsRSAAuthentication no
#RSAAuthentication yes
.
.
편집을 마친 후에 라인이 위 예제와 동일한지를 확인하라. 코멘트 마크(#)가 앞에 붙어서는 안되며, 값은 Yes로 설정되어야 한다. ssh_config 파일을 변경해야 한다면, 변경 사항이 적용되도록 활성 SSH 세션을 재시작 해야 한다. - 로컬 SSH 클라이언트에서,
<cygwin home>\usr\X11R6\bin\startxwin.bat
을 실행하여 X 서버를 시작하라. 몇 초가 지난 후에, 명령어 쉘 윈도우가 나타난다. - 명령어 쉘 윈도우에서, 이전 단계에서 설정했던 SSH 서버로의 표준 SSH 연결을 초기화 하라. 명령어는 ssh user@hostname.domain 형식을 취한다.
- 로그인을 하고, 원격 머신에 액세스 했다면, 그래픽 컴포넌트를 가진 어떤 애플리케이션이라도 실행할 수 있으며, 그래픽 부분은 SSH 클라이언트의 디스플레이에 디스플레이 될 것이다. 링크가 올바르게 적용되었는지 빠르게 확인하려면,
xclock
을 입력하여 표준 X Window 클락 유틸리티를 시작한다. 아날로그 시계 모습을 한 창이 나타날 것이다. (그림 7)
그림 7: xclock과 DB2® Control Center
증 가하는 보안 범위 때문에 생겨난 불편함은 줄일 수 없지만, 생산성에 미치는 영향은 줄일 수 있다. 일반적으로 사용할 수 있는 툴이나 SSH, PuTTY, Cygwin 같은 오픈 소스 툴을 사용하여, 사용자들은 액세스 하고자 하는 거의 모든 리소스에 간단하고 안전한 연결을 할 수 있다. 위에 설명한 기술들을 적극 사용함으로써 네트워크 매니저들은 사용자가 보안 요구 사항들을 준수하도록 하면서, 일상의 액티비티에 더 높은 수준의 제어를 할 수 있다.
출처: http://www.ibm.com/developerworks/kr/library/au-tunnelingssh/index.html