본문 바로가기

Tips

SSH 터널링으로 회사방화벽 우회하기


별 관계없는 사진입니다


대부분의 회사나 대학교 등의 기관들은

내부에서 외부로 나가는건 거의 다 되고 외부에서 내부로 들어오는 것은

막아 놓은 경우가 많다


근데 그 기관에 유닉스 서버를 구동하고 있는 경우라면 22번 포트 ssh 포트가 열려있는 경우가 있다

(여기서는 22번 포트로 예를 든 것이지만 그냥 포트 열려 있는게 뭔지 안다면 SSH 서버 포트를 변경하면된다)


이 방법은 회사에서 내부로 들어오는 포트중 ssh포트만을 열어 놓았고

그리고 내부에 본인의 컴퓨터가 있을 시

외부에서 내부의 컴퓨터를 제어할 때 사용할 수 있는 방법이다

(회사에 업무 처리할게 남았다거나 혹은 회사에 파일을 집으로 옮기거나)

먼저 


※SSH란

Secure Shell 의 약자로

통신 프로토콜의 하나인 텔넷(Telnet)과 거의 비슷한데

이 텔넷이라는 것이 평문통신이라 워낙에 보안에 취약하다 보니

이 보안을 강화하기 위해 패킷을 암호화 하도록 만든 것이다


그리고 SSH터널링 이란

이 SSH라는게 상당히 보안성이 좋기 때문에

SSH 접속을 다른 암호화 접속을 사용하지 않는 프로그램이

암호화 접속을 사용할 수 있도록 포트 포워딩 해주는 것입니다.


SSH는 포트를 포워딩 해준다는 것을 이용해

VNC을 사용해 보도록 하지요


모식도를 보자면 대충 이렇습니다

(구글에서 대충퍼와서 수정만 좀 한거라 그림이 상당히 허접하긴 합니다)

방화벽이 ssh외에 다른 포트들을 필터링 시켜 버릴때

사내 내 컴퓨터에 SSH서버를 설치하여

터널을 뚫는것이다

그래서 터널을 통하여 VNC과 RDP를 이용할 수 있다


퇴근 전에 SSH서버와 VNC서버를 컴퓨터에 설치한다

SSH서버 설정도 올릴려고 했는데

길바닥에 널릴 정도로 흔한게 SSH서버 설정인것 같아 생략했다


SSH서버는 윈도우용으로 Cygwin을 깔아서 OpenSSH를 설치하는방법 (쌩판 윈도우용도 있다 )

                                   FreeSSHd를 설치하는방법

     Bitvise SSH(구 WinSSHd 사명을 알리려는 수작인지 이름을 바꾸었다)를 설치하는 방법 등이 있다

     Bitvise SSH와 FreeSSHd는 상용으로는 사용을 못하기 때문에 감사 뜨면 클난다


리눅스 용으로는 그냥 걱정없이 OpenSSH를 이용하면 된다

아마 배포판 마다 그냥 설치시 기본 포함 되어 있을 것이고

sshd만 활성화 시켜주면 된다



그리고 집에서

PuTTY를 이용하여 (다른 SSH클라이언트들도 거의 동일하다)


Tunnels탭에서 터널을 생성한다(타 클라이언트에서는 Forwarding이라고도 한다)

 Source port(다른 클라이언트에는 local Port라고도 한다)에는

내 몇번포트를 SSH터널로 포워딩하고 싶은지를 넣고

Destination(타 클라이언트에는 Remote라고도 한다) 에는

내가 source port로 보낸 패킷을 어디에 몇번포트로 포워딩하고 싶은지를 적는다

예를 들어 내가 VNC을 이용하고 싶을때 


Source Port에다가는 VNC포트인 5900이나 5901을 넣고

(꼭 저 포트를 안넣어도 된다 아무거나 입력하고

접속할때 포트만 잘 입력해주면 된다

도착포트가 중요하지 보내는 포트는 별로 중요치 않다)


Destination에는 VNC에 접속하고 싶은 주소:포트를 입력하면 된다


