'SMTP'에 해당되는 글 4건

  1. 2009.07.27 메일서버(Qmail Server) 구축
  2. 2009.07.06 James / Thunderbird 이용한 메일 환경 구축
  3. 2009.04.17 솔라리스에서 메일서버 구축하기 (1)
2009.07.27 18:08

메일서버(Qmail Server) 구축

기본 내용은 http://coffeenix.net/board_view.php?bd_code=123 의 내용을 바탕으로 설치하였다.

여기에 기록하는 내용 또한 거의 똑같으며, 완전 쌩초보자 겪은 내용을 조금 더 추가하였다.
위 사이트의 내용을 다시 반복하여 작성하는 이유는 자료를 유지하기 위함이다.

1. qmail 이란?
  일반적으로 Unix/Linux 기반의 MTA는 Sendmail을 많이 사용하고 있습니다.
  그러나 Sendmail은 프로그램이 단일화 되어 보안에 상당히 취약하며
  사용함에 있어서도 불편한 점이 많고 또 많은 전문지식을 필요로 합니다.
  하지만, qmail은 모듈방식을 채택하여 사용하기 편리하며 그 기능 또한 매우 다양합니다. 

2. qmail 의 제작자와 제작 의도
  qmail은 D.J.Bernstein 교수가 제작하였으며 큐메일은 보안에 매우 강력합니다.
  또한 하루에 수십, 수백 만통의 메일을 배달해야만 하는 대형 서버들의 qmail 사용과 
  제작자의 보안에 대한 보장은 그 신뢰도를 더해 주고 있습니다.

3. qmail 의 특징과 장점

 - 안정성
  qmail을 통해 시스템에 침입할 수 없습니다.
  실제 qmail은 발표된 이후로 아직까지 알려진 보안 사고가 없으며 Bernstein 교수가 qmail을
  만들게 된 동기 역시 정기적으로 알려지곤 하는 Sendmail이나 다른 MTA의 보안홀 때문이라고 합니다.

 - 신뢰성
  qmail은 메세지를 절대 잃어버리는 일이 없습니다.
  qmail은 NFS 파일 시스템상에서도 안전한 Maildir 형태 메일함의 선구자입니다.
  Maildir 형태는 qmail에서 처음으로 사용하기 시작한 메일함 형식으로 배달이 이루어지고 있는
  동안에 시스템이 다운되더라도 파일 시스템에 문제가 생기지 않는 유일한 메일함이며 NFS 파일
  시스템상에서 동시에 여러개의 메일이 배달되고 있는 동안에도 사용자가 메일을 읽을 수 있는 안전한
  메일함입니다.

 - 속도
  qmail은 메세지를 Sendmail 보다 빠르게 처리하면서 안정성을 잃지 않습니다.
  특히 수 많은 메일을 동시에 배달해야 하는 메일링 리스트의 경우 가장 빠른 성능을 보이게 됩니다.
  한 예를 들면 1000개 이상의 각기 다른 호스트에 메일을 배달하는데 76초 밖에 걸리지 않습니다. 

 - 간단함
  qmail은 다른 어떠한 MTA 보다도 작습니다.
  포워딩, 알리아싱, 메일링 리스트 메카니즘을 독립적으로 가지고 있는 다른 MTA들과는 다르게
  qmail은 한가지의 간단한 포워딩 메카니즘을 사용해 모든 기능을 구현하였습니다.
  다른 MTA가 "빠르고 불안전한 -> 느린 큐" 방식의 배달 방식을 사용하는 것과는 달리
  qmail은 새로운 아이템을 즉시 큐에 넣으므로 "빠른 큐"라는 하나의 배달 방식만을 사용합니다.

 - 능률
  qmail은 오래된 486 16M 시스템에서 하루에 70,000통 이상의 메일 처리하는데 무리가 없을 정도로
  그 성능과 능률이 뛰어납니다. 

 - 메일링 리스트
  qmail은 일반유저가 메일링 리스트를 제어할 수 있기 때문에 과리자의 업무가 줄어드는데 도움을 줍니다.

 - 가상 호스트 구축
  쉬운 가상 호스트 구축으로 qmail은 다중 도메인 지원의 선구자입니다. 

 - 직관적인 관리
  qmail은 최소한의 작업으로 관리가 손쉽습니다. 

 - 유연한 배달 프로그램
  qmail은 외부 메일 프로세서를 위한 강력한 인터페이스를 제공합니다. 

 - 다양한 OS 지원
  qmail은 동일한 소스로 포팅이 필요 없이 대부분의 Unix 시스템을 지원합니다.
  AIX, BSD/OS, FreeBSD, HP/UX, Irix, Linux NetBSD, OpenBSD, OSF/1, SunOS, Solaris, 기타.. 

4. qmail 의 모듈화 디자인
 qmail은 Bernstein 교수의 다른 소프트웨어들처럼 특정한 목적을 가지고 있는 작은 프로그램들의
 모음이라 할 수 있는데, 예를 들어 네트워크로 부터의 메일 수신은 qmail-smtpd, 외부로의 전송은
 qmail-remote, 메일큐의 관리는 qmail-queue 가 전담하는 식입니다. 

