기본 콘텐츠로 건너뛰기

추천 가젯

OpenSSL 명령어로 비대칭 암호화하기 (공개키로 암호화하고 비밀키로 복호화하기)

비대칭 암호화 암호화 키와 복호화 키가 서로 다른 비대칭 암호의 특징을 이용하여 공개키로 암호화하고 비밀키로 복호화할 수 있다. 우선 이전에 생성한 private.pem 과 public.pem 이 필요하다. 비밀키는 계속 가지고 있고, 통신을 하고자 하는 사람에게 공개키를 전달한다. 그 다음 공개키를 가진 사람이 공개키로 암호화하고, 암호화한 결과를 전달한다. 이 과정은 도청되어도 비밀키를 알아낼 수 없기에 원문을 도청자가 알아낼 수 없다. 원문 준비하기 원본은 다음과 같이 준비한다. 주로 대칭 암호화를 사용할 키를 전달할 때 공개키 암호를 보조하여 사용하므로, 여기서는 키파일을 생성하겠다. echo -n "key=" > key.txt openssl rand -hex 32 >> key.txt echo -n "iv=" >> key.txt openssl rand -hex 16 >> key.txt 그러면 key와 iv가 포함된 파일이 완성된다. 이 파일을 안전하게 전달하기 위해 암호화한다. 공개키로 암호화하기 openssl pkeyutl -encrypt -pubin -inkey [public.pem] -in [key.txt] -out encrypted.bin openssl pkeyutl : openssl에서 제공하는 low-level 공개키/개인키 연산 유틸리티인 pkeyutl 을 이용한다. -encyprt : 암호화를 한다. -pubin : 입력받을 키의 종류를 공개키로 지정한다. -inkey [입력키] : 입력받을 키를 지정한다. 암호화를 할 때는 공개키를 지정한다. 필자는 'public.pem'으로 지정하였다. -in [입력파일] : 입력파일을 지정한다. 암호화를 할 때는 원문을 지정한다. 필자는 위에서 생성한 'key.txt'로 지정하였다. -out [출력파일] : 출력파일을 지정한다. 출력된 결과는 암호문이므로 저장될 이름을 지정한다. 필자는 'e...

SSH 터널링으로 원격지와 안전하게 연결하기

SSH 터널링

SSH 터널링이란?

SSH 터널링이란 SSH의 보안 연결 기능을 이용하여 네트워크 통신을 암호화된 채널로 전달하여 통신하는 기법이다. 이를 통하여 일반적으로는 접근할 수 없는 원격 서버나 내부망 내 서비스에 안전하게 접근할 수 있다.

언제 사용하나?

폐쇄망에 있는 서비스에 접속할 때 사용한다. 특히 데이터베이스 등 인가되지 않은 외부인이 접속하는 것을 차단하되 접근이 허락된 사용자가 접근하는 것을 허용하는 경우에 사용한다.

가상사설망과의 차이는?

가상사설망(VPN)은 일반적으로 기기 전체의 모든 인터넷 트래픽을 암호화하고 가상 네트워크에 연결하는 기술이다.

그러나 SSH 터널링은 가상사설망과 달리 특정 포트 주소로의 트래픽만 우회 및 암호화하는 기술이다. 전체 트래픽이 암호화되지 않기에 속도가 빠를 수 있다.

SSH 터널링 종류

SSH 터널링에는 세 종류가 있다.

  • 로컬 포트 포워딩(Local Port Forwarding)

  • 원격 포트 포워딩(Remote Port Forwarding)

  • 동적 포트 포워딩(Dynamic Port Forwarding)

로컬 포트 포워딩(Local Port Forwarding)

가장 자주 사용하는 기법이다. 로컬에서 지정한 포트를 통해 원격 서버의 특정 포트에 접속할 수 있다.

ssh -L [로컬포트]:[원격서버IP]:[원격서버포트] [사용자명@SSH서버주소] -p [SSH서버포트]

