BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Sslwrap > Sslwrap-3  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.



Secure TCP With SSLWRAP




SSLWRAP 을 구동하는 방법은 3 가지가 있다. inetd 를 이용하여 구동하는 방법 2 가지
(-port option 을 사용하여 포트를 포워딩하는 방법과 -exec 를 이용하여 데몬을 직접
호출하는 방법이 있다) 과 standalone(독립 실행형) 방식으로 구동을 할수 있다. 이 3
가지 방법중에서 -exec 를 이용하여 연결할 daemon 을 직접 호출하는 방식과 독립실행
형 모드로 실행 하는 방법은 root 의 권한이나 SUID root 의 권한으로 실행을 해야 하
는데 개발자는 fork를 정상적으로 처리를 하지 못하며 보안상의 문제를이 야기될수 있
다고 경고 하고 있다. 그러므로 inetd 를 이용하여 -port option 을 이용하여 실행 하
는 방법 만 다루고자 한다.

또한 SSLWRAP 을 이용하여 암호화 할수 있는 서비스에는 pop3, imap, telnet등이 있으
나 pop3, imap 의 경우에는 imap-2000 에서 암호화 기능을 지원하고 있으며, telnet의
경우에는 ssh 로 대체가 가능하다. 또한 굳이  SSLWRAP + telnet  을 이용할 경우에는
telnet client 가 암호화 기능을 제공해야 하므로, ssh 를 사용하는 것을 권장한다.

여기서는 inetd을 이용하여 sslwrap 을 띄우고 sslwrap 과 sendmail 을 연결하는 것을
다루도록 하겠다. 이 방식을 응용하면 다른 tcp service 들도 연결이 가능하다. 단 데
몬을 sslwrap 과 연동 시켰을 경우 해당 데몬에 접속을 하는 client 가 암호화 기능을
제공해야 한다는 것을 명심 하도록 하자.

일단 /etc/services 에 ssmtp 에 대한 부분의 설정이 되어 있는지를 확인하며, 있으면
/etc/inetd.conf의 제일 마지막 라인에 아래의 그림에서 붉은 글씨체로 되어진 부분을
추가 하도록 하고 없으면 /etc/services 에 ssmtp 설정을 한 다음 아래의 inetd 의 설
정을 하도록 한다.

Hanterm - cat /etc/inetd.conf

 [root@bbuwoo /etc]$ cat /etc/services | grep 465

  ssmtp           465/tcp                         # SMTP over SSL

  위의 결과가 나온다면 그냥 inetd.conf 에 아래의 설정만 해 주면 되며, 만약 이 결
  과가 나오지 않는다면 이 결과를 /etc/services 에 넣어 주도록 한다. 가끔 제일 처
  음의 ssmtp 가 smtps로 되어 있는 경우도 있는데 이 경우에는 아래의 inetd.conf 에
  서 ssmtp 를 smtps 로 두 파일이 같이 되게해 주면 된다.
 
 [root@bbuwoo /etc]$ cat /etc/inetd.conf
    ... 생략 ...
  # secure smtp setting
  ssmtp  stream  tcp   nowait  nobody  /usr/sbin/tcpd  /usr/sbin/sslwrap \
                         -cert /usr/include/sslwrap/sslwrap.pem -port 25

  \ 표시는 한줄로 쓰라는 것을 의미한다. -port 는 smtp 의 기본 포트인 25를 지정하
  며 sendmail 의 smtp auth 기능을 사용하는 경우에는 587 을 지정해 줘도 된다.
  
  xinetd 를 사용할 경우에는 /etc/xinetd.d/ssmtp 라는 파일을 생성하고 다음의 내용
  을 추가하도록 한다.

  service ssmtp
  {
  	disable		= no
	flags		= REUSE
	socket_type	= stream
	wait		= no
	user		= nobody
	server		= /usr/sbin/sslwrap
	server_args	= -cert /usr/include/sslwrap/sslwrap.pem -quiet -port 25
	log_on_failure	+= USERID
  }

  RH 7.1 을 사용할 경우에는 RH 7.1 에서는 /etc/services 에 465번이 smtps 로 정의
  되어 있으므로 service ssmtp 를 service smtps 라고 지정 하고 /etc/services file
  은 수정을 할 필요가 없다.
  
  만약 qmail 을 사용 하고 있으며 tcpserver 를 이용하여 qmail 을 띄우는 경우 에는
  inetd 에서 설정하지 않고 qmail 의 init file 이나 startup script file 에 다음의
  내용을 이용하여 띄우도록 한다.

  tcpserver 0 ssmtp /usr/bin/sslwrap \
              -cert /usr/include/sslwrap/sslwrap.pem -quite -port 25
  tcpserver 0 spop3 /usr/bin/sslwrap \
              -cert /usr/include/sslwrap/sslwrap.pem -quite -port 110

  qmail 의 경우에는 pop3 역시 지원 하므로 110번까지 지정을 한 것이다. 물론 이 경
  우에는 /etc/services 에 spop3 가 mapping 이 되어져 있어야 한다.  위의 설정에서
  역시 \ 표시는 한줄로 적으라는 의미이다.
  

 [root@bbuwoo /etc]$ killall -HUP inetd

  inetd.conf 에 설정을 추가후에 inetd 를 reflash 해 준다
 
 [root@bbuwoo /etc]$ netstat -anp | grep :465

  tcp   0   0 0.0.0.0:465    0.0.0.0:*     LISTEN    32601/inetd

  netstat 를 이용하여 ssmtp 의 port 인 465 번 포트를 inetd 가 귀를 기울이고 있는
  지 확인을 해 본다. 위의 결과가 나오면 잘 되어진 것이다.

 [root@bbuwoo /etc]$