여기서 나는 내가 VNC을 하고자 하는 컴퓨터가 곧 서버이므로

서버ip:5900을 입력하였다


접속할 아이피와 포트를 입력후 Open을 누른다

(서버에서 포트를 22번 기본 포트가 아닌 다른걸로 바꾼 경우 Port에 바꾼 포트를 입력한다)

여기서 Save를 하게 되면

다음 연결시 불러 올 수 있어 상당히 편하다


접속을 하게되면 로그인 아이디와 비밀번호를 입력한다


로그인을 완전히 하게되면 윈도우 명령프롬프트를 볼 수 있는데

(리눅스라면 리눅스 터미널이 보인다)

그냥 이대로 놔두고 VNC 뷰어를 실행한다



아이피에 상대방 아이피를 쓸 것 없이 localhost:포트 를 입력한다

이유는 터널링으로 내 로컬포트 5900으로 보내게 설정해 놓았으니

포트는 5900이라면 생략가능하고 5901이면 1만 입력하면된다


그러면 VNC로그인 창이 뜨는데 설정해 놓은 비밀번호를 입력한다


일단 연결이 되긴 했는데 언제쯤 공공기관과 회사는

XP와 엑티브X 를 버릴 수 있을 까요

윈도우 8이 나온 시점에;;;

그리고 XP지원 끊길때 까지 얼마 남지 않았죠


아 그리고 꼭 SSH서버가 깔린 곳만 제어할 수 있는건 아닙니다

일단 SSH로 회사 내부망에 들어온 상태니 서버를 통해 다른 내부망에 있는 어떤 컴퓨터로도 접근이 가능합니다

예를 들어 ip뒷자리 22인 사내 내컴퓨터에 VNC를 이용하면서도

ip 뒷자리가 39인 사내 프로젝트 서버로 접속하고 싶을때 

세팅을 저렇게 합니다

포트포워딩으로 22번포트가 연결중일 테니 Source 포트는 맘에드는 걸로 넣어주고

도착지 포트만 제대로 22로 넣어줍니다



그래서 내 컴퓨터에 연결이 되었을 때 창을 하나 더 띄워

ip에 localhost(127.0.0.1)을 넣고 포트에 아까설정한 51을 입력하면


사내 프로젝트 서버에도 동시 접속됩니다

(솔찍히 이건 이렇게 할 필요 없었는데 예를 들기 위해 보여준것)


이런식으로 방화벽이 존재 하더라도

 윈도우 RDP등등 여러가지들을 이용할 수 있습니다


위처럼 설치까지도 귀찮다 하시면

그냥 DD-WRT지원하는 공유기나 라즈베리파이 같은거 사내에 넣어놓고 그안에 있는 SSH서버 이용하시면 되겠습니다


오타, 잘못된점, 지적 감사히받습니다