예시

ssh -L 8080:192.168.0.3:80 user@example.com -p 22
  1. 192.168.0.3은 사설 네트워크이다. 그러므로 외부에서는 접속할 수 없다. 다만 example.com은 외부에서 접속 가능한 서버이다.

  2. example.com에서는 192.168.0.3으로 접속 가능하다.

  3. 그래서 우선 example.com에 SSH 접속을 한 다음, 192.168.0.3:80으로 연결하는 통로를 연다.

  4. 해당 연결된 통로를 로컬포트(8080)에 바인딩시킨다.

  5. 로컬포트(8080)로 연결하게 되면 example.com을 거쳐 192.168.0.3:80으로 연결한다.

언제 사용하나?

  • 방화벽이나 네트워크 분리로 연결이 막힌 서버에 로컬 환경에서 접속하고 싶을 때

  • 보안상 외부 노출이 허용되지 않는 경우 테스트를 할 때

원격 포트 포워딩(Remote Port Forwarding)

로컬 포트 포워딩이 다른 컴퓨터의 서비스(포트)를 마치 내 컴퓨터에 연결하는 것처럼 이용하는 것이라라면, 반대로 원격 포트 포워딩은 내 컴퓨터의 서비스(포트)로 원격에서 접속이 가능하게 하는 것이다.

ssh -R [원격서버포트]:[로컬IP]:[로컬포트] [사용자명@SSH서버주소] -p [SSH서버포트]

예시

ssh -R 20801:localhost:80 user@example.com -p 22

example.com의 20801 포트로 들어오는 연결을 로컬의 80포트로 터널링한다는 뜻이다.

주의: 외부망의 다른 사용자가 접속하게 하려면 SSH 서버의 sshd_config 설정에서 GatewayPorts yes 옵션이 활성화되어 있어야 한다.

언제 사용하나?

  • 로컬 개발 환경을 외부에서 접속 가능하게 하려 할 때

  • 외부에서 접근이 제한된 네트워크의 컴퓨터를 관리할 때

동적 포트 포워딩(Dynamic Port Forwarding)

로컬에 SOCKS 프록시를 열어 로컬의 트래픽을 SSH를 통해 암호화하여 라우팅하는 기술이다.

ssh -D [로컬SOCKS포트] [사용자명@SSH서버주소] -p [SSH서버포트]

예시

ssh -D 1080 user@example.com -p 22

이후에 proxy 프로그램이나 브라우저 내부에 있는 프록시 기능을 통해 SOCKS 프록시를 localhost:1080으로 설정하면 모든 트래팩이 SSH 연결을 통해 안전하게 암호화된다.


언제 사용하나?

  • 안전하지 않은 네트워크(여러 사람들이 이용하는 Wi-Fi 네트워크 등)을 사용할 때

  • 인터넷 검열을 시행하는 국가(예: 중국, 이란, 베트남, 대한민국 등)에서 제한된 서비스에 접속할 때. 단, SSH 원격 서버는 검열되는 국가 밖에 있어야 한다.

위 명령어를 사용하면 두 가지 문제가 있다.

  1. SSH 쉘이 열린다

  2. 백그라운드에서 작동하지 않고 포그라운드에서 작동된다.

첫 번째의 경우 -N 옵션을 주어 해결할 수 있고, 두 번째의 경우 -f 옵션을 주어 해결할 수 있다.

ssh -L 8080:192.168.0.3:80 user@example.com -p 2240 -N -f

단점

  1. 반드시 원격 서버에 SSH가 설치되어 있어야 하고 접근이 가능하여야 한다.

  2. 인터넷 검열을 엄격하게 시행하는 국가에서는 사용자가 SSH를 통해 일반적인 서버 조작을 하는 것이 아닌 특별한 터널링을 하고 있다는 사실을 인지하여 차단할 수 있다.

댓글

가장 많이 본 글