위의 그림대로 한다면 그리 어렵지는 않을 것이다. 그럼 다음장으로 넘어가기 전에 간
단하게 sslwrap 의 옵션들을 알아 보겠다.

-addr VALUE

다른 호스트로 전송을 하는 데이터를 암호화 하기 위한 옵션이다. VALUE 는 IP addres
로 지정을 하며 localhost 즉 127.0.0.1 은 지정을 할수가 없다. 이 옵션을 사용 하여
다른 호스트로의 데이타 전송 암호화에 대한 것은  sslwrap howto 를 번역한 국승수님
의 자료 Connecting To Another Machine 를 참조 하도록 한다.

-port VALUE

SSLWRAP port 465번을 통하여 들어온 패킷을 localhost 의 지정된 포트로 연결을 해주
도록 한다. 이것은 실제 서비스를 하기위한 포트로 sendmail 떠있지 않을 경우에는 클
라이언트 측에서 연결 실패 에러가 발생한다. 즉 sendmail 과 sslwrap 은 별도로 운영
이 된다는 얘기이다. SSLWRAP 을 이용하지 않고 직접 sendmail 의 25번 포트로 연결을
하여 사용을 할수 있다는 의미가 된다.

-verify VALUE

각기 인증서 확인을 한다.

-Verify VALUE

각기 인증서 확인을 하며, 꼭 인증서를 가지고 있어야 한다.

-cert VALUE

Self-sing 이 된 인증서나 CA 에서 획득한 인증서의 private key를 지정한다. 아까 앞
에서 만들었던 sslwrap.pem 을 기억하면 되겠다. 단 주의 할것은 이것은 sslwrap의 제
한점 이기도 한데 private key 가 암호화가 되어 있으면 안된다. openssl 이나 ssleay
에 대한 지식이 있는 분들은 암호화를해서 만들 요소가 있기 때문에 여기서 다시 강조
를 한다.

-key VALUE

pem file 이 지정되어 있지 않을 경우 cert 파일로 RSA file 을 이용할수 있다.

-nocert

인증서를 사용하고 싶지 않을 경우 이 옵션을 사용한다. 인증서가 없어도 암호화 연결
을 할수는 있지만 이럴 경우 spoofing 을 이용하여 password 를 capture 를 할수가 있
다. 또한 이 옵션은 서버/클라이언트 에서 동작 하지 않을수 있다.

-quiet

아무런 결과물을 출력하지 않는다. 독립 실행형으로 실행할때 사용하면 유용하다.


이 외에도 여러가지 옵션들이 있으나 이정도만 알면 운영을 하는데 충분할것 같다. 이
외의 옵션들은 sslwrap --help 명령으로 확인할수 있다.



>> 이전 : Certificate 생성
>> 다음 : SSLWRAP TEST



    



 Home > Lecture > Sslwrap > Sslwrap-3

Copyright 1997-2024 JoungKyun Kim 
LAST MODIFIED: 2017/01/18