강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

stunnel을 이용한 암호화

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

stunnel을 이용한 암호화

 

우리는 인터넷의 근간인 TCP/IP가 그 자체적으로 얼마나 취약한지 잘 알고 있다.

 

특히 평문(plain text)으로 전송되는 데이터 때문에 큰 골칫거리인데, 이에 대한 개선을 위해 다양한 고민이 있었지만 현재의 상태에서 가장 근본적인 대책은 암호화 전송 프로토콜을 사용하는 것이다.

이를 위해 telnet 대신 sshhttp 대신 https를 사용한다고 알고 있다.

 

그렇다면 ftp, smtp, pop3등 다른 서비스들은 어떻게 할 것인가? 만약 telnet만 사용한다면 단순히 ssh를 사용하기만 하면 되겠지만 한 서버에서 하나의 공통된 계정으로 telnetftp, pop3등을 함께 사용한다면 어느 하나의 서비스만 암호화하는 것은 그리 큰 의미가 없을 것이다.

 

결국 TCP/IP 자체가 평문(plain text)으로 전송되어 취약한 것이므로 암호화 전송 프로토콜을 사용하려면 아이디/암호가 유출될 수 있는 모든 서비스에 대해 암호화 전송 프로토콜을 사용해야 한다는 결론이 나온다. 따라서 이를 구현하기 위해 이번 장에서는 TCP/IP 기반의 서비스에 stunnel이라는 보안 모듈을 활용하여 암호화 전송 프로토콜을 사용하는 방법에 대해 알아보겠다.

 

이와 함께 TCP/UDP/ICMP등에 관계없이 모든 서비스 및 트래픽을 암호화하는 VPN에 대해서는 9장을 참고하기 바란다.

 

 

3.3.1 stunnel 개요

 

stunnelpop3telnet, ftp, imap, smtp등의 tcp 서비스를 보안모듈로 감싸 SSL이 지원되지 않는 TCP 데이터 전송을 SSL 암호화하는 간단한 서비스로서 기존의 개별 서비스들을 다시 설치할 필요 없이 standalone 형태로 또는 xinetd(또는 inetd)tcpserver와 함께 사용할 수 있다.

 

stunnel을 설치하여 이용하려면 openssl이나 ssleay를 미리 설치하여야 하는데, 여기에서는 openssl을 이용하여 메일 서버에서 사용하는 pop3smtp를 암호화하는 방법을 알아보도록 하자. 참고로 smtp를 암호화하는 이유는 앞에서 살펴본 대로 smtp 인증시 아이디/암호로 인증하는 경우도 있고 전송되는 데이터 자체를 암호화할 필요도 있기 때문이다.

 

3.3.2 stunnel 설치 및 설정

 

먼저 http://www.openssl.org/에 접속하여 최신의 openssl을 다운로드하여 설치할 서버에 업로드한다.

 

 

17d9b3477d426b8f01278c41ed5a2cb7_1662604450_8832.png
 

[그림] openssl 홈페이지

 

 

만약 설치가 잘 안되면 http://rpmfind.net/에서 적당한 rpm을 다운로드하여 설치해도 된다.

 

하위 버전의 openssl에서는 보안버그가 있으므로 가급적 최신의 openssl을 받도록 한다.

 

다운로드 후 압축 해제하여 압축이 풀린 디렉토리에서 아래와 같이 실행 및 컴파일 하여 설치를 한다.

 

 

 

[root@server openssl-0.9.x]# ./config ; make; make test; make install

 

17d9b3477d426b8f01278c41ed5a2cb7_1662604467_7763.png
 

[그림] stunnel 홈페이지

 

이번에는 stunnel을 설치할 차례이다.

 

stunnel은 홈페이지인 http://www.stunnel.org/에서 다운로드 하면 되며 또는 http://rpmfind.net/에서 stunnel로 검색하여 rpm을 다운로드 해도 된다.

 

소스 파일을 다운로드 후 압축해제 하여 아래와 같이 컴파일하기만 하면 설치가 완료된다.

 

[root@www stunnel-4.xx]# ./configure ;make; make install

 

설치과정에서 아래와 같이 인증서를 생성할 때 입력하여야 할 부분이 있으니 주의하기 바란다.

 

 

 

writing new private key to 'stunnel.pem'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [PL]:KR

State or Province Name (full name) [Some-State]:

Locality Name (eg, city) []:Seoul

Organization Name (eg, company) [Stunnel Developers Ltd]:Today and Tomorrow

Organizational Unit Name (eg, section) []:Network Security

Common Name (FQDN of your server) [localhost]:mail.server.com

/usr/bin/openssl x509 -subject -dates -fingerprint -noout \

-in stunnel.pem

subject= /C=KR/ST=Some-State/L=Seoul/O=Today and Tomorrow/OU=Network Security /CN=mail.server.com