반응형
  • 좋은정보감사합니다 2013.04.10 08:14

    회사내 개인 PC에 SSH서버를 설치한다고 해도 포워딩없이 개인PC에 접속이 가능한건가여?

    • Favicon of https://neoray.org BlogIcon NEORAY 2013.04.10 14:42 신고

      회사내에 22번 포트가 열려있을시
      (꼭 22번이 아니라도 상관 없습니다
      그냥 외부에서 회사로 스캔을 했을때 열려있는
      포트가 있으면 SSH서버에서 포트를 그 포트로 지정하면 됩니다)
      회사 내부 PC에 SSH서버를 설치하고
      회사 밖에서 회사안으로 접속이 가능합니다
      22번 포트외에 나머지 포트가 다 막혀 있더라도
      SSH터널링으로 모든 포트 사용가능합니다

      회사안에서 밖으로의 우회는
      반대로 집에있는 컴퓨터에 SSH 서버를 설치하고
      socks5 proxy로 이용해서 접속이 가능한데

      현재 포스팅 한것은 회사 밖에서 안으로 원격접속이고
      socks5 proxy이용하는 것은 다음에 포스팅하겠습니다

  • 음.. 2014.02.24 12:44

    안녕하세요 좋은 자료 잘 보았습니다.
    만약 사내에서 공유기 및 방화벽을 사용하여 Private IP를 사용하고 있는 상황이라 외부에서 접속이 안되는데 어떻게 하는게 좋을까요? 물론 공유기나 방화벽에 설정을 변경할 권한은 없고요.. ^^;
    외부에 공인 IP를 받아서 DDNS로 항상 켜져 있는 서버는 있습니다만 역방향(?) SSH 터널링이 가능할까요?

    • Favicon of https://neoray.org BlogIcon NEORAY 2014.02.24 22:32 신고

      그러니까 호스트 A(외부 서버)와 B(회사 내부PC), C(집컴퓨터) 중에
      A는 공인IP, B는 사설IP인 상황에서 C에서 A를 통해 B의 어떠한 서비스(ex: VNC, 포트5900)로의 접속이군요.

      (혹시나 더 좋은 방법이 있을지도 모르지만 제 지식의 한계로는)
      말씀하신대로 리버스 SSH 터널링을 사용하면 되겠는데요
      다만 여기에는 조건이 있습니다

      1. B에서 A로는 SSH 접속이 가능해야 합니다.
      즉 회사 방화벽에서 ssh 프로토콜 자체를 막아놓았다면 그냥 불가입니다.
      2. 터널링을 막아놓지 않아야 합니다.
      간혹 터널링 자체를 막아놓은 경우도 있는데 이럴 경우도 그냥 불가입니다.

      A에 SSH서버가 돌아가고 있을때

      B의 컴퓨터의 PuTTY에서 Tunnels에 들어가신 다음
      Source Port에 A에서 B로 접속할포트(ex: 65500)를 입력하시고
      Destination에 localhost:5900을 입력하시고
      Remote를 선택한 후 A에 SSH 접속을 합니다

      만약 회사컴이 리눅스 일시
      ssh -R 소스포트(A):localhost:도착지포트(B) (A)의 계정@(A)DDNS or IP -p (A)의 ssh 포트
      EX) ssh -R 65500:localhost:5900 AAA@A.ddns.com -p 22를 입력하시면 되겠습니다.

      이때 A에서 VNC로 65500으로 연결하시면 Reverse Tunnel을 통해 B의 5900으로 접속됩니다(리버스 터널 완성)

      그러니까 이제 A에서 65500포트로 전송되는 것은 전부 리버스 터널을 통해 B의 5900으로 들어가는 겁니다.

      그러면 C에서 A로 RDP나 VNC접속을 하신 후 다시 B로 VNC 연결을 하는 방법도 있겠으나 서버라고 하셨죠?
      서버 만지시는 분들은 대부분 잘 돌아가고 있는 서버 직접 건드리기 꺼리시더군요
      또 리눅스 서버라면 x11환경을 설치하지 않았을 수 도 있구요
      그렇다면 이제 본문과 같습니다
      C에서 원하시는 포트를 A의 65500으로 포워드 하기위해 터널을 뚫어주시면
      C의 지정포트에서 보내는 통신은 A를 통해 B로 가게 됩니다.

      C:지정 포트 -> A:65500 -> B:5900
      포워드 포워드

      제가 질문을 이해를 제대로 했고 도움이 되셨다면 좋겠네요.

  • 익명 2017.09.01 19:36

    비밀댓글입니다

  • 조언좀부탁드립니다.. 2017.09.01 19:37

    안녕하세요 터널링이 잘 되다가 제가 컴퓨터에러가뜬적이 있어 포맷을 하고난후부터 터널링이 안되는데
    혹시 왜그런지 아시나요 ㅠㅠ?

  • 조언좀부탁드립니다.. 2017.09.01 19:38

    안녕하세요 터널링이 잘 되다가 제가 컴퓨터에러가뜬적이 있어 포맷을 하고난후부터 터널링이 안되는데
    혹시 왜그런지 아시나요 ㅠㅠ?
    Hoon2427 로 조언좀 부탁드립니다.