SSH(Secure Shell)_터널링(2)
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 9,323 조회
- 0 추천
- 목록
본문
SSH(Secure Shell) |
목차 ssh를 통한 원격의 X윈도우 어플리케이션 실행 리눅스에서 SSH의 터널링 사용하기 SSH 의 터널링 사용하기(윈도우) Xshell 을 이용한 터널링의 예제 참고문헌 또는 URL
|
ssh를 통한 원격의 X윈도우 어플리케이션 실행 |
바로 앞에서 든 예가 TCP/IP가 작동하는 방식이고 또한 어떤 식으로 피해를 입는지도 나타낸 것이다. 실제로 스니핑이라는 해킹 기법을 사용하면 네트웍을 통해 하는 얘기들을 엿들을 수가 있고 사용자의 ID와 패스워드 역시 쉽게 알아낼 수가 있다. 우리들이 일반적으로 많이 사용하는 telnet과 역시 버클리 대학에서 개발한 r자로 시작하는 많은 원격 유틸리티들도 이와 같이 그냥 TCP/IP를 사용하기 때문에 원격으로 접속해서 우리가 무슨 짓을 하는지 모두 보이게 된다. 만일 우리가 감시당한다면 이는 기분이 나쁠 뿐만 아니라 개인적인 프라이버시의 문제이기도 하다. 그러면 위의 예를 다시 생각해 보자.
영희와 철수는 지난 번의 사건 때문에 크게 상처를 받았고 그 후로 교실에서 아예 말을 못하게 되는 실어증까지 걸렸다. 그러나 영원히 말을 안하고 살 수는 없는 법! 그 둘은 드디어 한 가지 방법을 고안해 냈다. 바로 둘만의 밀어를 만들어낸 것이다. 이제는, "철수야!"가 아니라 "철수얌~"이라고 부른 뒤에 "엥?"이라는 대답이 오면 그 다음부터 암호로 얘기하는 것이다. "숭구리당당" "앗사라비아" "니꼴라~스?" "쿤타킨테~"라고 둘은 말하게 되는데, 교실에 있는 48명의 학생들은 심술궂은 학생을 포함해서 아무도 무든 얘기를 주고 받는지 알 길이 없다. 다만, 미리 동일한 프로토콜을 사용하기로 약속한 영희와 철수만이 저 위의 대화가 "사랑해" "나도 그래" "정말이야?" "당근이쥐"라는 뜻임을 알고 있는 것이다. 이 암호를 개발한 뒤부터 영희와 철수는 심술궂은 학생이 엿들을 걱정도, 놀림받을 염려도 없이 마음껏 대화를 할 수 있게 되었다.
것이 바로 SSH이다. SSH는 Secure Shell의 약자로 SSH Communication Security Ltd에서 개발한 것인데, 이는 자유롭지 못하기 때문에 OpenBSD 프로젝트에서 완전히 새롭게, 독점 코드를 사용하지 않고 만들어 구현한 것이 바로 OpenSSH이며 OpenSSH는 암호화 기법을 사용해 통신을 하게 되므로 매우 안전하다. OpenSSH는 현재 SSH1과 SSH2를 모두 지원하고 있다. 다만, SSH 전용의 특허등을 피하기 위해 옵션으로 제공되지 못하는 것들이 조금 있다.
OpenSSH에서 제공하는 프로그램등으로는 ssh, scp, sftp, sshd, sftp-server 등이 있는데, 대부분의 경우는 ssh, sshd, scp를 사용하게 될 것이다. sshd는 Secure Shell Server로 telnet 서버와 같이 ssh의 요청을 받아들이고 처리하는 역할을 한다. 다른 사람들이 자신의 컴퓨터로 ssh를 통해 로그인할 수 있도록 하려면 이를 사용하면 된다. ssh는 rsh (Remote Shell)이나 telnet 또는 rlogin (Remote Login)과 같은 종류의 프로그램으로 Secure Shell Server가 구동되고 있는 곳에 안전하게 접속할 수 있도록 해준다. scp는 Secure Copy로 rcp (Remote Copy)와 같이 원격 서버로 쉽게 파일들을 복사할 수 있도록 해준다.
OpenSSH를 개발하는 OpenBSD에 대한 설명을 안하고 넘어갈 수가 없는데, 아주 간략하게 설명하자면, 유닉스를 처음 Bell 연구소에서 만들었고, 버클리 대학에서는 몇 가지를 수정하고 추가해서 사용하고 판매했는데, 나중에 저작권 문제 때문에 커널 코드부터 새롭게 작성하게 되었고, 이 BSD (Berkeley Software Distribution)에서 386에서 사용할 수 있는 버전이 나왔고 이 것이 FreeBSD와 NetBSD로 대표된다. ssh를 사용하지 않는 사람이 거의 없는 현실에도 불구하고 ssh로 X11 트래픽을 포워딩할수 있다는 사실을 알고있는 사람은 많지않다. 만약 로그인을 하는 ssh서버가 X11 포워딩을 허용한다면 다음과같이 X어플리케이션을 간편하게 실행할수 있다. 1.1.1.1. $ ssh -X 원격서버주소 1.1.1.2. $ firefox & 로컬시스템에서 X를 실행하는 동안은 데스크탑에 원격서버의 firefox 가 실행될것이다. 이 firefox 는 실제로 로그인되어있는 원격서버에서 실행되어져서 모든 X11트래픽이 암호화되어 로그인한 ssh연결로 보내지고, 로컬의 화면에 표시되는것이다. 포워딩이 되지않는 다면 sshd_config 파일의 내용중에 다음설정을 추가하고 sshd 데몬을 다시 시작한다. 레드햇계열이라면 /etc/ssh/ 안에 있을것이다. 1.1.1.3. 1.1.1.4. X11Forwarding yes 윈도우라면 X서버가 구동되고 있어야 원격의 리눅스서버의 X11 어플리케이션을 실행시킬수 있다. www.netsarang.co.kr 의 Xmanager 를 이용하면 원격의 리눅스X 어플리케이션을 실행시킬수 있으며, 이에 대한 내용은 별도의 문서로 제작해두었으니 참고하기 바란다.
|
리눅스에서 SSH의 터널링 사용하기 |
이전의 철수와 영희 이야기에서 보았듯이 OpenSSH는 telnet, ftp, rlogin, rsh, rcp를 대체하는 안전하고, 암호화된 네트워크 연결 도구이다. sshd 서버를 운영하지 않는 서버 관리자는 보안에 전혀 관심이 없는 사람이다. www.openssh.org의 OpenSSH FAQ에는 아래처럼 말하고있다.
강력한 보안 프라이버시 보호. 모든 통신은 자동으로 그리고 투명하게 암호화된다. 안전한 X11 세션. 원격 서버에 DISPLAY 변수를 자동으로 설정하고 모든 X11 연결을 보안채널을 통해서 포워딩한다. TCP/IP 포트를 양 방향에서 다른 포트로 자유롭게 포워딩할수 있다. rlogin, rsh, rcp등을 완전히 대체한다. 선택적으로 데이터를 압축하여 느린 네트워크 상에서의 속도 향상 서버는 자신의 RSA 키를 가지며 일정 시간마다 자동으로 재 생성한다. 터널링은 다른말로 포트포워딩이라고도 사용된다. ssh는 원격의 쉘 엑세스와 원격명령의 실행뿐만 아니라 임의의 TCP 포트를 다른쪽으로 포워딩할수 있다. 이기능은 이메일, 웹 또는 기밀을 유지해야하는 다른 트래픽을 보호하는데에 매우 편리하다 ssh의 포워딩과정은 1. 로컬포트에 바인딩하고 암호화를 수행한다 2. 암호화된 데이터를 ssh로 연결된 원격종착지로 보낸다 3. 복호화를 수행한다. 4. 복호화된 수행결과를 지정된 로컬또는 원격호스트의 포트로 보낸다. -L(Local의 약자) 옵션을 통해서 ssh 터널을 시작하게 된다. 1.1.1.1. 1.1.1.2. 1.1.1.3.예) #ssh -f -N -L110:mailhost:110 -l user mailhost 이 예에서 권한포트(110,POP포트)에 바인딩해야 하므로 루트로 실행되어야 한다. 또한 로컬에서 실행되는 다른POP 데몬이 있다면 비활성화 해야한다. 그렇지않으면 방해가 생기므로 서비스를 비활성화하지 않는다면 다른포트로 대체해야한다. 이제 모든 POP트래픽을 암호화 하기위해 메일클라이언트가 로컬호스트의 110번 포트에 연결되도록 설정하면 전체트래픽이 암호화 되어서(마치 로컬호스트를 거치지 않은것처럼) mailhost에게 이메일을 전달할 것이다. -f 옵션은 ssh가 백그라운드로 실행되도록하며 -N 스위치는 원격시스템에서 실제로 명령을 실행하지 않게한다. 만일 ssh서버가 압축을 지원한다면 -C 옵션을 이용해서 압축한다. 압축을하면 메일을 다운로드하는데 걸리는 시간을 대폭줄일수 있다. ssh로 연결할때는 원하는만큼 -L 옵션을 사용할수 있다 외부로 보내어지는 이메일 트래픽을 포워딩하려면 다음과같이 할수있다. 1.1.1.4.# ssh -f -N -L110:mailhost:110 -L25:mailhost:25 -l user mailhost 이렇게하면 적어도 메일을 발송하는 SMTP 까지는 암호화된 트래픽이 전송될것이다. 원격에 접속한 상태에서 포트를 신속하게 포워딩하기 위해서는 다음과같이한다 1.1.1.5. 1.1.1.6. 1.엔터를친다 1.1.1.7. 2.~C를 입력한다 1.1.1.8. ssh> L8080:localhost:80 1.1.1.9. Forwarding port. 이렇게하면 현재 쉘이 로컬포트 8080 번을 접속한 원격서버의 80번으로 포워딩할것이다 |
SSH 의 터널링 사용하기(윈도우) |
[그림 1] 『SSH, The Secure Shell: The Definitive Guide』 317p 참고, SSH 포워딩 위 [그림 1]에서처럼 Host A에는 SSH 클라이언트가 설치되어 있고 Host B에는 SSH 서버가 설치되어 있다고 하자. 1.1.1.1. 1.1.1.2. $ ssh -L포트번호1:호스트명:포트번호2 서버명 1.1.1.3.
[그림 2]『SSH, The Secure Shell: The Definitive Guide』 329p 참고, Local port forwarding 포트번호1은 SSH 클라이언트가 검사(Listen)하고 있을 포트번호를 지정하는 것이다. 1.1.1.4. 1.1.1.5. $ ssh -R포트번호1:호스트명:포트번호2 서버명 이때 포트번호1은 SSH 서버가 검사(Listen)하고 있게 되고 여기로 데이터가 왔을 때 SSH클라이언트에게 이 데이터를 전해주고, SSH 클라이언트는 호스트명의 포트번호2로 데이터를 전송하게 된다. 이때에는 호스트명이SSH 클라이언트 입장에서 호스트명이다. 아래 [그림 3]은 Remote port forwarding을 나타낸다.
[그림 3] 『SSH, The Secure Shell: The Definitive Guide』 329p 참고, Remote port forwarding 이젠 터널링의 실제 사용 예에 대해서 알아보도록 하자. 터널링을 이용하여 방화벽을 우회하는 예제와 안전하게 메일을 송수신 하는 예제를 살펴볼 것이다. 서버, PC, 그리고 그 사이에도 방화벽이 있을 수 있다. 만약 방화벽이 설치 되어 있어 우리가원하는서비스에 접속할 수 없다면 그냥 그렇게 살아야 할까? 아니다. SSH 서비스가 방화벽에 의해 차단되지 않는다면 가능성은 있다.바로 터널링인 것이다. 다음 [그림 4]을 살펴보자.
[그림 4]『SSH, The Secure Shell: The Definitive Guide』333p 참고, 터널링을 이용한 방화벽 우회 mail reader가 IMAP mail server로 접속을 하려 하는데 IMAP 포트(143번)가 서버에서 방화벽으로막혀있는 상황이다. 하지만 서버에 SSH 포트(22번)는 열려있다. 이럴 경우 mail reader는 그림에서처럼 터널링을이용하여 IMAP mail server로 접속이 가능한 것이다.
|
Xshell 을 이용한 터널링의 예제 |
사용자의 컴퓨터에서 www.netsarang.co.kr의 홈페이지에 접속하길 원한다고 하자.
Host에 SSH 서버의 호스트명이나 IP를 적어주면 된다.
여기에서 Add를 누르고 다음 그림처럼 터널링(Local Forwarding)을 설정하도록 하자.
위에서 SSH 클라이언트가 있는 곳의 8080번 포트로 접속을 하면 SSH 서버가 있는 곳에서www.netsarang.co.kr의 80번 포트로 데이터를 넘겨 주도록 Local forwarding 설정을 하였다. 이렇게한 후 SSH 서버에 접속을 하면 터널이 열리게 된다. SSH 서버에 접속후 윈도우에서 다음과 netstat -a 명령어로8080번 포트를 SSH 클라이언트가 검사하고 있는지 확인할 수 있다.
위 그림에서 볼 수 있듯이 8080번 포트가 LISTENING 상태로 정상적인 터널이 열렸다. 이제는 다음 그림처럼 http://localhost:8080/에 접속을 하면 우리가 원하는 홈페이지를 볼 수 있다.
이는 간단한 예이므로 이를 응용해서 유용하게 사용할 수 있을 것이다. 여기서 잠시 투명성(Transparency)에 대해서알아보자.
이때 SSH 서버가 동작한다면 터널링을사용하여 우리가 원하는 작업을 할 수 있다.
이번에는 로컬호스트의 1025, 1110번 포트로 오는 데이터를 각각 서버(서버의 로컬호스트는 서버 자신이므로)의 25,110번 포트로 포워딩하도록 설정하였다.
받는 메일과 보내는 메일에 실제 메일 서버가 아닌 localhost로 등록을 하였다.
이제 모든 설정이 다 끝났다. 이번 역시 아웃룩이란 프로그램에는 SSH가 투명성을 제공하지만 사용자에겐 그렇지 못하다는 것을 알수 있다.
그림에서 1025와 1110을 LISTENING하고 있는 것을 볼 수 있다. 이제 아웃룩에서 보내기/받기를 누르면 정상적으로 작동하는 것을 확인할 수 있다.
|
참고문헌 또는 URL |
『SSH, The Secure Shell: The Definitive Guide』 Daniel J. Barrett &Richard E. Silverman, O'REILLY http://network.hanbitbook.co.kr/view.php?bi_id=547 http://www.faqs.org/faqs/computer-security/ssh-faq/ http://www.openssh.com/faq.html http://www.onsight.com/faq/ssh/ssh-faq.html /_Data/Linux_old/linux/rootman/page01.htm |
관련자료
-
이전
-
다음