5. 다양한 Add-on과 patch
 qmail의 모듈화된 구조는 새로운 기능을 추가하기 위한 다양한 애드온들의 개발을 쉽게 함으로써
 이미 수많은 애드온들이 개발/제공되고 있으며, 관련 프로젝트도 많이 진행되고 있습니다.
 몇가지 예를 들어 보겠습니다. 

 - vpopmail
  vpopmail은 qmail하에서 가상 도메인/유저를 쉽게 관리하는 통합 관리 도구로 qmailadmin과 같이 
  사용함으로써 모든 관리를 웹으로 편리하게 할 수 있는 소프트웨어 입니다.

 - qmail-ldap
  LDAP와 qmail의 연동을 위한 패키지와 문서와 qmail이 어떻게 메세지를 처리하는지 이해하는데 큰
  도움이 되는 그림 (big qmail picture)을 제공합니다. 

 - qmail + mysql
  qmail은 mysql과 연동해서 사용할 수 있으므로 손쉬운 웹기반 인터페이스를 제작하는데 유용합니다. 

 - qmail-Scanner
  qmail용 메일 바이러스 검사기로 대부분의 유료 바이러스 검사기와 연동하여 사용할 수 있습니다. 

 - Maildrop
  procmail을 대체하는 로컬 MDA, 필터링 도구와 연동하여 강력한 필터링 서비스가 가능합니다. 

 - ezmlm
  qmail의 제작자가 만든 메일링 리스트 관리 도구로 설정과 관리가 매운 간단하고 쉽습니다. 

 - qmail-smtpd-auth
  유동 IP 사용자들의 SMTP 릴레이 지원을 위환 패치 

 이 외에도 필요에 따라 사용할 수 있는 수많은 애드온과 패치가 존재하며, 관련 정보와 뉴스들은
 http://qmail.org (영문)의 웹사이트와 qmail 메일링 리스트 등과
 한국 qmail 홈페이지(http://qmail.kldp.org (한글))에서 찾아 볼 수  있으며
 qmail 과 MySQL을 연동한 한글 웹메일 프로젝트도 진행중입니다.
 qmail 메일링 리스트의 주소는 qmailannounce-subscribe(at)list.cr.yp.to 입니다. 

6. qmail 설치
 qmail을 설치할 때 구성할 수 있는 경우의 수는 매우 다양합니다.
 어떤 인증 모듈을 사용하는지, IMAP 지원 여부, 스팸 필터링 기능 지원 여부, qmailAdmin 지원여부,
 Webmail 지원 여부 등등에 따라 수많은 경우가 있을 수 있습니다.


큐메일은 혼자서 작동하지 않기 때문에 다른 데몬과 연계해서 실행을 해야만 합니다.
큐메일의 실행은 xinetd와 tcpserver로 할 수 있으나 보안과 속도면에서 큐메일과 잘 맞는
tcpserver로 구축을 하도록 하겠습니다.

1. ucspi-tcp 설치 (최신버전 : http://cr.yp.to/ucspi-tcp/install.html)
 ucspi-tcp는 tcpserver와 tcpclient 전송제어 프로토콜(TCP client-server)을 구축하는데  좀더 편리하게
 사용할 수 있도록 제작된 command-line 툴 입니다.
 이 프로그램의 자세한 정보는 http://cr.yp.to/ucspi-tcp.html 이곳을 참조하시면 되겠습니다.

※ 이번편은 간단한 설치작업이지만 설치하기전에 반드시 체크해야될 사항이 있습니다.
 최근의 OS에서는 gcc 버전이 3(or 4)이상을 사용하기 때문에 소스를 그대로 설치하게 되면 중간에
 에러가 나게 됩니다. 따라서 헤더파일을 약간 수정해주어야 됩니다.
 이는 gcc 버전이 업데이트 되었기 때문이니 만약 gcc버전이 2이하라면 수정하지 않아도 됩니다.

[root@localhost]# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
[root@localhost]# tar xfz ucspi-tcp-0.88.tar.gz
[root@localhost]# cd ucspi-tcp-0.88  

gcc버전이 3.4.5 이므로 파일의 최상단에 #include <errno.h>를 추가해 줍니다.

[root@localhost]# vi error.h
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H
...
...
[root@localhost]# make
[root@localhost]# make setup check  

2. daemontools 설치 (최신버전 : http://cr.yp.to/daemontools/install.html)

[root@localhost]# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
[root@localhost]# mkdir /package
[root@localhost]# chmod 1755 /package
[root@localhost]# tar xfz daemontools-0.76.tar.gz -C /package
[root@localhost]# cd /package/admin/daemontools-0.76  

gcc버전이 3.4.5 이므로 파일의 최상단에 #include <errno.h>를 추가해 줍니다.

[root@localhost]# vi src/error.h
/* Public domain. */
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H
...
...
[root@localhost]# package/install  

※ 만약 daemontools를 설치하는데 아래와 같은 에러가 나는 경우가 있습니다.

./compile tai64nlocal.c
tai64nlocal.c: In function `main':
tai64nlocal.c:54: warning: assignment makes pointer from integer without a cast
tai64nlocal.c:55: dereferencing pointer to incomplete type
...  

이것은 tai64nlocal.c의 두번째 줄 #include <sys/time.h>에서 에러가 나는것 입니다.
따라서 이 부분을 #include <time.h>로 수정해주면 정상적으로 설치가 가능합니다.


큐메일은 AUTH 릴레이를 여러가지와 연동해서 사용을 할 수 있습니다.
 - 시스템계정 (/etc/passwd)
 - cmd5checkw (/etc/poppasswd)
 - checkpassword + mysql (유저 데이터를 db에 저장)
 - vchkpw (vpopmail pop 유저 데이터를 사용, db 또는 vpasswd)
위와 같이 여러가지를 이용해서 사용할 수가 있습니다.

필자는 AUTH 릴레이를 vchkpw에 맡기고, 큐메일은 사용만 가능하도록 설치를 할 것입니다.

1. 칵테일패치 (최신버전 : http://people.kldp.org/~eunjea/qmail/patch/)
 칵테일 패치는 qmail.kldp.org의 운영자인 임은재 님께서 제작하신 패치 입니다.
 큐메일을 사용하는데 있어 여러가지 편리한 패치가 종합적으로 되어 있기 때문에
 일일히 패치를 하나씩 찾아 해주는 번거로움을 줄이기 위해 필자는 칵테일 패치를 하겠습니다.

[root@localhost]# wget ftp://ftp.eu.uu.net/pub/unix/mail/qmail/qmail-1.03.tar.gz
[root@localhost]# wget http://people.kldp.org/~eunjea/qmail/patch/qmail-ej-cocktail-14.tar.gz
[root@localhost]# tar xfz qmail-1.03.tar.gz
[root@localhost]# tar xfz qmail-ej-cocktail-14.tar.gz
[root@localhost]# cd qmail-1.03
[root@localhost]# patch -p1 < ../qmail-ej-cocktail-14/cocktail.patch
patching file Makefile
patching file Makefile-cert.mk
patching file TARGETS
patching file base64.c
...
...  

※ 만약 패치도중 hunk나 fail이 나온다면 큐메일 바닐라 소스가 아닌 것입니다.
 반드시 큐메일 바닐라 소스를 이용하시기 바랍니다.

위의 큐메일 설치시 에러가 발생하여 아래와 같이 하였습니다.

netqamil-1.05 를 설치

[root@localhost]# tar xfz netqmail-1.05
[root@localhost]# cd netqmail-1.05
[root@localhost]# ./collate.sh

2. 큐메일설치 (최신버전 : ftp://ftp.eu.uu.net/pub/unix/mail/qmail/)
 이제 본격적인 큐메일 설치작업을 하도록 하겠습니다.

 - concurrency limit 파일 수정
  큐메일 설치작업을 하기전 수정할 소스가 있습니다.
  바로 위에서 패치했던 파일중 conf-spawn 파일 입니다.
  이 파일의 기본값은 1000 입니다만, 각 OS에 따라서 설정값이 다릅니다.
  필자는 레드헷을 이용하고 있기 때문에 1000을 509로 수정하도록 하겠습니다.

[root@localhost]# vi conf-spawn
509

This is a silent concurrency limit. You can't set it above 255. On some
systems you can't set it above 125. qmail will refuse to compile if the
limit is too high.  

 - 유저, 그룹 추가
  qmail 운영을 위한 유저와 그룹을 만들어주어야 됩니다.
  각 OS에 필요한 유저및 그룹은 INSTALL.ids 파일에 명시되어 있습니다.

※ 아래 -r 옵션은 시스템 계정(uid 500미만)으로 유저를 생성하겠다는 의미 입니다.

[root@localhost]# groupadd -r nofiles
[root@localhost]# useradd -r -g nofiles -d /var/qmail/alias alias
[root@localhost]# useradd -r -g nofiles -d /var/qmail qmaild
[root@localhost]# useradd -r -g nofiles -d /var/qmail qmaill
[root@localhost]# useradd -r -g nofiles -d /var/qmail qmailp
[root@localhost]# groupadd -r qmail
[root@localhost]# useradd -r -g qmail -d /var/qmail qmailq
[root@localhost]# useradd -r -g qmail -d /var/qmail qmailr
[root@localhost]# useradd -r -g qmail -d /var/qmail qmails  

 - 큐메일 설치
[root@localhost]# make
[root@localhost]# make setup check
[root@localhost]# ./config
Your hostname is mail.foobar.com.
Your host's fully qualified name in DNS is mail.foobar.com.
Putting mail.foobar.com into control/me...
Putting foobar.com into control/defaultdomain...
Putting foobar.com into control/plusdomain...

Checking local IP addresses:
127.0.0.1: Adding localhost to control/locals...
192.168.0.2: Adding mail.foobar.com to control/locals...

If there are any other domain names that point to you,
you will have to add them to /var/qmail/control/locals.
You don't have to worry about aliases, i.e., domains with CNAME records.

Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to those hosts.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!  

※ 정상적으로 config가 되지 않았을 경우
[root@localhost]# ./config
Your hostname is mail.foobar.com.
hard error
Sorry, I couldn't find your host's canonical name in DNS.
You will have to set up control/me yourself.  

※ 만약 위처럼 메시지가 나온다면 Network설정과 DNS 문제 입니다.
 혹 DNS가 설치되어 있고 DNS 서버에 이름이 정상적으로 등록되어 있다면 Network 설정을 확인해야 됩니다.

[root@localhost]# cat /etc/resolv.conf
search mail.foobar.com
nameserver 168.126.63.1
nameserver 168.126.63.2  

※ 필자는 search 부분을 등록하지 않은 서버를 세팅할 때 고생한적이 있습니다.
 resolv에서 search [domain name] 부분은 반드시 있어야 됩니다.

[root@localhost]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.0.1 mail.foobar.com mail  

[root@localhost]# cat /etc/sysconfig/network
...
HOSTNAME=mail.foobar.com
...  

※ 호스트네임 부분 또한 반드시 있어야 됩니다.
 만약 위의 모든 세팅이 정상적인데도 config가 제대로 되지 않는다면 아래와 같이 해주면 됩니다.

[root@localhost]# ./config-fast mail.foobar.com  

 - 큐메일 설치 확인
  큐메일이 정상적으로 설치되었다면 /var/qmail/control/ 디렉토리에 각종 설정파일이 생성이 됩니다.

[root@localhost]# ls -l /var/qmail/control
-rw-r--r-- 1 root root 11 6월 30 11:42 defaultdomain
-rw-r--r-- 1 root root 27 6월 30 11:42 locals
-rw-r--r-- 1 root root 17 6월 30 11:42 me
-rw-r--r-- 1 root root 11 6월 30 11:42 plusdomain
-rw-r--r-- 1 root root 27 6월 30 11:42 rcpthosts  

 - 컨트롤 파일 수정
  기본적인 설정 파일을 그대로 사용하셔도 상관은 없습니다만 필요 없는 부분이 생성되어 있는
  경우가 많이 있으므로 필자는 몇가지 설정파일을 수정해주도록 하겠습니다.

[root@localhost]# vi /var/qmail/control/defaultdomain
foobar.com  

[root@localhost]# vi /var/qmail/control/locals
localhost  

[root@localhost]# vi /var/qmail/control/me
mail.foobar.com  

[root@localhost]# vi /var/qmail/control/plusdomain
mail.foobar.com  

[root@localhost]# cat /dev/null > /var/qmail/control/rcpthosts  

 - 큐메일 데몬을 위한 디렉토리와 스크립트 파일 생성

[root@localhost]# vi /var/qmail/rc
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/  

[root@localhost]# chmod 755 /var/qmail/rc
[root@localhost]# mkdir -p /var/qmail/supervise/qmail-send/log
[root@localhost]# mkdir -p /var/qmail/supervise/qmail-smtpd/log
[root@localhost]# chmod 1755 /var/qmail/supervise/qmail-send
[root@localhost]# chmod 1755 /var/qmail/supervise/qmail-smtpd  

[root@localhost]# vi /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc  

[root@localhost]# vi /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t /var/log/qmail  

[root@localhost]# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1  

[root@localhost]# vi /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t /var/log/qmail/smtpd  

[root@localhost]# chmod 755 /var/qmail/supervise/qmail-send/run
[root@localhost]# chmod 755 /var/qmail/supervise/qmail-send/log/run
[root@localhost]# chmod 755 /var/qmail/supervise/qmail-smtpd/run
[root@localhost]# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run  

 - 큐메일을 위한 로그 디렉토리 생성
[root@localhost]# mkdir -p /var/log/qmail/smtpd
[root@localhost]# chown qmaill /var/log/qmail /var/log/qmail/smtpd  

 - Alias 설정
  큐메일은 root로 메일을 배달하지 않으므로 반드시 알리아즈를 만들어줘야 합니다.
  그리고 postmaster, mailer-daemon으로 오는 메일도 알리아즈 해서 사용하면 편리하겠죠.
  아래는 server@foobar.com 이란 주소로 알리아즈 시킨 것입니다.

[root@localhost]# echo server@foobar.com > /var/qmail/alias/.qmail-root
[root@localhost]# echo server@foobar.com > /var/qmail/alias/.qmail-postmaster
[root@localhost]# echo server@foobar.com > /var/qmail/alias/.qmail-mailer-daemon
[root@localhost]# chmod 644 /var/qmail/alias/*  

 - qmail 바이너리 파일 소프트 링크
  MTA를 필요로 하는 많은 프로그램이 아직까지 sendmail를 사용하고 있기 때문에
  qmail 바이너리 파일을 sendmail로 링크해주는것이 좋습니다.

[root@localhost]# ln -s /var/qmail/bin/sendmail /usr/lib
[root@localhost]# ln -s /var/qmail/bin/sendmail /usr/sbin  

 - qmail 시작

[root@localhost]# ln -s /var/qmail/supervise/qmail-send /service/
[root@localhost]# ln -s /var/qmail/supervise/qmail-smtpd /service/


큐메일 부트 스크립트 입니다. 아래 내용을 그대로 긁어서 사용하시면 됩니다.
혹은 http://pkg.tini4u.net/mta/qmail/ 에서 받으실 수 있습니다.

[root@localhost]# wget http://pkg.tini4u.net/mta/qmail/src/qmail_init.tar.gz
[root@localhost]# tar xfpz qmail_init.tar.gz
[root@localhost]# mv qmail /etc/rc.d/init.d/qmail
[root@localhost]# chkconfig --add qmail
[root@localhost]# chkconfig --level 345 qmail on  

* chkconfig 실행이 되지 않을 경우 path의 경로가 등록되어 있지 않은 경우이다.

/sbin 폴더안에 있으므로 다음과 같이 하면 됩니다.

/sbin/chkconfig ~~~

   1. #!/bin/sh
   2.
   3. # For Red Hat chkconfig
   4. # chkconfig: - 80 30
   5. # description: the qmail MTA
   6.
   7. PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
   8. export PATH
   9.
  10. case "$1" in
  11. start)
  12.     echo "Starting qmail"
  13.      if [ -e /service/qmail-send ] ; then
  14.          if svok /service/qmail-send ; then
  15.             svc -u /service/qmail-send
  16.         else
  17.             echo qmail-send supervise not running
  18.         fi
  19.      else
  20.          ln -s /var/qmail/supervise/qmail-send /service/
  21.      fi
  22.
  23.      if [ -e /service/qmail-smtpd ] ; then
  24.          if svok /service/qmail-smtpd ; then
  25.             svc -u /service/qmail-smtpd
  26.         else
  27.             echo qmail-smtpd supervise not running
  28.         fi
  29.      else
  30.          ln -s /var/qmail/supervise/qmail-smtpd /service/
  31.      fi
  32.    
  33.     if [ -d /var/lock/subsys ]; then
  34.      touch /var/lock/subsys/qmail
  35.     fi
  36.     ;;
  37. stop)
  38.     echo "Stopping qmail..."
  39.     echo " qmail-smtpd"
  40.     svc -dx /service/qmail-smtpd /service/qmail-smtpd/log
  41.      rm -f /service/qmail-smtpd
  42.     echo " qmail-send"
  43.     svc -dx /service/qmail-send /service/qmail-send/log
  44.      rm -f /service/qmail-send
  45.     if [ -f /var/lock/subsys/qmail ]; then
  46.      rm /var/lock/subsys/qmail
  47.     fi
  48.     ;;
  49. stat)
  50.     svstat /service/qmail-send
  51.     svstat /service/qmail-send/log
  52.     svstat /service/qmail-smtpd
  53.     svstat /service/qmail-smtpd/log
  54.     qmail-qstat
  55.     ;;
  56. doqueue|alrm|flush)
  57.     echo "Flushing timeout table and sending ALRM signal to qmail-send."
  58.     /var/qmail/bin/qmail-tcpok
  59.     svc -a /service/qmail-send
  60.     ;;
  61. queue)
  62.     qmail-qstat
  63.     qmail-qread
  64.     ;;
  65. reload|hup)
  66.     echo "Sending HUP signal to qmail-send."
  67.     svc -h /service/qmail-send
  68.     ;;
  69. pause)
  70.     echo "Pausing qmail-send"
  71.     svc -p /service/qmail-send
  72.     echo "Pausing qmail-smtpd"
  73.     svc -p /service/qmail-smtpd
  74.     ;;
  75. cont)
  76.     echo "Continuing qmail-send"
  77.     svc -c /service/qmail-send
  78.     echo "Continuing qmail-smtpd"
  79.     svc -c /service/qmail-smtpd
  80.     ;;
  81. restart)
  82.     echo "Restarting qmail:"
  83.     echo "* Stopping qmail-smtpd."
  84.     svc -d /service/qmail-smtpd
  85.     echo "* Sending qmail-send SIGTERM and restarting."
  86.     svc -t /service/qmail-send
  87.     echo "* Restarting qmail-smtpd."
  88.     svc -u /service/qmail-smtpd
  89.     ;;
  90. cdb)
  91.     tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
  92.     chmod 644 /etc/tcp.smtp.cdb
  93.     echo "Reloaded /etc/tcp.smtp."
  94.     ;;
  95. help)
  96.     cat <   97. stop -- stops mail service (smtp connections refused, nothing goes out)
  98. start -- starts mail service (smtp connection accepted, mail can go out)
  99. pause -- temporarily stops mail service (connections accepted, nothing leaves)
100. cont -- continues paused mail service
101. stat -- displays status of mail service
102.     cdb -- rebuild the tcpserver cdb file for smtp
103. restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
104. doqueue -- schedules queued messages for immediate delivery
105. reload -- sends qmail-send HUP, rereading locals and virtualdomains
106. queue -- shows status of queue
107. alrm -- same as doqueue
108. flush -- same as doqueue
109.     hup -- same as reload
110. HELP
111.     ;;
112. *)
113.     echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
114.     exit 1
115.     ;;
116. esac
117.
118. exit 0


vpopmail의 도메인과 사용자를 mysql database에서 관리하는 방법 입니다.
예전에는 mysql을 연동하는 방법이 꽤 귀찮은 작업이 많았는데, vpopmail의 버전이 5.4로
올라오면서 기존 roaming을 이용하는 방법과 크게 다른 작업을 하실 내용이 없습니다.
거의 대부분의 내용이 중복되는 사항이니 어쩌면 '뭐가 달라?' 라고 하시는 분이 계실지도 모르겠습니다.
다만 주의사항이 있다면 vpopmail을 설치하기 전에 mysql이 먼저 설치가 되어 있어야 됩니다. 

0.0. mysql 설치
 시스템에 RPM으로 sql이 설치가 되어있을지도 모르니 rmp db를 검색해 삭제를 합니다.

[root@localhost]# rpm -e --nodeps `rpm -qa | grep mysql`
[root@localhost]# wget http://ftp.superuser.co.kr/pub/mysql/mysql-4.1.18.tar.gz
[root@localhost]# mv mysql-4.18.tar.gz /usr/local/src
[root@localhost]# tar zxvf mysql-4.1.18.tar.gz
[root@localhost]# cd mysql-4.1.18
[root@localhost]# ./configure --prefix=/usr/local/mysql \
>> --localstatedir=/usr/local/mysql/data \
>> --with-mysqlid-user=/mysql \
>> --sysconfdir=/etc
[root@localhost]# make
[root@localhost]# make install 

0.1. DB 생성

[root@localhost]# cd /usr/local/mysql/bin
[root@localhost]# ./mysql_install_db
[root@localhost]# cd /usr/local/mysql/data  <== 디렉토리 생성 확인

0.2. mysql 의 공유 라이브러리 위치 설정

[root@localhost]# cd /usr/local/mysql/lib
[root@localhost]# cat >> /etc/ld.so.conf
/usr/local/mysql/lib
[root@localhost]# ldconfig
[root@localhost]# vi /etc/ld.so.conf (/usr/local/mysql/lib 추가 확인)

0.3. mysql 설정 파일 복사

[root@localhost]# cd /usr/local/mysql/share/mysql
[root@localhost]# vi my-medium.cnf
[root@localhost]# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf 

0.4. mysql 계정 생성 및 mysql 경로소유권 변경

[root@localhost]# vi /etc/passwd (계정정보 확인)
[root@localhost]# groupadd mysql
[root@localhost]# adduser -M -c Mysql_server =d /usr/local/mysql -g mysql -s /bin/nologin mysql
[root@localhost]# chown root.mysql -R /usr/local/mysql
[root@localhost]# chown mysql.mysql -R /usr/local/mysql 

0.5. mysql server 실행하기

[root@localhost]# /usr/local/mysql/bin/mysqld_safe -user=mysql
또는
[root@localhost]# /usr/local/mysql/share/mysql/mysql.server start

1. 유저, 그룹 추가
 vpopmail 운영을 위한 유저와 그룹을 생성하셔야 됩니다.
※ 아래 -r 옵션은 시스템 계정(uid 500미만)으로 유저를 생성하겠다는 의미 입니다.

[root@localhost]# groupadd -r vchkpw
[root@localhost]# useradd -r -g vchkpw vpopmail
[root@localhost]# mkdir -p /home/vpopmail/etc/
[root@localhost]# chmod 755 /home/vpopmail  

※ vpopmail의 기본디렉토리는 /home/vpopmail/ 입니다.

2. vpopmail 설치 (최신버전: http://sourceforge.net/projects/vpopmail/)
[root@localhost]# chmod 777 /home/vpopmail/etc/
[root@localhost]# touch /home/vpopmail/etc/tcp.smtp
[root@localhost]# wget http://nchc.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.17.tar.gz
[root@localhost]# tar xfz vpopmail-5.4.17.tar.gz
[root@localhost]# cd vpopmail-5.4.17
[root@localhost]# ./configure \
--enable-roaming-users=y \
--enable-tcprules-prog=/usr/local/bin/tcprules \
--enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp \
--enable-relay-clear-minutes=15 \
--enable-auth-logging=y \
--enable-logging=e \
--enable-auth-module=mysql
[root@localhost]# make
[root@localhost]# make install-strip
[root@localhost]# chmod 755 /home/vpopmail/etc/
[root@localhost]# chown vpopmail.vchkpw /home/vpopmail/etc/  

※ 위 configure 옵션으로 pop3 인증후 15분동안 아무런 서버 사용이 없으면 자동으로 relay를 닫아
open relay가 되어 스패머들의 타겟이 되는것을 막도록 합니다.
그리고 tcp.smtp 릴레이 파일을 임시생성하는 이유는 위 옵션에 파일경로를 지정해줬기 때문입니다.
자동설정을 사용하지 않고 굳이 tcpserver-file 경로를 지정해주는 이유는 아무런 옵션이 없는 경우
시스템에서 자동으로 찾게 되는데, 이런 경우 /etc/tcp.smtp를 대부분 찾기 때문 입니다.

그리고 mysql을 소스컴파일 설치한 경우 mysql library를 못찾는 머신이 있을겁니다.
그런 경우에는 아래와 같이 library option을 추가로 넣어주시면 됩니다.

--enable-incdir=/mysql/path/to/include \
--enable-libdir=/mysql/path/to/lib  

3. mysql db 추가

[root@localhost]# mysql -u root -p mysql
mysql> create database vpopmail;
mysql> insert into user (host, user, password) values('localhost','vpopmail',password('1234'));
mysql> insert into db values('localhost','vpopmail','vpopmail','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');  

※ 위 insert문은 mysql 5.0 기준이므로, db 추가는 데이터베이스 강좌를 참조하시기 바랍니다.

4. 기본 도메인 설정, MySQL 설정, SMTP 릴레이 설정
 vpopmail 5.2.4 버전부터는 기본도메인 설정옵션인 --enable-default-domain이 사라지고
 ~vpopmail/etc/defaultdomain 에서 관리되며, vpopmail 5.4.x 버전부터는 mysql과 연동시 했던
 기존 vmysql.c 파일을 수정하던 작업이 사라지고 ~vpopmail/etc/vpopmail.mysql에서
 mysql의 관련 정보를 적용시킬 수 있습니다.

[root@localhost]# echo "foobar.com" > /home/vpopmail/etc/defaultdomain
[root@localhost]# chown vpopmail.vchkpw /home/vpopmail/etc/defaultdomain
[root@localhost]# chmod 640 /home/vpopmail/etc/defaultdomain
[root@localhost]# vi /home/vpopmail/etc/vpopmail.mysql
localhost|0|vpopmail|1234|vpopmail
[root@localhost]# chmod 640 /home/vpopmail/etc/vpopmail.mysql
[root@localhost]# vi /home/vpopmail/etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
192.168.0.2:allow,RELAYCLIENT=""
[root@localhost]# chmod 640 /home/vpopmail/etc/tcp.smtp
[root@localhost]# /home/vpopmail/bin/clearopensmtp  

※ 위에서 clearopensmtp를 해주는 이유는 tcp.smtp를 이용해 tcp.smtp.cdb 파일을 생성하기 위함입니다.

5. crontab 설정
 clearopensmtp를 자동으로 한번씩 실행해주기 위해 crond 데몬을 이용 합니다.
 15분에 한번씩 실행되도록 설정하겠습니다.

[root@localhost]# crontab -e
*/15 * * * * /home/vpopmail/bin/clearopensmtp  

6. qmail smtp 스크립트 변경
 tcp.smtp 파일이 변경되었으므로 qmail을 설치할 때 작성한 run script중 하나를 수정해줘야 됩니다.

[root@localhost]# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /home/vpopmail/etc/tcp.smtp.cdb \ <--- 이부분
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1  

6. vpopmail을 위한 디렉토리와 스크립트 생성

[root@localhost]# mkdir /var/qmail/supervise/vpop
[root@localhost]# vi /var/qmail/supervise/vpop/run
#!/bin/sh
VPOP_UID=`id -u vpopmail`
VPOP_GID=`id -g vpopmail`

exec /usr/local/bin/softlimit -m 2500000 \
tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \
/var/qmail/bin/qmail-popup foobar.com \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
[root@localhost]# chmod 755 /var/qmail/supervise/vpop/run  

7. 도메인과 메일계정 생성

[root@localhost]# /home/vpopmail/bin/vadddomain foobar.com
[root@localhost]# /home/vpopmail/bin/vadduser webmaster@foobar.com 1234  

※ vadddomain실행시 나오는 패스워드는 qmailadmin에서 사용할 비밀번호 입니다.
또한 vadddomain [도메인] [postmaster 비밀번호] 로도 사용가능합니다.
vadduser 사용법은 vadduser [메일계정] [비밀번호] 입니다.


qmail과 vpopmail 설치가 모두 완료되었습니다.
한마디로 메일서버 구축이 완료되었단 말이겠지요 ^^*
이제 메일서버를 시작하고 정상적으로 접속이 되는지 확인을 해보도록 하겠습니다.

1. 서버 시작하기

[root@localhost]# /etc/rc.d/init.d/qmail start
Starting qmail  

2. smtp 확인
 smtp 확인은 telnet으로 하면 되며 smtp 포트인 25번으로 접속을 하시면 됩니다.
 아래와 같이 나온다면 정상적으로 smtp 서버가 구축된 것입니다.

[root@localhost]# telnet localhost 25
Trying 127.0.0.1...
Connected to mail.foobar.com (127.0.0.1).
Escape character is '^]'.
220 mail.foobar.com ESMTP
quit (필자가 telnet에서 빠져나오기 위해 타이핑 한 부분)
221 mail.foobar.com
Connection closed by foreign host.  

※ 정상적으로 smtp 서버가 구축이 되지 않은 경우

[root@localhost]# telnet localhost 25
Trying 127.0.0.1...
Connected to mail.foobar.com (127.0.0.1).
Escape character is '^]'.
Connection closed by foreign host.  

만약 위처럼 정상적으로 접속이 안되는 경우에는 qmail script의 softlimit 값을 늘려줘 보시기 바랍니다.

[root@localhost]# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 72000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /home/vpopmail/etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1
[root@localhost]# /etc/rc.d/init.d/qmail restart
Restarting qmail:
* Stopping qmail-smtpd.
* Sending qmail-send SIGTERM and restarting.
* Restarting qmail-smtpd.  

3. pop3 확인
 pop3 확인도 smtp와 마찬가지로 telnet으로 하시면 되며, pop3 포트인 110으로 접속하시면 됩니다.

[root@localhost]# telnet localhost 110
Trying 127.0.0.1...
Connected to mail.foobar.com (127.0.0.1).
Escape character is '^]'.
+OK <8595.1151652640@foobar.com>
quit (필자가 telnet에서 빠져나오기 위해 타이핑 한 부분)
+OK
Connection closed by foreign host.  

※ 정상적으로 pop3 서버가 구축이 되지 않은 경우

[root@localhost]# telnet localhost 110
Trying 127.0.0.1...
Connected to mail.foobar.com (127.0.0.1).
Escape character is '^]'.
Connection closed by foreign host.  

만약 위처럼 접속이 안되는 경우 smtp와 마찬가지로 pop3 script의 softlimit 값을 늘려주시기 바랍니다.

[root@localhost]# vi /var/qmail/supervise/vpop/run
#!/bin/sh
VPOP_UID=`id -u vpopmail`
VPOP_GID=`id -g vpopmail`

exec /usr/local/bin/softlimit -m 72500000 \
tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \
/var/qmail/bin/qmail-popup foobar.com \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
[root@localhost]# /etc/rc.d/init.d/qmail restart
Restarting qmail:
* Stopping qmail-smtpd.
* Sending qmail-send SIGTERM and restarting.
* Restarting qmail-smtpd.  

※ 만약 softlimit 값을 늘려줬어도 동일한 문제가 일어난다면 처음부터 다시 확인해보시기 바랍니다.
설치가 잘못된 경우일 가능성이 매우 높습니다.

※ 처음 설치할 당시 메뉴얼을 출력하여 qmail script를 직접 타이핑 했습니다.
 근데 telnet 접속으로 테스트시에 접속이 되지 않았습니다. 위의 내용처럼 limit를 늘려주기도 하고,
 qmail을 다시 설치도 해보고, 심지어 리눅스까지 다시 설치도 해보았으나 접속이 되질 않았습니다.
 문제는 아주 간단한 곳에 있었습니다. 오타였습니다!! script를 복사하여 붙여넣고 하니 잘 되었습니다.
 limit를 늘려도 안되는 경우 script를 copy & paste 해보시기 바랍니다.


qmail을 웹에서 관리할 수 있는 관리 프로그램들입니다.

1. autorespond 설치 (최신버전 : http://www.inter7.com/?page=software)
 autorespond는 BradDameron에 의해 추가된 패키지 입니다.
 ezmlm에서 필요로 하는 프로그램이므로 설치해줍니다.

[root@localhost]# wget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz
[root@localhost]# tar xfz autorespond-2.0.5.tar.gz
[root@localhost]# cd autorespond-2.0.5
[root@localhost]# make
[root@localhost]# cp -p autorespond /usr/local/bin/  

2. ezmlm 설치 (최신버전 : http://www.inter7.com/?page=software)
 ezmlm은 qmail과 같이 사용할 수 있는 쉽고 빠른 메일링 리스트 프로그램 입니다.
 이 프로그램의 자세한 정보는 http://cr.yp.to/ezmlm.html 이곳을 참조하시면 되겠습니다.
 또한 ezmlm-idx 라는 여러가지 편리한 패치가 종합적으로 모아져 있는 패치파일이 있습니다.
 예전에는 ezmlm과 ezmlm-idx를 따로 받아서 패치를 해주는 작업을 해야만 했지만
 최근에는 필자가 알려준 사이트에서 패치를 해서 제공하기 때문에 패치해주는 작업을 안해도 됩니다.
 그리고 예전에는 설치전에(make setup) make man으로 man page를 생성해줘야 했으나 이 또한
 직접 컴파일되어서 제공하므로 작업순서가 한번 더 줄어들었습니다.
※ ezmlm가 설치되는 기본디렉토리는 /usr/local/bin/ezmlm 입니다.

[root@localhost]# wget http://www.inter7.com/devel/ezmlm-0.53-idx-0.41.tar.gz
[root@localhost]# tar xfz ezmlm-0.53-idx-0.41.tar.gz
[root@localhost]# cd ezmlm-0.53-idx-0.41
[root@localhost]# make
[root@localhost]# make setup

3. qmailadmin (최신버전 : http://sourceforge.net/projects/qmailadmin/)
 qmailadmin은 vpopmail의 웹 인터페이스 입니다.
 도메인 추가/삭제를 제외한 모든 기능을 웹상에서 할 수 있으며, ezmlm을 이용한
 메일링 리스트 추가/삭제/관리까지 할 수 있는 아주 좋은 프로그램 입니다.
※ 필자의 개인패키지 미러에서 한국언어 파일을 제공합니다. (http://pkg.tini4u.net/mta/qmail/)

[root@localhost]# wget http://jaist.dl.sourceforge.net/sourceforge/qmailadmin/qmailadmin-1.2.9.tar.gz
[root@localhost]# wget http://pkg.tini4u.net/mta/qmail/src/qmailadmin-ko.tar.gz
[root@localhost]# tar xfz qmailadmin-1.2.9.tar.gz
[root@localhost]# tar xfz qmailadmin-ko.tar.gz -C ./qmailadmin-1.2.9/lang
[root@localhost]# cd qmailadmin-1.2.9
[root@localhost]# ./configure \
--enable-htmllibdir=/home/qadmin/html/qmailadmin \
--enable-htmldir=/home/qadmin/html/qmailadmin \
--enable-cgibindir=/home/qadmin/html/qmailadmin \
--enable-imagedir=/home/qadmin/html/qmailadmin/images \
--enable-imageurl=/images \
--enable-cgipath=/index.cgi
[root@localhost]# make
[root@localhost]# make install-strip
[root@localhost]# cd /home/qadmin/html/qmailadmin
[root@localhost]# mv qmailadmin qmailadmin.cgi
[root@localhost]# ln -sf qmailadmin.cgi index.cgi  

4. 버츄얼설정

 /etc/httpd/conf/httpd.conf  <= apache 환경 설정 파일

<VirtualHost 192.168.0.1>
ServerName mail.foobar.com
DocumentRoot /home/qadmin/html/qmailadmin
</VirtualHost>  

※ 웹으로 접속해 봅니다. 접속 주소는 http://mail.foobar.com/ 입니다.


외부에서 급하게 메일을 확인할 일이 있을 경우 메일 클라이언트 프로그램 설정하기 귀찮을때가 있습니다. 그럴 경우를 위해 보통 웹메일을 많이 이용하게 됩니다. 웹메일을 설치하기에 앞서 웹메일을 구축하는데 필요한 imap를 설치하도록 하겠습니다. imap의 종류는 여러가지가 있는데 큐메일은 imap2002보다는 courier-imap와 연동이 잘 됩니다. 따라서 필자는 courier-imap를 설치하도록 하겠습니다.

1. Tcl 패키지 설치
 Tcl은 다른 응용 프로그램에 내장되도록 디자인된 단순한 스크립트 언어 입니다.
 Tcl은 Tk 패키지에 포함된 위젯 모음인 Tk와 함께 사용되도록 만들어진 패키지 입니다.
 이 패키지는 yum mirror에서 지원을 하므로 추후 업데이트를 위해 yum으로 설치 합니다.
※ 보통 레드헷 시스템에서는 기본적으로 설치가 되어 있습니다.

[root@localhost]# yum -y install tcl  

2. expect 패키지 설치
 Expect는 telnet, ftp, passwd, fsck, rlogin, tip 등과 같은 상호 대화식 응용 프로그램을 자동화 하는
 Tcl 확장 프로그램 입니다. 또한 Expect는 응용 프로그램을 테스트 하는데 유용하게 사용되는 프로그램
 이기도 합니다. 최근의 레드헷 시스템에서는 yum mirror에서 지원하므로 추후 업데이트를 위해
  yum으로 설치 합니다.

[root@localhost]# yum -y install expect  

※ 만약 OS의 버전이 낮아 yum에서 지원하지 않는다면 rpm.pbone.net 에서 검색하여 설치하면 됩니다.

3. 퍼미션 조정
 courier-imap는 보안을 위하여 일반유저의 권한으로 컴파일 한뒤에 root유저로 설치합니다.
 따라서 만약 보안을 위해 퍼미션을 조정해놨다면 임시적으로 조정해주셔야 됩니다.
 또한 courier-imap를 컴파일할때 vpopmail의 library를 필요로 하기 때문에 같이 조정합니다.

[root@localhost]# chmod 755 /usr/bin/gcc
[root@localhost]# chmod 755 /usr/bin/g++
[root@localhost]# chmod 755 /usr/bin/find
[root@localhost]# chmod 755 /usr/bin/which
[root@localhost]# chmod 755 /usr/bin/make
[root@localhost]# chmod 755 /usr/bin/install
[root@localhost]# chmod 777 /home/vpopmail/lib/
[root@localhost]# chmod 777 /home/vpopmail/lib/libvpopmail.a  

4. 임시계정 생성
 앞서 말했듯이 보안을 위해 일반유저(uid 500이상) 권한으로 컴파일 해야 됩니다.
 따라서 일반 사용자 계정을 생성해주도록 합니다. 필자는 편하게 webmail 이라고 하겠습니다.

[root@localhost]# useradd webmail  

5. courier-imap 설치 (최신버전 : http://sourceforge.net/projects/courier/)
 현재 강좌를 쓰는 시점(2006.07.01)에서 courier-imap의 최신버전은 4.1.1 입니다.
 그러나 courier-imap 4.x 버전은 이것저것 설치해줄것이 너무 많아 귀찮은점이 많이 있습니다.
 따라서 필자는 courier-imap 3.x 버전을 사용해 설치를 하도록 하겠습니다.
 courier-imap 3.x 버전은 필자의 개인 패키지 미러에 있습니다. (http://pkg.tini4u.net/mta/qmail/)
 또한 일반유저 권한으로 컴파일 해야 되기 때문에 임시 디렉토리인 /var/tmp/에서 하도록 하겠습니다.

- 일반 유저로 변환후 컴파일

[root@localhost]# su - webmail
[webmail@localhost]$ cd /var/tmp
[webmail@localhost]$ wget http://pkg.tini4u.net/mta/qmail/src/courier-imap-3.0.8.tar.bz2
[webmail@localhost]$ tar xfj courier-imap-3.0.8.tar.bz2
[webmail@localhost]$ cd courier-imap-3.0.8
[webmail@localhost]$ CFLAGS="-DHAVE_OPEN_SMTP_RELAY"; export CFLAGS
[webmail@localhost]$ ./configure \
--prefix=/usr \
--datadir=/usr/share/courier-imap \
--sysconfdir=/etc/courier-imap \
--libexecdir=/usr/libexec/courier-imap \
--localstatedir=/var \
--mandir=/usr/share/man \
--without-ipv6 \
--enable-unicode \
--with-authvchkpw \
--with-redhat \
--without-authdaemon \
--without-authmysql \
--without-authldap \
--without-authdaemon \
--without-authpgsql
[webmail@localhost]$ make
[webmail@localhost]$ make check
[webmail@localhost]$ exit  

- root로 설치

[root@localhost]# cd /var/tmp/courier-imap-3.0.8
[root@localhost]# make install
[root@localhost]# make install-configure  

- courier-imap 데몬 스크립트 복사

[root@localhost]# cp -f courier-imap.sysvinit /etc/rc.d/init.d/courier-imap
[root@localhost]# chown root.root /etc/rc.d/init.d/courier-imap
[root@localhost]# chmod 755 /etc/rc.d/init.d/courier-imap
[root@localhost]# chkconfig --add courier-imap
[root@localhost]# chkconfig --level 345 courier-imap on  

- 임시계정 삭제 및 퍼미션 복구
 컴파일과 설치가 모두 정상적으로 되었으므로 임시계정을 삭제하고 퍼미션도 복원합니다.

[root@localhost]# userdel -r webmail
[root@localhost]# chmod 700 /usr/bin/gcc
[root@localhost]# chmod 700 /usr/bin/g++
[root@localhost]# chmod 700 /usr/bin/find
[root@localhost]# chmod 700 /usr/bin/which
[root@localhost]# chmod 700 /usr/bin/make
[root@localhost]# chmod 700 /usr/bin/install
[root@localhost]# chmod 755 /home/vpopmail/lib/
[root@localhost]# chmod 644 /home/vpopmail/lib/libvpopmail.a  

- 스크립트 수정
 courier-imap가 root가 아닌 vpopmail 유저와 vchkpw 그룹으로 실행되도록 수정합니다.
※ imapd.rc 파일은 58라인을, pop3d.rc 파일은 51라인을 수정하시면 됩니다.

[root@localhost]# vi /usr/libexec/courier-imap/imapd.rc
원본 : -stderrlogger=${exec_prefix}/sbin/courierlogger \
수정 : -stderrlogger=${exec_prefix}/sbin/courierlogger -user=vpopmail -group=vchkpw \
[root@localhost]# vi /usr/libexec/courier-imap/pop3d.rc
원본 : -stderrlogger=${exec_prefix}/sbin/courierlogger \
수정 : -stderrlogger=${exec_prefix}/sbin/courierlogger -user=vpopmail -group=vchkpw \
[root@localhost]# chmod 755 /usr/libexec/courier-imap/imapd.rc
[root@localhost]# chmod 755 /usr/libexec/courier-imap/pop3d.rc  

- imap 설정
 기본적으로 courier-imap를 설치하고 시작하게 되면 아무런 데몬도 시작되지 않습니다.
 그렇기 때문에 imap 스크립트를 수정해서 데몬을 실행하겠다고 수정해줘야 됩니다.
※ imapd 파일의 373 라인을 수정하시면 됩니다.

[root@localhost]# vi /etc/courier-imap/imapd
원본 : IMAPDSTART=NO
수정 : IMAPDSTART=YES  

- courier-imap 시작

[root@localhost]# /etc/rc.d/init.d/courier-imap start
Starting Courier-IMAP server: imap


다람쥐메일은 여러가지 출시된 많은 웹메일 오픈소스중 하나이며 필자가 애용하는 프로그램 입니다.
따라서 여타 다른 프로그램보다 사용이 간단한 다람쥐메일을 세팅하도록 하겠습니다.
다람쥐메일은 프로그램을 따로 설치하지 않아도 작동하기 때문에 매우 간편하게 세팅이 가능합니다.
다운로드 받으신 뒤 압축 해제하시고 몇가지 설정만 해주면 동작하는 프로그램이죠

1. 다람쥐메일 다운로드 (최신버전 : http://www.squirrelmail.org/download.php)

[root@localhost]# wget http://jaist.dl.sourceforge.net/sourceforge/squirrelmail/squirrelmail-1.4.6.tar.gz
[root@localhost]# wget http://jaist.dl.sourceforge.net/sourceforge/squirrelmail/all_locales-1.4.6-20060409.tar.gz
[root@localhost]# tar xfpz squirrelmail-1.4.6.tar.gz
[root@localhost]# tar xfpz all_locales-1.4.6-20060409.tar.gz -C squirrelmail-1.4.6  

2. 플러그인 다운로드 (최신버전 : http://www.squirrelmail.org/plugins.php)
 다람쥐메일은 그대로 사용해도 괜찮지만 좀더 편리한 여러가지 기능을 추가하도록 하겠습니다.
 이왕 사용할 웹메일인데 여러가지 플러그인을 활용하면 쓰는것이 편리할 것입니다.
 아래는 필자가 추천하는 플러그인들 입니다.
 플러그인을 다운받은뒤 압축을 풀고 다람쥐메일 디렉토리중 plugins에 넣어주시면 됩니다.

   ※ 다람쥐 메일에 기본적으로 들어있는 플러그인
    Delete Move Next
    Filters
    Listcommands
    Message Details
    NewMail
    Sent Subfolders
    SquirrelSpell  

   ※ 다운받아서 추가해야되는 플러그인
    Add-ons -> Notes
    AddressBook -> Address Add
    Compose -> HTML Mail
   
    Message & Folder Manipulation -> Folder Sizes
    Message & Folder Manipulation -> Message Flags & Icons
   
    Message View -> Unsafe Image Rules
    Message View -> View As HTML
  
    Miscellaneous -> Compatibility  

3. 다람쥐메일 설정
 설정하기 전에 다람쥐메일 디렉토리명이 너무 길고 복잡하기 때문에 간단한 이름으로 바꿔줍니다.
 필자는 편하게 webmail 이라고 하겠습니다.

[root@localhost]# mv squirrelmail-1.4.6 webmail
[root@localhost]# ./configure  

- 다람쥐메일 설정화면

SquirrelMail Configuration : Read: config_default.php (1.4.0)
---------------------------------------------------------
Main Menu --
1. Organization Preferences
2. Server Settings
3. Folder Defaults
4. General Options
5. Themes
6. Address Books
7. Message of the Day (MOTD)
8. Plugins
9. Database
10. Languages

D. Set pre-defined settings for specific IMAP servers

C Turn color on
S Save data
Q Quit

Command >>  

- Organization Preferences

Organization Preferences
1. Organization Name : LTN(Linux.Tini4u.Net) 웹메일
2. Organization Logo : ../images/sm_logo.png
3. Org. Logo Width/Height : (308/111)
4. Organization Title : LTN(Linux.Tini4u.Net) 웹메일
5. Signout Page : http://webmail.foobar.com/
6. Top Frame : _top
7. Provider link : http://webmail.foobar.com/
8. Provider name : LTN(Linux.Tini4u.Net) 웹메일  

- Server Settings

Server Settings

General
-------
1. Domain : foobar.com
2. Invert Time : false
3. Sendmail or SMTP : SMTP

IMAP Settings
--------------
4. IMAP Server : localhost
5. IMAP Port : 143
6. Authentication type : login
7. Secure IMAP (TLS) : false
8. Server software : courier
9. Delimiter : detect

B. Update SMTP Settings : localhost:25
H. Hide IMAP Server Settings  

- Plugins

Plugins
Installed Plugins
1. squirrelspell
2. msg_flags
3. notes
4. address_add
5. filters
6. view_as_html
7. folder_sizes
8. compatibility
9. listcommands
10. message_details
11. newmail
12. unsafe_image_rules
13. html_mail
14. sent_subfolders
15. delete_move_next

Available Plugins:
16. spamcop
17. fortune
18. bug_report
19. translate
20. info
21. mail_fetch
22. abook_take
23. calendar
24. administrator
25. archive_mail  

- Language preferences

Language preferences
1. Default Language : ko_KR
2. Default Charset : ko_KR
3. Enable lossy encoding : false  

※ 모든 설정을 마쳤으면 Save 하시고 웹에서 접속하시면 됩니다.


출처 : http://blog.daum.net/freeppro


Trackback 0 Comment 0
2009.07.06 14:01

James / Thunderbird 이용한 메일 환경 구축

개발환경에서 메일 서버를 간단하게 구축하여 사용하기 위해 Apache의 James를 사용해 보았다.

http://james.apache.org/ 에 접속한다.

대부분의 프로젝트 개발 장비는 윈도우 xp pro인지라 윈도우에서 사용 가능한 zip 으로 묶은 걸 받았다.

별도의 installer는 없다.

편의상 그냥 C:\ 맨땅에 풀어서 자리를 잡고 bin\run.bat를 실행한다.

홋.. james가 avalon 기반이었구나.

암튼 이걸로 서버는 뜬 셈

서버에 사용자 계정을 생성해야하는지라 telnet 으로 메일 서버에 접속해야한다.

포트는 4555번을 사용한다.

어드민 계정은 root 패스워드도 root 를 입력하면 로그인 성공

뭘 더 할 수 있는지 help를 쳐보면 아래와 같다.

사용자를 추가하기 위해서는 adduser 명령이 필요한 듯

adduser 해주고 계정과 패스워드를 지정해주면 사용자 등록은 끝
설정도 쉽고 OS 안가리고 환경을 구축하긴 쉬은 듯

이걸로 메일 서버 구축은 완료되었고 다음은 메일 클라이언트를 설정할 차례
무료에 OS 안타는 메일 서버를 쓴 김에 Mozilla Thunderbird 를 이용해서 클라이언트 환경을 구축해본다.  

앞서 James 로 메일 서버를 구축했다고 치고 다음은 메일 클라이언트를 설정할 차례

windows에 내장된 outlook을 쓸 경우 메일 주소 검증 시 localhost 를 사용하지 못하게 한다.
thunderbird의 경우 xxx@localhost 와 같은 메일 주소도 허용을 하고
OS를 안타고 무료로 사용가능하니 개발 환경 테스트에는 유리한 셈

http://www.mozilla.com/en-US/thunderbird/ 에서 썬더버드를 다운로드 받는다.

세심하게 한글화 되어있다니 감사할 따름

일단은 메일 계정부터 만들어야 한다.

앞서 James에서 만들었던 계정을 넣고 메일 주소는 로컬환경이므로 @localhost를 쓴다.

유복한 개발환경이라 도메인을 가지고 있고 접근이 가능하다면 진짜 도메인명을 사용할 수 있을텐데..
127.0.0.1 와 같은 IP 주소를 사용해도 동작한다. 

pop3 서버를 지정하는데 이 때도 James 가 깔린 주소를 지정하면 된다.

지금은 로컬에 다 몰아서 설치하는 관계로 localhost를 사용한다.

처음 설치시에는 smtp 서버 설정도 물어보는데 위 그림은 이미 한번 계정을 설정한 적이 있어서 smtp는 기본으로 잡힌 설정이 뜬다. 후에 수정이 가능하다.

메일을 주고 받을 때 사용할 사용자 명을 입력한다.

메일 클라이언트에서 복수 계정 사용이 가능하므로 이를 구분할 계정 이름을 입력한다.

이제까지의 설정을 확인한다. 내용이 틀리다면 뒤로 가서 재수정을 한다.

실제로 자신에게 메일을 써서 테스트를 한다. 작성이 완료되면 보내기 클릭

메일 확인을 위해 받기를 클릭하면 암호를 물어본다.

James에서 사용자 등록 시 설정한 패스워드를 입력한다.

메일이 잘 전달된다. 이걸로 개발 환경에서 사용할 메일 서버, 클라이언트 환경은 완성 된 셈

만약 개발한 어플리케이션에서 메일 송수신이 오동작한다면 Thunderbird로 메일 테스트를 해볼 수 있을 듯



출처 : codelabor.org

Trackback 0 Comment 0
2009.04.17 19:55

솔라리스에서 메일서버 구축하기

출처 http://tjsystem.com/cgi-bin/read.cgi?board=solstudy&y_number=66&nnew=2


서론
인터넷 메일은 모든 사용자들이 가장 많이 이용하는 서비스임에도 불구하고, 두 가지 큰 불편함을 갖고 있다. 첫째는, 지정된 장소 (IP 주소) 이외의 곳에서 메일 서버에 접속하는 사용자는 outgoing(자신의 메일을 다른 사람에게 발송하기)이 불가능하다는 점이다. 이것을 제3자 릴레이(third-party relay) 금지라고 일컫는다. 둘째는, SMTP 세션이나 POP3(또는 IMAP) 세션은 암호화가 되어 있지 않기 때문에, 네트웍의 중간 부분에 적절한 스니핑(sniffing) 장비를 붙인다면 메일의 내용 및 심지어는 POP3 계정의 ID/암호도 잡아낼 수 있다.

릴레이 스팸 메일의 피해 때문에, sendmail 8.9.x 이상의 버전에서는 기본적으로 등록되지 않은 IP 주소로부터의 메일 보내기 요청은 (목적지가 local인 경우를 제외하고는) 모두 거절된다. 사무실의 IP 주소를 메일 서버에 등록하면, 사무실의 모든 직원들은 아무 곳으로나 자유롭게 메일을 보낼 수 있다. 하지만 다른 지역으로 출장을 가는 경우를 생각해보자. 호텔 방에서 또는 박람회장에서 랩탑을 꺼내어 인터넷에 연결을 한 후, 거래처로 메일을 보내려고 한다. 하지만 메일 서버의 입장에서 보면, 등록되지 않은 IP 주소로부터 "메일 보내줘" 요청이 들어왔으므로 거절을 할 것이다. 이런 문제는 SMTP AUTH라는 기능을 추가하여 해결이 가능하다. 지정된 IP 주소 이외의 곳에서 접속하는 사용자라면, 자신의 ID와 암호를 메일 서버에 제공하고 인증을 받은 후 제3자 릴레이를 허가 받을 수 있다.

후자의 경우는 연결 세션을 암호화하여 해결할 수 있다. 물론 SMTP 연결 세션도 암호화하는 것이 좋고, 아니, 암호화를 해야 할 것이다. 그러나 이에 관련된 내용은 아직 잘 알려진 바가 없다.

단, 메일 받기(incoming, 자신의 메일함을 열어서 로컬 컴퓨터로 다운로드하기)는 어디서나 항상 가능하다는 점을 명심하자. 메일 보내기는 SMTP 프로토콜을 이용하고 이 프로토콜은 사용자 인증 기능이 없지만, 메일 받기는 POP3나 IMAP4 프로토콜을 이용하며 이 프로토콜들은 사용자 인증 기능이 있기 때문이다.

마이크로소프트의 Exchange 서버는 이 모든 기능을 제공한다는 이야기를 들어본 것 같다. 문제는 예산이다. 서버로 사용하기 위한 값비싼 컴퓨터, 마이크로소프트 Windows 2000 서버 운영체제, 그리고 더해서 Exchange 서버 프로그램을 모두 합친다면 매우 아찔한 금액이다. 게다가 만일 서버(장비/프로그램)에 장애가 생기거나 특정 사용자에게 이상한 현상이 발생했을 경우 누가 해결할 수가 있을까?

이 문서는 SPARC 장비, Solaris 8 운영체제(무료), 그리고 sendmail (역시 무료) 등을 이용해서 원하는 요구 사항을 충족시키는 메일 서버를 구축하는 방법에 대해 설명한다. 인터넷에서 구한 여러 문서들도 도움이 되었으나, 가장 널리 이용하는 메일 클라이언트인 MS Outlook / Outlook Express와 함께 맞물려 동작하는 방법에 대한 설명은 어디에서도 구할 수가 없어서 시간이 많이 걸렸음을 말하고 싶다.

필요한 패키지 구하기
운영체제 및 필수적인 패치를 설치한다거나, 이런저런 편리한 패키지를 추가한다거나, 기타 보안에 관련된 작업 등에 대한 설명은 이 문서의 범위를 벗어나므로 생략한다. 하지만, 간략하게나마 언급을 하면 다음과 같다.

Solaris 8 운영체제 설치
Recommended Patch for Solaris 8 설치
Maintenance Update for Solaris 8 설치
유용한 패키지 설치 : bash, gcc, gnu make, rsync, sudo, top, wget 등
보안에 관련된 패키지 설치 : tcp_wrappers, ssh 등
보안성 향상 : inetd에서 불필요한 포트 닫기, tcp_wrappers의 규칙 설정 등
서론에서 언급한 요구 사항을 모두 만족하도록 Solaris 상에서 메일 서버를 구축하려면 과정이 복잡할 뿐만 아니라, 수많은 패키지를 (때로는 컴파일을 해서) 설치해야 한다. 필요한 패키지는 다음과 같다.

openssl (http://www.openssl.org) : 2001년 2월 기준 0.9.6
ANDI-random (http://www.cosy.sbg.ac.at/~andi) : 2001년 2월 기준 0.6
cyrus-sasl (ftp://ftp.andrew.cmu.edu/pub/cyrus-mail) : 2001년 2월 기준 1.5.24
sslwrap (http://www.rickk.com/sslwrap) : 2001년 2월 기준 2.0.6
solid-pop3d (http://solidpop3d.pld.org.pl) : 2001년 2월 기준 0.15
washington-imapd (ftp://ftp.cac.washington.edu/imap) : 2001년 2월 기준 2000c
sendmail (http://www.sendmail.org) : 2001년 2월 기준 8.11.2
procmail (http://www.procmail.org) : 2001년 2월 기준 3.15.1
각각의 패키지를 설치하는 방법은 3장에서 설명한다. 패키지의 설치 순서에는 다소의 의존성(dependency)가 존재한다. 예를 들어, ANDI-random을 openssl 보다 먼저 설치하는 것이 좋고, cyrus-sasl은 openssl 뒤에 설치해야 한다. 경험에 의한 설치 순서는, ANDI-random ⇒ openssl ⇒ sslwrap ⇒ cyrus-sasl ⇒ procmail ⇒ sendmail 이다. 나머지는 아무 단계에서나 설치해도 무방하다.

패키지 설치
패키지를 설치하기 위해서 쉘의 변수들을 다음처럼 맞춰주는 것이 좋다.


PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin:/usr/ucb
export PATH
LD_LIBRARY_PATH=/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CC=gcc
export CC


ANDI-random 설치하기

이 패키지는 Solaris 8에 없는 /dev/random을 구현한 것이다. 이 장치는 난수(random number)를 발생시키기 위한 충분한 엔트로피의 씨앗(seed)를 제공한다. 암호화 소프트웨어(openssl 등)가 키(key)를 생성하려면 필요한 장치이다. 설치는 pkgadd 명령어를 이용한다.

# pkgadd -d ANDIrand-0.6-5.8-sparc-1.pkg

파일명 중에서 0.6은 버전을, 그리고 5.8은 Solaris 8을 각각 의미한다. 다른 버전의 Solaris를 사용하고 있다면 그에 맞는 패키지를 구해오면 된다.

openssl 설치하기

이 패키지는 SSL(secure socket layer) 계층을 제공하여 peer-to-peer 간의 세션을 암호화한다. 암호화 세션에 필요한 키라던가 보증서 등을 만들 수도 있다. 소스 코드를 풀어서 컴파일해야 한다.


# gzip -dvc openssl-0.9.6.tar.gz | tar xvf -
# cd openssl-0.9.6
# ./config --prefix=/usr/local --openssldir=/usr/local/openssl
# find . -name "Makefile" -exec vi {} ;
modify CFLAGS line to omit -g option so binary will be smaller
# make
# make test
# make install
# cd /usr/local
# ln -s openssl ssl


sslwrap 설치하기

이 패키지는 지정된 TCP 포트로 들어오는 TCP 연결 세션을 받아서 SSL로 암호화하고 다른 TCP 포트로 넘겨주는 파이프 또는 터널의 역할을 한다. 소스 코드를 풀어서 컴파일해야 한다.


# gzip -dvc sslwrap.tar.gz | tar xvf -
# cd sslwrap206
# vi Makefile
uncomment EXTLIBS line
# make
# cp sslwrap /usr/local/sbin


cyrus-sasl 설치하기

이 패키지는 간단한 인증(simple authentication)을 제공한다. README 문서에 의하면 보안 계층(security layer)도 제공한다고 하는데, 방법에 대한 설명이 부족해서인지 사용하는 경우가 없다. sendmail 8.10.x 이상의 버전에서는 cyrus-sasl의 인증 모듈을 이용해서 보내기(outgoing) SMTP 시에 사용자 인증을 수행할 수 있다. 자신의 ID와 암호를 제공하고 서버로부터 인증을 받은 후에는 아무 곳으로나 자유롭게 메일을 보낼 수가 있다.

이 패키지를 설치하려면 openssl이 필요하다. 소스 코드를 풀어서 컴파일해야 한다.


# gzip -dvc cyrus-sasl-1.5.24.tar.gz | tar xvf -
# cd cyrus-sasl-1.5.24
# vi configure
change line number 1101 from "-g -O2" to "-O2"
# ./configure --with-dbpath=/usr/local/etc --enable-login
--with-rc4=/usr/local/ssl
# make
# make install
# cd /usr/lib
# ln -s /usr/local/lib/sasl sasl


마이크로소프트 Outlook과 Outlook Express는 (plain) LOGIN 메쏘드 밖에 지원하지 않기 때문에, --enable-login 옵션을 꼭 지정해야 한다. 그리고 sasl 라이브러리들은 관련 플러그인을 /usr/lib/sasl 디렉토리에서 찾기 때문에 제일 마지막에 심볼릭 링크를 걸어 주었다.

procmail 설치하기

이 패키지는 로컬 메일러(local mailer)이다. SMTP 서버는 메일을 수신하면 로컬 메일러를 호출하며, 로컬 메일러는 메일 주소의 골뱅이(@) 좌측의 이름에 맞는 사용자 메일함으로 메일을 저장하는 일을 한다. 이미 Solaris에는 로컬 메일러의 역할을 할 수 있는 /usr/lib/mail.local이 포함되어 있지만, procmail은 정규표현식(regular expression)에 기반한 강력한 필터링 기능을 제공한다. 이 기능을 이용하면 발신자 주소, 수신자 주소, 메일의 제목, 메일의 내용 등에 따라 수신할 것인지 거절할 것인지 다른 곳으로 포워딩할 것인지 등을 결정할 수 있으며 따라서 매우 유용하다.


# gzip -dvc procmail-3.15.1.tar.gz | tar xvf -
# cd procmail-3.15.1
# vi Makefile
change BASENAME= line from /usr to /usr/local
# make
I will temporarily use a testdirectory named _locktest
in the following directories:
/tmp .
If you would like to add any, please specify them below,
press return to continue:
/var/mail
I will temporarily use a test directory named _locktest
in the following directories:
/tmp . /var/mail
If you would like to add any, please specify them below,
press return to continue:
# make install-suid


제일 마지막에 make install 대신 make install-suid를 하는 이유는, procmail이 배달된 메일을 각 사용자의 메일함에 저장을 하기 위해서는 suid 권한이 필요하기 때문이다. 로컬 메일러로 procmail을 이용할 것이기 때문에 이 권한이 꼭 필요하다.

sendmail 설치하기

이 유명한 패키지를 제대로 설치하기 위해서는 수많은 README 문서와 웹 사이트들을 뒤져야 할 것이다. 바이너리를 만드는 것은 sendmail.cf 환경 파일을 만드는 것 보다는 오히려 쉽다. 환경 파일을 만드는 법은 나중에 설명하기로 하고, 우선 바이너리 파일부터 컴파일하여 설치해보자. 소스 코드를 풀어서 컴파일해야 한다.


# gzip -dvc sendmail.8.11.2.tar.gz | tar xvf -
# cd sendmail-8.11.2
# vi devtools/OS/SunOS.5.8
change line 5 ~ line 8 to
define(`confMAPDEF', `-DNDBM -DMAP_REGEX')
define(`confENVDEF', `-DSOLARIS=20800 -DSASL')
define(`confLIBS', `-lsocket -lnsl')
# vi devtools/Site/site.config.m4
define(`confCC', `gcc')
APPENDDEF(`confINCDIRS', `-I/usr/local/include')
APPENDDEF(`confLIBDIRS', `-R/usr/local/lib')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
# cd sendmail
# sh Build
# cd ../obj.SunOS.5.8.sun4/sendmail
# vi Makefile
modify line 210 (and 211) from /usr/share/man/cat to /usr/local/man/man
# make install
# cd /usr/lib
# ln -s ../local/lib/libsasl.so.7 libsasl.so.7


이전 버전(8.9.x)에 비해 바뀐 점은 SASL에 대한 옵션이 추가되었다는 점이다. 최신 버전(8.11.x)에서는 STARTTLS를 지원하여 SMTP 세션의 암호화를 제공한다고 하는데, 설치 방법이 너무 복잡할 뿐만 아니라 우리가 원하는 요구 사항은 이미 충족이 되므로 고려하지 않았다.

제일 마지막 명령행은 libsasl.so.7을 /usr/lib 위치에 심볼릭 링크를 걸어주는 것으로서, SUID 비트가 붙어있는 sendmail 바이너리가 이 라이브러리를 꼭 /usr/lib의 위치에서만 찾으려고 하기 때문이다.

이외에도 makemap 프로그램을 설치해야 한다. 이 프로그램은 /etc/mail/aliases나 /etc/mail/access 등의 각종 맵(map)을 생성하는 역할을 하며, sendmail 소스 패키지 속에 들어있다. 다시 sendmail 소스 코드 트리로 돌아가자.


# cd sendmail-8.11.2
# cd makemap
# sh Build
modify line 194 (and 195) from /usr/share/man/cat to /usr/local/man
# make install


solid-pop3d 설치하기

이 패키지는 POP3 서버 프로그램이다. 다른 POP3 서버 프로그램(예를 들어, Qualcomm popper 등)에 비해, 기능은 뒤지지 않으면서도 작고 가볍고 빠른 속도를 자랑한다. 먼저 spop3d라는 허구의 사용자를 만들어야 하고, 그런 후, 소스 코드를 풀어서 컴파일해야 한다.


# useradd -u 65000 -g 60001 -d /dev/null -s /bin/true spop3d
# gzip -dvc solid-pop3d-0.15.tar.gz | tar xvf -
# cd solid-pop3d-0.15
# ./configure --enable-pam --enable-last
# vi src/const.h
modify "/var/spool/mail/%s" to "/var/mail/%s"
# find . -name "Makefile" -exec vi {} ;
modify CFLAGS line to omit -g option so binary will be smaller
# make
# make install


washington-imapd 설치하기

IMAP4 프로토콜을 지원하는 IMAP 서버 프로그램의 종류는 다양하지만, 무료이면서도 기능이 다양한 것은 많지 않다. 그 중의 하나가 워싱톤 대학에서 만든 IMAP 서버로서, 회사에서 지금까지 계속 사용하면서 별 문제가 없다는 것을 확인하였다.

워싱톤 IMAP 서버 패키지에는 POP2 서버와 POP3 서버도 포함되어 있다. 이 POP3 서버는 사용 경험이 없기 때문에 뭐라고 언급하기 곤란하지만, 실행 파일의 크기는 solid-pop3보다 10배가 넘는다. 이 문서에서는 IMAP 서버만 설치한다.

확장자가 tar.Z이므로, uncompress를 먼저한 후에 tar를 풀거나, 또는 gzip에 딸려오는 zcat으로 풀어낸 후 컴파일을 해야 한다.


# zcat imap-2000c.tar.Z | tar xvf -
# cd imap-2000c
# vi src/osdep/unix/Makefile
find gso: line and modify -g -O2 to -O2
# make gso
# cp imapd/imapd /usr/local/sbin


위의 예에서, make gso는 GCC가 설치되어있는 Solaris의 경우에 선택하는 플랫폼이다. 다른 플랫폼이라면 최상위 Makefile에 적혀있는 주석문을 잘 읽어보자.
패키지 환경설정
인증서 만들기

세션을 암호화하려면 그에 관련된 인증서가 있어야 한다. 이 인증서는 sslwrap이 이용하며, 목적지 서버(장비)가 정말 원하는 목적지가 맞는지를 확인하는데 쓰인다. 오직 통신 세션의 암호화가 주목적이므로 개인키(private key)를 암호화할 필요는 없다. (만일, 개인키를 암호화한다면, 서비스가 호출될 때마다 개인키의 passphrase를 물어보게 될 것이다!)


# cd /usr/local/ssl/certs
# /usr/local/bin/openssl req -new -x509 -nodes -out server.pem -keyout
server.pem -days 1000
Using configuration from /usr/local/openssl/openssl.cnf
Generating a 1024 bit RSA private key
............................++++++
.................++++++
writing new private key to 'server.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) [AU]: Two letter code of your country
State or Province Name (full name) [Some-State]: Name of state
Locality Name (eg, city) []: Name of city
Organization Name (eg, company) : Name of your company
Organizational Unit Name (eg, section) []: Name of your department
Common Name (eg, YOUR name) []: servername.yourdomain.com
Email Address []: emailaddress@yourdomain.com


이제 server.pem이라는 이름의 파일이 생성되었다. 해시(hash) 값을 구해서, 그것을 파일명으로 삼는 심볼릭 링크를 만들어준다.


# cd /usr/local/ssl/certs
# ln -s server.pem `/usr/local/bin/openssl x509 -noout -hash <
server.pem`.0
# ls -l
lrwxrwxrwx user group e3cb79ae.0 -> server.pem
-rw-r--r-- user group server.pem


이 키는 단지 세션의 암호화를 목적으로 하는 암호화되지 않은 개인키로서, 서명도 자체 서명(self-signed) 되어 있으며, 유출이 되거나 하는 경우에도 별 위험이 없다. 하지만 가급적이면 다른 사용자가 읽지 못하도록 퍼미션을 설정하는 것이 좋다. 소유자는 /etc/inetd.conf 파일에서 sslwrap 부분을 호출하는 사용자의 ID로 맞춰주고 (4.3절 참고), 퍼미션은 600으로 설정하자.


# chmod 600 server.pem
# chown nobody server.pem


/etc/services 수정

이 파일에는 특정 서비스에 대한 TCP 포트를 등록한다. 파일의 제일 끝 부분에 암호화된 서비스를 위한 포트를 다음처럼 추가한다. Solaris 8의 /etc/services 파일에는 pop3와 imap이 각각 110과 143으로 이미 등록되어 있다.


#
# local specific services - added by mmung4u
#
imaps 993/tcp # imap4 over SSL
pop3s 995/tcp # pop3 over SSL
smtps 999/tcp # smtp over SSL


/etc/inetd.conf 수정

이 파일에는 수퍼 데몬 inetd가 호출할 서비스를 등록한다. 파일의 제일 끝 부분에 필요한 서비스들을 다음처럼 추가한다. 알다시피, pop3와 imap은 inetd가 띄우지만, sendmail은 inetd와 상관없는 독자적인 데몬이다.


#
# local specific services - added by mmung4u
#
pop3 stream tcp nowait root /usr/local/sbin/tcpd
/usr/local/sbin/spop3d
imap stream tcp nowait root /usr/local/sbin/tcpd
/usr/local/sbin/imapd
pop3s stream tcp nowait nobody /usr/local/sbin/sslwrap
sslwrap -cert /usr/local/ssl/certs/server.pem -port 110
imaps stream tcp nowait nobody /usr/local/sbin/sslwrap
sslwrap -cert /usr/local/ssl/certs/server.pem -port 143
smtps stream tcp nowait nobody /usr/local/sbin/sslwrap
sslwrap -cert /usr/local/ssl/certs/server.pem -port 587


제일 마지막 라인에서, smtps(tcp/999) 포트로 들어온 연결이 smtp(tcp/25)로 전달되는 것이 아니라 tcp/587 포트로 파이프 된다는 점에 주목하자. (새로운 버전의 sendmail은 25번 포트와 587 포트를 모두 이용한다.) 파일을 다 수정한 후에는 inetd 데몬을 재시작 해야 한다.


# ps -ef | grep inetd
# kill -HUP inetd_process_id


/usr/lib/sasl 수정

SASL을 이용할 프로그램들 각각에 대한 설정 파일을 /usr/lib/sasl 디렉토리에 생성해 주어야 한다. 파일명의 제일 첫 문자는 대문자로 시작해야 한다.


# cd /usr/lib/sasl
# vi Sendmail.cf
pwcheck_method: PAM


위처럼 달랑 한 줄이다. SASL 패키지의 README 파일에 의하면, SASL이 암호를 검사하는 방법으로서 pam, shadow, sasldb, passwd 등이 있다. 복잡한 방법의 암호 검사를 지원하고 싶다면 sasldb를 권장하지만, MS Outlook은 단순한 LOGIN 메커니즘을 이용하기 때문에 PAM을 선택하였다.

실행과 테스트
sendmail의 실행은 root의 권한으로 해야 한다. 옵션 중에서 -bd는 백그라운드 데몬(daemon)으로 실행하라는 뜻이며, -q30m은 큐에 쌓인 메일들을 30분마다 처리하라는 의미이다. (시스템이 부팅될 때는 /etc/rc2.d에 있는 S88sendmail 스크립트에 의해 자동으로 백그라운드 데몬 모드로 실행될 것이다.)


# /usr/lib/sendmail -bd -q30m


SMTP 연결이 제대로 되는지 보기 위해 telnet을 이용하여 25번 포트와 587번 포트를 확인한다.


# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server.domain.com ESMTP Sendmail 8.11.2/8.11.2; .....
ehlo a
250-server.domain.com Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250-AUTH LOGIN PLAIN
250 HELP
quit
221 2.0.0 server.domain.com closing connection
Connection closed by foreign host.

# telnet 127.0.0.1 587
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server.domain.com ESMTP Sendmail 8.11.2/8.11.2; .....
ehlo a
250-server.domain.com Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250-AUTH LOGIN PLAIN
250 HELP
quit
221 2.0.0 server.domain.com closing connection
Connection closed by foreign host.


위에서 볼 수 있듯이, 연결이 된 후에 ehlo a 명령을 입력하니까 AUTH LOGIN PLAIN 출력이 나타났다. 이 메시지가 출력되면 SMTP 인증을 제공하도록 설정이 잘 되어 있다는 것을 확인한 것이다.

POP3와 IMAP의 동작도 확인을 해보자. 역시 telnet을 이용해서 110번 포트와 143번 포트를 각각 연결해본다.


# telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
+OK Solid POP3 server ready
quit
+OK session ended
Connection closed by foreign host.

# telnet 127.0.0.1 143
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
* OK [CAPABILITY IMAP4 IMAP4REV1 LOGIN-REFERRALS AUTH=LOGIN] localhost
IMAP4rev1 2000.287 at Wed, 14 Feb 2001 11:06:20 -0800 (PST)
quit logout
* BYE server.domain.com IMAP4rev1 server terminating connection
quit OK LOGOUT completed
Connection closed by foreign host.


이제 POP3와 IMAP의 동작도 확인하였으므로, sslwrap으로 감싸주는 포트(993, 995, 999)의 동작도 확인을 하자. 연결이 된 후, 아무 글자들이나 입력하고 엔터를 치면 SSL 에러가 출력되어야 한다.


# telnet 127.0.0.1 993 (또는 995나 999)
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
jksadjfk
asjdkf
6854:error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown
protocol:s23_srvr.c:565:
Connection closed by foreign host.


이제 Outlook이나 Outlook Express를 구동한다. 상세한 설정 단계는 다음과 같다.


"도구" 메뉴의 "계정" 메뉴를 선택.
우측의 "추가" ⇒ "메일"을 선택.
"표시 이름"에 자신의 이름을 입력하고 "다음"을 클릭.
자신의 "전자 메일 주소"를 입력하고 "다음"을 클릭.
"받는 메일 서버 종류"는 POP3로 지정. 만일 IMAP 사용자라면 IMAP을 선택. "받는 메일 서버" 항목에 메일 서버의 완전한 호스트명을 적어줌. "보내는 메일 서버" 항목에 메일 서버의 완전한 호스트명을 적어줌. 그리고 "다음"을 클릭.
"계정 이름"에 자신의 ID를 입력하고, "암호"에 자신의 암호를 입력함. 만일 암호를 저장해 놓고 싶지 않으면 비워도 무방함. 그리고 "다음"을 클릭.
"설정이 끝났습니다" 메시지를 본 후에 "마침"을 클릭.
방금 만들어진 항목을 더블 클릭함.
"서버" 탭을 선택한 후, 하단 "보내는 메일 서버"의 "인증 필요"에 체크.
"연결" 탭의 항목은 "LAN"으로 지정.
"고급" 탭으로 간 후, "보내는 메일"의 "보안 연결 필요" 및 "받는 메일"의 "보안 연결 필요"에 모두 체크함. 포트 번호는 "보내기(SMTP)"에 "999", "받기(POP3)"에 "995"를 입력함. 단, IMAP 사용자라면 "받기(IMAP)"에 "993"을 입력함.
"확인"을 누르고 끝.

이제부터는 Outlook/OE를 이용해서 메일을 보낼 때, 사용자명과 암호를 물어볼 것이다. 인증을 받고 나면 소스 IP 주소에 상관없이 아무 곳으로나 메일을 발송할 수가 있다.

만일 동작이 원만하지 못하면, sendmail.cf의 LOG level을 14 이상으로 증가 시키고 sendmail을 다시 시작한다. 일반적인 로그 레벨은 9이다. 로그 메시지는 (로그의 종류에 따라 다르지만) /var/adm/messages 또는 /var/log/syslog에 쌓인다.


# vi /etc/mail/sendmail.cf
O LogLevel=9 - O LogLevel=14
# ps -ef | grep sendmail
# kill -HUP sendmail_process_id

# tail /var/adm/messages
Feb 13 16:05:59 server sendmail[6744]: [ID 171004 auth.error]
unable to dlopen /usr/lib/sasl/libdigestmd5.so: ld.so.1:
/usr/lib/sendmail: fatal: relocation error: file
/usr/lib/sasl/libdigestmd5.so: symbol des_ecb_encrypt:
referenced symbol not found
Feb 13 16:05:59 server sendmail[6744]: [ID 847733 auth.error]
unable to dlopen /usr/lib/sasl/libgssapiv2.so: ld.so.1:
/usr/lib/sendmail: fatal: relocation error: file
/usr/lib/sasl/libgssapiv2.so: symbol
GSS_C_NT_HOSTBASED_SERVICE: referenced symbol not found
# tail /var/log/syslog
Feb 13 13:18:06 fusion01 sendmail[3433]: [ID 702911 mail.info]
starting daemon (8.11.2): SMTP+queueing@00:30:00


/var/adm/messages 파일을 보니, sendmail을 처음 시작할 때, 라이브러리(digest-md5와 gssapi)가 없다는 에러가 발생하였다. 아마 sendmail에 suid 비트가 설정되어 있어서 라이브러리 검색 경로를 제대로 찾지 못하기 때문이 아닐까 생각한다. 그래도 동작에는 아무런 문제가 없다.

Oulook이나 OE를 이용하여 사용자 인증을 받은 후 메일을 발송하면 다음과 같은 로그가 /var/log/syslog에 남는다. 굵은 글자들을 눈여겨 보자. LOGIN 메커니즘으로 사용자 인증을 받았다는 것을 말한다.


Feb 13 18:17:52 server sendmail[6800]: [ID 801593 mail.info]
f1E2HqG06800: from=, size=82, class=0,
nrcpts=1, msgid=<000601c0962c$567353e0$7f00a8c0@tp600x>, proto=ESMTP,
daemon=MSA, mech=LOGIN, relay=localhost [127.0.0.1]
Feb 13 18:19:41 server sendmail[6800]: [ID 801593 mail.info]
f1E2HqG06800: to=,
ctladdr= (2003/10), delay=00:06:07,
xdelay=00:06:06, mailer=esmtp, pri=120821, relay=mx4.dacom.co.kr.
[203.248.240.62], dsn=2.0.0, stat=Sent (f1E2JOT02499 Message accepted
for delivery)


sendmail.cf 만들기
Solaris에 기본적으로 제공되는 sendmail.cf 파일은 새로 컴파일한 sendmail과 함께 사용할 수가 없다. 이것은 너무나 방대하고 심오한 내용이기 때문에 따로 빼내서 설명한다.

일단 sendmail.cf를 만든 후에도, 네트웍의 상황이 바뀌거나 새로운 규칙이 필요하다거나 하여 sendmail.cf를 새로 만들려고 하면 cf 내의 파일들이 필요하기 때문에, 아예 sendmail 소스 패키지 내에 있는 서브 디렉토리 cf를 /etc/mail로 복사한다.


# cd ...sendmail-8.11.2
# find cf | cpio -pdmv /etc/mail


이제 /etc/mail로 이동해서 sendmail.cf를 만들자. 이 파일은 편집기로 직접 작성하기에는 너무나 복잡하며, 대신에 mc 파일을 만든 후 m4 프로그램을 통해 생성한다.


# cd /etc/mail
# vi cf/m4/cf.m4
add following line before ifdef statement
define('_CF_DIR_','/etc/mail/cf/')dnl


위 라인은 cf 디렉토리를 /etc/mail 밑으로 옮겨왔기 때문에 필요한 것이다. 이제 본인의 사이트에 맞는 mc 파일을 만들도록 한다.


# vi config.mc
include('cf/m4/cf.m4')
VERSIONID('$Id: Secure Roaming Mail 02/15/2001 mmung4u Exp $')
OSTYPE(solaris8)
define('confPRIVACY_FLAGS','authwarnings,noexpn,novrfy')dnl
define('DATABASE_MAP_TYPE','dbm')dnl
FEATURE(nouucp,'reject')dnl
FEATURE(always_add_domain)dnl
FEATURE(local_procmail,'/usr/local/bin/procmail')dnl
FEATURE(use_cw_file)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_AS('yourdomain.com')dnl
FEATURE(access_db)dnl
MAILER(local)dnl
MAILER(smtp)dnl
TRUST_AUTH_MECH('LOGIN PLAIN CRAM-MD5')dnl
define('confAUTH_MECHANISMS','LOGIN PLAIN CRAM-MD5')dnl


복잡해 보이는가? mc 파일의 각 라인이 의미하는 것은 다음과 같다. 원하는 사양에 따라 더 많은 FEATURE를 추가할 수도 있지만, 위의 예에서는 아주 기본적인(?) 것만을 설정하였다.

include('cf/m4/cf.m4')
sendmail.cf를 만들기 위해 꼭 필요한 (일종의) 헤더 파일인 cf.m4를 포함 시킨다.

VERSIONID(…)
언제 누가 어떤 목적으로 이 m4 파일을 만들었는지 또는 고쳤는지를 기록한다.

OSTYPE(solaris8)
운영체제에 맞는 종류를 적어주면 된다. 종류 목록은 cf/ostype 참조.

define('confPRIVACY_FLAGS','authwarnings,noexpn,novrfy')dnl
프라이버시 플랙 지정. TCP/25번 포트로 telnet하여 expn 명령을 내리면 메일링 리스트의 개별 멤버들의 메일 주소를 알아낼 수가 있는데, 이를 금지한다.

define('DATABASE_MAP_TYPE','dbm')dnl
데이터베이스 맵(map)의 종류를 dbm으로 선언한다. 이 종류는 Solaris가 기본적으로 지원하는 형식이다. 만일 버클리 NewDB를 설치하면 이외에도hash와 btree를 이용 가능하다. sendmail이 참조하는 파일 중에서 어떤 것(예: /etc/mail/local-host-names)들은 텍스트 형태로 존재하지만, 어떤 것들은 데이터베이스 맵의 형태로 존재하는데, 예를 들어, /etc/mail/aliases, /etc/mail/access 등이 있다.

FEATURE(nouucp,'reject')dnl
UUCP 프로토콜 메일 주소는 취급을 안 한다고 선언한다.

FEATURE(always_add_domain)dnl
발신자의 메일 주소에 항상 도메인 네임을 붙인다. 심지어 로컬 사용자가 로컬 사용자에게 메일을 보내더라도 발신자의 메일 주소에는 도메인 네임이 붙게 된다.

FEATURE(local_procmail,'/usr/local/bin/procmail')dnl
로컬 메일러, 즉, MTA(sendmail)가 수신한 메일은 로컬 메일러에게 전달되어 수신자 ID에 따라 그 사용자의 메일함으로 분배된다. Solaris가 제공하는 로컬 메일러보다 훨씬 기능이 뛰어난 procmail을 로컬 메일러로 사용하겠다고 선언한 것이다.

FEATURE(use_cw_file)dnl
/etc/mail/local-host-names 파일을 이용하겠다고 선언한다. 수신자 메일 주소의 골뱅이(@) 뒷부분(도메인)이 /etc/mail/local-host-names 파일 속에 등록되어 있는 경우에, 메일 서버는 그 메일을 접수한다. 그렇지 않으면 자신이 받을 메일이 아니라고 간주하여 반송하거나 다른 곳으로 포워딩한다. 이전 버전의 sendmail에서 /etc/mail/sendmail.cw 파일이다.

FEATURE(masquerade_entire_domain)dnl
메일 서버의 실제 호스트명이 무엇이건간에 발신자 메일 주소의 골뱅이(@) 뒷부분(도메인)을 다른 이름으로 바꿔치기 한다. 아래의 MASQUERADE_AS와 짝을 이룬다.

MASQUERADE_AS('yourdomain.com')dnl
메일 서버의 실제 호스트명이 server.yourdomain.com이라고 할 때, 발신자 메일 주소는 username@server.yourdomain.com이 되는 대신에 username@yourdomain.com이 된다.

FEATURE(access_db)dnl
릴레이 허용/금지, 스패머 주소 등록 등을 위한 파일로서, /etc/mail/access에 위치하고, 데이터베이스 맵 형태로 존재한다. 이제는 SMTP AUTH 기능이 지원되기 때문에 그 역할이 많이 줄었다고 여겨진다. 자세한 이용법은 cf/README의 "Anti-Spam" 부분을 참고하자.

MAILER(local)dnl
로컬 메일러를 선언하는 부분이다. 필수적이다.

MAILER(smtp)dnl
SMTP 메일러를 선언하는 부분이다. 필수적이다.

TRUST_AUTH_MECH('LOGIN PLAIN CRAM-MD5')dnl
SMTP AUTH(인증) 메커니즘으로 무엇과 무엇을 이용하겠다고 나열하는 부분이다. 아래의 define 구문과 짝을 이룬다.

define('confAUTH_MECHANISMS','LOGIN PLAIN CRAM-MD5')dnl
SMTP AUTH 메커니즘은 이외에도 DIGEST-MD5, GSSAPI 등이 있으나, 이 문서에서는 LOGIN 메커니즘 만을 지원하는 MS Outlook이나 Outlook Express 만을 지원할 것이기 때문에 간단하게 정의하였다.

다음으로, m4 프로그램을 이용하여 sendmail.cf를 만든다.


# m4 cf/m4/cf.m4 config.mc > sendmail.cf


이제 sendmail.cf 파일이 생겼다. sendmail을 컴파일 할 때 IP v6를 지원하도록 정의하지 않았기 때문에 IP v6에 대한 선언 부분을 주석 처리해야 한다.


# vi sendmail.cf
comment out the line O DaemonPortOptions=Name=MTA-IPv6, Family=inet6


이외에도 /etc/mail에 존재해야 하는 파일이 몇 가지 더 있다. 예를 들어, access, aliases, local-host-names, relay-domains 파일이 있다. 이 중에서 access 파일은 makemap 프로그램을 이용하여 데이터베이스 맵 형태로 바꿔 주어야 한다.


# vi access
127.0.0.1 OK
@spam.com REJECT
# makemap dbm access < access
# vi aliases
root: sysadmin
sysadmin: mmung4u, kildong
# newaliases
/etc/mail/aliases: 4 aliases, longest 22 bytes, 78 bytes total
# vi local-host-names
server
server.domain.com
mail.domain.com
domain.com
# vi relay-domains
domain.com


보다시피, aliases 파일은 데이터베이스 맵 형태로 존재해야 하지만 makemap 프로그램으로 처리하는 것이 아니라 newaliases 명령어로 처리해야 한다.

기타
세션이 연결되는 상황이나 데이터가 이동하는 상황을 패킷 스니퍼 소프트웨어나 Solaris에서 제공하는 snoop을 이용해서 테스트할 수 있다.


# snoop -o /tmp/snoop.out
Using device /dev/hme (promiscuous mode)
36 ^C
# snoop -r -v -i /tmp/snoop.out | more


SSL 인증서를 만들 때(4.1절 인증서 만들기 참조), "Common Name" 항목에 기입하는 호스트명은 메일 서버의 공식 이름과 같도록 입력해야 한다.

Common Name (eg, YOUR name) []: servername.yourdomain.com

예를 들어, 이 항목에 server.domain.com이라고 입력하여 인증서를 만든 후, Outlook이나 OE에서 "받는 메일 서버"나 "보내는 메일 서버"의 이름을 mail.domain.com이라고 설정하면, 서버에 연결할 때마다 "인증서의 서버 이름이 일치하지 않음" 경고 메시지를 만나게 된다.

보안을 위해서, Outlook/OE의 사용자 계정 설정 시에 "암호 저장함"을 선택하지 않는 것이 바람직하다.

지금까지 구축한 메일 시스템은 다음과 같은 장점을 제공한다.


SMTP 인증을 제공하여, 사무실 이외의 지역에서도 ID와 암호만 있으면 소속 메일 서버를 계속 "outgoing SMTP 서버"로 이용할 수 있다.
POP3와 IMAP을 모두 제공하므로 골라서 사용할 수 있다.
SMTP 인증, POP3, 그리고 IMAP 연결 시에는 사용자의 ID와 암호가 전송되는데, 이것을 다른 사람이 도청할 수 없도록 암호화한다.
인터넷에서 쉽게 구할 수 있는 무료 소프트웨어를 이용하였다.

이 메일 시스템이 제공하지 않는 것들은 다음과 같다.


SMTP 서버 간의 암호화는 지원하지 않는다. 메일 서버 간의 SMTP 세션은 ID와 암호가 이용되지 않는다. 메일의 내용(message body)을 보호하고 싶은 경우라면 PGP 등의 솔루션을 이용할 수 있다.
Virtual mail hosting이나 virtual user 등의 기능은 지원하지 않는다. 이 기능은 sendmail.cf 만드는 법을 잘 숙지하면 지원하도록 만들 수 있다.
STARTTLS를 지원하지 않는다. 이것을 이용하면 SMTP 세션을 암호화할 수 있다고 하는데, sslwrap을 이용해서 원하는 요구 사항은 만족 시킬 수 있기 때문에 신경쓰지 않았다.
LDAP 프로토콜을 지원하지 않는다.
IP v6를 지원하지 않는다.

이 문서에서 설명한 대부분의 내용은 각 패키지에 딸려 있는 README 파일들을 읽고 알아낸 내용이다. (무려 일주일이나!) 더욱 자세한 정보가 필요하면 직접 차근히 읽어보기 바란다. 이 문서는 자유롭게 읽고 응용하고 무료로 배포할 수 있으나 상업적인 목적으로는 이용할 수 없다. 어떤 경우에라도 저자의 이름을 반드시 명시해야 한다.

Trackback 2 Comment 1
  1. 2009.04.17 19:56 address edit & del reply

    비밀댓글입니다