notBefore=Jan 19 05:26:21 2007 GMT

notAfter=Jan 18 05:26:21 2008 GMT

MD5 Fingerprint=C0:E1:A8:04:F4:A7:7C:25:78:12:9F:68:74:2A:CF:4E

 

위에서 굵게 표시된 부분은 각자의 상황에 맞게 적절히 입력하여야 하는 내용이다.

 

각각에 대해 잠깐 알아보도록 하자.

 

Country Name (2 letter code) [AU]:KR

--> 국가 이름을 코드로 입력한다.

 

한국은 KR이라 입력한다.

 

 

 

State or Province Name (full name) [Some-State]:

--> 주는 존재하지 않으므로 적당히 입력하거나 그냥 엔터를 입력한다.

 

 

 

Locality Name (eg, city) []:Seoul

--> 도시 이름을 입력한다.

 

 

 

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Today and Tomorrow

--> 자신이 속한 회사나 조직, 기관의 이름을 입력한다.

 

 

 

Organizational Unit Name (eg, section) []:Network Security

--> 부서 이름을 적절히 입력한다.

 

 

 

Common Name (eg, your name or your server's hostname) []:mail.server.com

--> 인증서가 설치되는 서버의 정확한 호스트 이름을 입력한다.

 

이를테면 메일서버라면 메일 서버의 주소를 입력한다.

 

만약 pop3, smtp에 대해 암호화 프로토콜을 사용하려면 이 주소는 아웃룩 익스프레스 등의 메일 프로그램에서 보내는 메일서버 또는 받는 메일서버로 입력할 주소이다.

Kildong, Hong등과 같이 자신의 이름을 입력하지 않도록 주의하기 바란다.

 

 

 

위와 같이 컴파일을 완료하면 /usr/local/sbin/stunnel에 실행파일이 설치되고,

/usr/local/etc/stunnel 디렉토리에 기타 설정 파일이 설치되는데, 인증서 파일은 stunnel.pem이고, 설정파일은 stunnel.conf-sample이다.

이제 인증서 생성이 끝났으므로 독립실행형(standalone)으로 실행하거나 inetdxinetd에 설정 할 차례이다.

먼저 /etc/services 파일을 열어

pop3s 995/tcp

ssmtp 465/tcp

 

와 같이 설정되어 있는지 확인하고 없으면 위와 같이 추가한다.

 

 

# stunnel.conf 설정

/usr/local/etc/stunnel/stunnel.conf-sample 파일을 참고로 아래와 같이 설정하기 바란다.

 

 

 

cert = /usr/local/etc/stunnel/stunnel.pem

 

[pop3s]

accept = 995

connect = 110

 

[ssmtp]

accept = 465

connect = 25

 

* standalone으로 설정하는 방법

 

standalone으로 설정하려면 다음과 같이 stunnel을 직접 실행하면 된다.

 

 

[root@server root]# /usr/local/sbin/stunnel /usr/local/etc/stunnel/stunnel.conf

 

여기에서 /usr/local/sbin/stunnel은 실행파일이고, /usr/local/etc/stunnel/stunnel.conf은 설정파일이다.

그리고, 아래는 netstat -lnp로 확인하였을 때 보이는 정보로서 새롭게 465/tcp995/tcp가 리슨하고 있는 것을 알 수 있다.

 

tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 14254/stunnel

tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 14254/stunnel

 

 

* xinetd로 설정하는 방법

 

xinetd의 경우 xinetd.conf 설정파일에 아래와 같이 추가하면 된다.

 

 

 

service pop3s

{

disable = no

flags = REUSE

socket_type = stream

wait = no

user = root

server = /usr/local/sbin/stunnel

server_args = /usr/local/etc/stunnel/stunnel.conf

log_on_failure += USERID

}

 

 

service ssmtp

{

disable = no

flags = REUSE

socket_type = stream

wait = no

user = root

server = /usr/local/sbin/stunnel

server_args = /usr/local/etc/stunnel/stunnel.conf

log_on_failure += USERID

}

 

위와 같이 설정을 완료한 후 xinetd 데몬을 재시작하면 변경한 내용이 적용될 것이다.

 

netstat -lnp로 실행했을 때 다음과 같이 pop3sssmtp가 추가된 것을 확인하면 된다.

 

 

tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 11722/xinetd

tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 11722/xinetd

 

이제 서버에서의 설정은 끝났으므로 메일 클라이언트 프로그램에서 설정할 차례이다.

 

메일 프로그램에서 받는 메일서버(pop3), 보내는 메일서버(smtp)는 앞에서 인증서를 생성할 때 입력한 서버 이름으로 하고, 고급 탭에서는 보내는 메일서버와 받는 메일서버에 아래 그림과 같이 보안연결(SSL)필요를 선택하면 465995번 포트로 변경되어 설정되는 것을 확인할 수 있다.

 

만약 다른 포트로 지정되면 임의로 포트번호를 지정하면 된다.

 

 

 

17d9b3477d426b8f01278c41ed5a2cb7_1662604498_2681.png
 

[그림] 아웃룩 익스프레스 설정

 

이제 드디어 모든 설정이 끝났다. 메일 송수신이 되는지 테스트해 보기 바란다.

 

그런데, 메일 프로그램에서 보내고 받기를 클릭하면 정상적으로 작동하지만 아래와 같이 아웃룩 익스프레스 등 메일 프로그램을 처음 시작할 때마다 경고 메시지가 뜨게 되어 다소 불편하게 느껴질 것이다.

 

 

17d9b3477d426b8f01278c41ed5a2cb7_1662604516_7883.png
 

[그림] 공인된 인증서가 아닌 경우 경고 화면

 

이는 앞에서 생성한 인증서가 공인된 인증서가 아니라 자기 자신이 직접 사인한 인증서를 발급하였기 때문이며, 이러한 경우에는 다음과 같이 각각의 pc에서 추가적인 작업을 해주면 이 메시지가 나타나지 않게 된다.

 

물론, 공인 인증서를 구입하여 발급받는다면 이 에러 메시지는 나타나지 않을 것이다.

 

먼저 인증서 파일인 /usr/local/etc/stunnel/stunnel.pem 파일을 열면

“-----BEGIN RSA PRIVATE KEY-----”로 시작해서 “-----END RSA PRIVATE KEY-----”로 끝나는 부분과 “-----BEGIN CERTIFICATE-----”로 시작해서 “-----END CERTIFICATE-----”로 끝나는 부분이 있는데, 이 중에서 “-----BEGIN

CERTIFICATE ...... END CERTIFICATE-----”부분만 복사해서 Windows등의 클라이언트 PCserver.crt라는 파일로 복사를 하여 저장한다.

 

17d9b3477d426b8f01278c41ed5a2cb7_1662604548_2677.png
 

[그림] server.crt 생성

 

그리고 이 파일에서 오른쪽 마우스를 클릭하면 인증서 설치라는 메뉴가 보이는데, 여기에서 인증서 설치를 실행한다.

 

이후 나오는 화면에서 모두 다음’-->‘다음을 선택 후 마침을 선택하면 PC에서의 인증서 설치가 완료된다.

 

이와 같이 자신의 PC에 인증서를 직접 설치한 다음부터는 자체적으로 사인한 인증서를 사용하더라도 경고 화면이 나오지 않는 것을 확인할 수 있을 것이다.

 

 

17d9b3477d426b8f01278c41ed5a2cb7_1662604565_2639.png
 

[그림] 인증서 설치 시작 화면

 

 

17d9b3477d426b8f01278c41ed5a2cb7_1662604577_1192.png
 

[그림] 인증서 설치를 완료하는 화면

 

 

3.3.3 stunnel 확장

 

앞에서는 stunnel을 이용해 pop3smtp 서비스를 암호화하는 방법에 대해 살펴보았다. 하지만 pop3smtp로는 좀 부족하지 않은가? 다른 서비스로 확장할 수는 없을까? 물론 같은 방식으로 다른 서비스도 암호화가 지원하도록 확장할 수 있는데, 몇 가지 예제를 살펴보도록 하자. 참고로 stunnel은 오직 tcp만 지원되며 udp 서비스는 이용할 수 없다.

 

 

 

* rsync 암호화 방법

 

rsync(http://rsync.samba.org/)는 원격지의 데이터를 동기화하기 위해 사용되는 툴로서 특별한 인증 절차는 제공되지 않고 오직 ip로만 인증기능을 제공하고 있다.

 

따라서 클러스터링이나 로드발랜싱등에서 데이터를 동일하게 유지할 필요가 있을 때 사용되는데, stunnel을 이용하면 rsync를 통해 전송되는 데이터를 암호화할 수 있다.

 

 

-.rsync 서버 설정

stunnel -d 2222 -l /usr/bin/rsync -- rsync --daemon

-. rsync 클라이언트 설정

stunnel -c -d localhost:837 -r 192.168.1.20:2222

 

위와 같이 설정한 후 클라이언트에서 rsync rsync://localhost/를 실행하면 클라이언트의 요청이 192.168.1.202222번 포트로 포워딩 되므로 192.168.1.20rsync 데몬으로 접속하여 데이터를 동기화하게 된다.

 

 

이외에도 같은 방식으로 다른 서비스도 암호화할 수 있는데, 더 많은 예제는 stunnel 홈페이지인 http://www.stunnel.org/를 참고하기 바란다



관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  80 명