본문 바로가기

IT/Mail

qmail이란

코리아서버센터 : http://www.koreaservercenter.com

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. 다양한 애드언과 패치
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 홈페이지에서
찾아 볼 수 있으며 qmail과 MySQL을 연동한 한글 웹메일 프로젝트도 진행중입니다.
qmail 메일링 리스트의 주소는 qmailannounce-subscribe(at)list.cr.yp.to 입니다.

6. qmail 설치
qmail 을 설치할 때 구성할 수 있는 경우의 수는 매우 다양합니다.
어떤 인증 모듈을 사용하는지, IMAP 지원 여부, 스팸 필터링 기능 지원 여부, qmailAdmin 지원 여부,
Webmail 지원 여부 등등에 따라 수많은 경우가 있을 수 있습니다.
큐메일은 혼자서 작동하지 않기 때문에 다른 데몬과 연계해서 실행을 해야만 합니다.
큐메일의 실행은 xinetd와 tcpserver로 할 수 있으나 필자는 보안과 속도면에서 큐메일과 잘 맞는
tcpserver로 구축을 하도록 하겠습니다.(CentOS 4.4 기반)

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@lug ~]# mkdir /usr/local/src/qmail
[root@lug ~]# cd /usr/local/src/qmail

[root@lug qmail]# lftpget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
[root@lug qmail]# tar xvzf ucspi-tcp-0.88.tar.gz
[root@lug qmail]# cd ucspi-tcp-0.88

필자는 gcc버전이 3.4.5 이므로 파일의 최상단에 #include <errno.h>를 추가해 줍니다.
[root@lug ucspi-tcp-0.88]# vi error.h
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H
...
...
[root@lug ucspi-tcp-0.88]# make
[root@lug ucspi-tcp-0.88]# make setup check


2. daemontools 설치 (최신버전 : http://cr.yp.to/daemontools/install.html)
[root@lug ucspi-tcp-0.88]# cd ..

[root@lug qmail]# lftpget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
[root@lug qmail]# mkdir /package
[root@lug qmail]# chmod 1755 /package/
[root@lug qmail]# tar xvzf daemontools-0.76.tar.gz -C /package/
[root@lug qmail]# cd /package/admin/daemontools-0.76/

필자는 gcc버전이 3.4.5 이므로 파일의 최상단에 #include <errno.h>를 추가해 줍니다.
[root@lug daemontools-0.76]# vi src/error.h
/* Public domain. */
#include <errno.h>
#ifndef ERROR_H
#define ERROR_H
...
...

[root@lug daemontools-0.76]# 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@lug admin]# cd /usr/local/src/qmail/
[root@lug qmail]# lftpget http://cr.yp.to/software/qmail-1.03.tar.gz
[root@lug qmail]# lftpget http://people.kldp.org/~eunjea/qmail/patch/qmail-ej-cocktail-14.tar.gz
[root@lug qmail]# tar xvzf qmail-1.03.tar.gz
[root@lug qmail]# tar xvzf qmail-ej-cocktail-14.tar.gz
[root@lug qmail]# cd qmail-1.03
[root@lug qmail-1.03]# 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이 나온다면 큐메일 바닐라 소스가 아닌 것입니다.
반드시 큐메일 바닐라 소스를 이용하시기 바랍니다.

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

- concurrency limit 파일 수정
큐메일 설치작업을 하기전 수정할 소스가 있습니다.
바로 위에서 패치했던 파일중 conf-spawn 파일 입니다.
이 파일의 기본값은 1000 입니다만, 각 OS에 따라서 설정값이 다릅니다.
필자는 레드헷을 이용하고 있기 때문에 1000을 509로 수정하도록 하겠습니다.
[root@lug qmail-1.03]# 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@lug qmail-1.03]# groupadd -r nofiles
[root@lug qmail-1.03]# useradd -r -g nofiles -d /var/qmail/alias alias
[root@lug qmail-1.03]# useradd -r -g nofiles -d /var/qmail qmaild
[root@lug qmail-1.03]# useradd -r -g nofiles -d /var/qmail qmaill
[root@lug qmail-1.03]# useradd -r -g nofiles -d /var/qmail qmailp
[root@lug qmail-1.03]# groupadd -r qmail
[root@lug qmail-1.03]# useradd -r -g qmail -d /var/qmail qmailq
[root@lug qmail-1.03]# useradd -r -g qmail -d /var/qmail qmailr
[root@lug qmail-1.03]# useradd -r -g qmail -d /var/qmail qmails


- 큐메일 설치
[root@lug qmail-1.03]# make
...
...
| sed s}QMAIL}"`head -1 conf-qmail`"}g
> binm3
chmod 755 binm3
cat binm3+df.sh
| sed s}QMAIL}"`head -1 conf-qmail`"}g
> binm3+df
chmod 755 binm3+df


[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...
100.100.100.100: 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@lug qmail-1.03]# ./config
Your hostname is lug.or.kr.
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@lug qmail-1.03]# cat /etc/resolv.conf
search mail.domain.com
nameserver 168.126.63.1
nameserver 164.124.101.2

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

[root@lug qmail-1.03]# 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
100.100.100.100 mail.domain.com mail

[root@lug qmail-1.03]# cat /etc/sysconfig/network
...
HOSTNAME=mail.domain.com
...

※ 호스트네임 부분 또한 반드시 있어야 됩니다.
만약 위의 모든 세팅이 정상적인데도 config가 제대로 되지 않는다면 아래와 같이 해주면 됩니다.
[root@lug qmail-1.03]# ./config-fast lug.or.kr
Your fully qualified host name is lug.or.kr.
Putting lug.or.kr into control/me...
Putting or.kr into control/defaultdomain...
Putting or.kr into control/plusdomain...
Putting lug.or.kr into control/locals...
Putting lug.or.kr into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to lug.or.kr.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!


- 큐메일 설치 확인
큐메일이 정상적으로 설치되었다면 /var/qmail/control/ 디렉토리에 각종 설정파일이 생성이 됩니다.
[root@lug qmail-1.03]# 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@lug qmail-1.03]# vi /var/qmail/control/defaultdomain
lug.or.kr

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

[root@lug qmail-1.03]# vi /var/qmail/control/me
mail.lug.or.kr

[root@lug qmail-1.03]# vi /var/qmail/control/plusdomain
mail.lug.or.kr

[root@lug qmail-1.03]# cat /dev/null > /var/qmail/control/rcpthosts


- 큐메일 데몬을 위한 디렉토리와 스크립트 파일 생성
[root@lug qmail-1.03]# vi /var/qmail/rc
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH"
qmail-start ./Maildir/

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

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

[root@lug qmail-1.03]# 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@lug qmail-1.03]# 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 10000000 /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@lug qmail-1.03]# 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@lug qmail-1.03]# chmod 755 /var/qmail/supervise/qmail-send/run
[root@lug qmail-1.03]# chmod 755 /var/qmail/supervise/qmail-send/log/run
[root@lug qmail-1.03]# chmod 755 /var/qmail/supervise/qmail-smtpd/run
[root@lug qmail-1.03]# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run


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


- Alias 설정
큐메일은 root로 메일을 배달하지 않으므로 반드시 알리아즈를 만들어줘야 합니다.
그리고 postmaster, mailer-daemon으로 오는 메일도 알리아즈 해서 사용하면 편리하겠죠.
아래는 eve@lug.or.kr" target=_blank>eve@lug.or.kr 이란 주소로 알리아즈 시킨 것입니다.
[root@lug qmail-1.03]# echo eve@lug.or.kr" target=_blank>eve@lug.or.kr > /var/qmail/alias/.qmail-root
[root@lug qmail-1.03]# echo eve@lug.or.kr" target=_blank>eve@lug.or.kr > /var/qmail/alias/.qmail-postmaster
[root@lug qmail-1.03]# echo eve@lug.or.kr" target=_blank>eve@lug.or.kr > /var/qmail/alias/.qmail-mailer-daemon
[root@lug qmail-1.03]# chmod 644 /var/qmail/alias/*


- qmail 바이너리 파일 소프트 링크
MTA를 필요로 하는 많은 프로그램이 아직까지 sendmail를 사용하고 있기 때문에
qmail 바이너리 파일을 sendmail로 링크해주는것이 좋습니다.
[root@lug qmail-1.03]# ln -s /var/qmail/bin/sendmail /usr/lib
[root@lug qmail-1.03]# ln -s /var/qmail/bin/sendmail /usr/sbin


- qmail 시작
[root@lug qmail-1.03]# ln -s /var/qmail/supervise/qmail-send /service/
[root@lug qmail-1.03]# ln -s /var/qmail/supervise/qmail-smtpd /service/
이 강좌는 여러가지 vpopmail 운영방법중 vpopmail의 roaming을 이용하는 방법 입니다.

1. 유저, 그룹 추가
vpopmail 운영을 위한 유저와 그룹을 만들어주어야 됩니다.
※ 아래 -r 옵션은 시스템 계정(uid 500미만)으로 유저를 생성하겠다는 의미 입니다.
[root@lug qmail-1.03]# groupadd -r vchkpw
[root@lug qmail-1.03]# useradd -r -g vchkpw vpopmail
[root@lug qmail-1.03]# mkdir -p /home/vpopmail/etc/
[root@lug qmail-1.03]# chmod 755 /home/vpopmail

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

2. vpopmail 설치 (최신버전 : http://sourceforge.net/projects/vpopmail/)
[root@lug qmail-1.03]# cd ..
[root@lug qmail]# chmod 777 /home/vpopmail/etc/
[root@lug qmail]# touch /home/vpopmail/etc/tcp.smtp
[root@lug qmail]# lftpget http://nchc.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.17.tar.gz
[root@lug qmail]# tar xvzf vpopmail-5.4.17.tar.gz
[root@lug qmail]# cd vpopmail-5.4.17
[root@lug vpopmail-5.4.17]# ./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

vpopmail 5.4.17
Current settings
---------------------------------------
vpopmail directory = /home/vpopmail
domains directory = /home/vpopmail/domains
uid = 107
gid = 103
roaming users = ON --enable-roaming-users
tcpserver file = /home/vpopmail/etc/tcp.smtp
open_smtp file = /home/vpopmail/etc/open-smtp
rebuild tcpserver file = ON --enable-rebuild-tcpserver-file (default)
password learning = OFF --disable-learn-passwords (default)
md5 passwords = ON --enable-md5-passwords (default)
file locking = ON --enable-file-locking (default)
vdelivermail fsync = OFF --disable-file-sync (default)
make seekable = ON --enable-make-seekable (default)
clear passwd = ON --enable-clear-passwd (default)
user dir hashing = ON --enable-users-big-dir (default)
address extensions = OFF --disable-qmail-ext (default)
ip alias = OFF --disable-ip-alias-domains (default)
auth module = cdb --enable-auth-module=cdb (default)
auth inc = -Icdb
auth lib =
system passwords = OFF --disable-passwd (default)
pop syslog = show only failed attempts
--enable-logging=e (default)
auth logging = ON --enable-auth-logging (default)

[root@lug vpopmail-5.4.17]#

[root@lug vpopmail-5.4.17]# make
[root@lug vpopmail-5.4.17]# make install-strip

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

3. 기본 도메인 설정 및 SMTP 릴레이 설정
vpopmail 5.2.4 버전부터는 default-domain이 설치옵션에서 사라지고 파일로 적용되고 있습니다.
default-domain의 파일은 ~/vpopmail/etc/defaultdomain 입니다.
[root@lug vpopmail-5.4.17]# vi /home/vpopmail/etc/defaultdomain
lug.or.kr
[root@lug vpopmail-5.4.17]# chown vpopmail.vchkpw /home/vpopmail/etc/defaultdomain
[root@lug vpopmail-5.4.17]# vi /home/vpopmail/etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
100.100.100.100:allow,RELAYCLIENT=""
[root@lug vpopmail-5.4.17]# /home/vpopmail/bin/clearopensmtp

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

4. crontab 설정
clearopensmtp를 자동으로 한번씩 실행해주기 위해 crond 데몬을 이용 합니다.
필자는 15분에 한번씩 실행되도록 설정하겠습니다.
[root@lug vpopmail-5.4.17]# crontab -e
*/15 * * * * /home/vpopmail/bin/clearopensmtp


5. qmail smtp 스크립트 변경
tcp.smtp 파일이 변경되었으므로 qmail을 설치할 때 작성한 run script-x-x중 하나를 수정해줘야 됩니다.
[root@lug vpopmail-5.4.17]# 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 10000000 /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@lug vpopmail-5.4.17]# mkdir /var/qmail/supervise/vpop
[root@lug vpopmail-5.4.17]# vi /var/qmail/supervise/vpop/run
#!/bin/sh
VPOP_UID=`id -u vpopmail`
VPOP_GID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 10000000 tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 /var/qmail/bin/qmail-popup lug.or.kr /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

[root@lug vpopmail-5.4.17]# chmod 755 /var/qmail/supervise/vpop/run


7. 도메인과 메일계정 생성
[root@lug vpopmail-5.4.17]# /home/vpopmail/bin/vadddomain lug.or.kr
Please enter password for postmaster:
enter password again:
[root@lug vpopmail-5.4.17]# /home/vpopmail/bin/vadduser test@lug.or.kr" target=_blank>test@lug.or.kr
Please enter password for test@lug.or.kr" target=_blank>test@lug.or.kr:
enter password again:

※ vadddomain실행시 나오는 패스워드는 qmailadmin에서 사용할 비밀번호 입니다.
또한 vadddomain [도메인] [postmaster 비밀번호] 로도 사용가능합니다.
vadduser 사용법은 vadduser [메일계정] [비밀번호] 입니다.
드디어 qmail과 vpopmail 설치가 모두 완료되었습니다.
한마디로 메일서버 구축이 완료되었단 말이겠지요 ^^*
이제 메일서버를 시작하고 정상적으로 접속이 되는지 확인을 해보도록 하겠습니다.

Qmail 시동스크립트를 위의 파일첨부에서 다운로드하셔서 아래 파일을 생성하세요.
vi /etc/init.d/qmail 에 qmail.txt 파일내용을 복사한다.

chmod 744 /etc/init.d/qmail
chkconfig --add qmail
chkconfig --level 345 qmail on


1. 서버 시작하기
[root@localhost]# /etc/rc.d/init.d/qmail start
Starting qmail


2. smtp 확인
smtp 확인은 telnet으로 하면 되며 smtp 포트인 25번으로 접속을 하시면 됩니다.
아래와 같이 나온다면 정상적으로 smtp 서버가 구축된 것입니다.
[root@lug vpopmail-5.4.17]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.lug.or.kr ESMTP
quit (빠져나오기 위해 직접 타이핑한 것임)
221 mail.lug.or.kr
Connection closed by foreign host.

※ 정상적으로 smtp 서버가 구축이 되지 않은 경우
[root@lug vpopmail-5.4.17]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Connection closed by foreign host.

만약 위처럼 정상적으로 접속이 안되는 경우에는 qmail script-x-x의 softlimit 값을 늘려줘 보시기 바랍니다.
[root@lug vpopmail-5.4.17]# 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 10000000 /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@lug vpopmail-5.4.17]# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK <14604.1170592629@lug.or.kr" target=_blank>14604.1170592629@lug.or.kr>
quit (빠져나오기 위해 직접 타이핑한 것임)
+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-x-x의 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 50000000
tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 /var/qmail/bin/qmail-popup lug.or.kr /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1


====================================================================
아래 코멘트에 적혀진 qmail 시작 스크립트를 /etc/init.d/qmail 에 생성한후 qmail 을 재시작한다.(지금은 vpop 관련 에러 프로세서가 생겨도 무시한다)

[root@localhost]# /etc/rc.d/init.d/qmail restart
Restarting qmail:
* Stopping qmail-smtpd.
* Sending qmail-send SIGTERM and restarting.
* Restarting qmail-smtpd.

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

[pstree 명령어 사용으로 본 qmail 의 프로세서 트리]

├─svscanboot─┬─readproctitle
│ └─svscan─┬─supervise───qmail-send─┬─qmail-clean
│ │ ├─qmail-lspawn
│ │ └─qmail-rspawn
│ ├─2*[supervise───multilog]
│ └─2*[supervise───tcpserver]


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

1. autorespond 설치 (최신버전 : http://www.inter7.com/?page=software)
autorespond는 BradDameron에 의해 추가된 패키지 입니다.
ezmlm에서 필요로 하는 프로그램이므로 설치해줍니다.
[root@lug qmail]# lftpget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz
[root@lug qmail]# tar xvzf autorespond-2.0.5.tar.gz
[root@lug qmail]# cd autorespond-2.0.5
[root@lug autorespond-2.0.5]# make
gcc -O2 -Wall -g autorespond.c -o autorespond
[root@lug autorespond-2.0.5]# 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@lug autorespond-2.0.5]# cd ..
[root@lug qmail]# lftpget http://www.inter7.com/devel/ezmlm-0.53-idx-0.41.tar.gz
[root@lug qmail]# tar xvzf ezmlm-0.53-idx-0.41.tar.gz
[root@lug qmail]# cd ezmlm-0.53-idx-0.41
[root@lug ezmlm-0.53-idx-0.41]# make
[root@lug ezmlm-0.53-idx-0.41]# make setup


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

[root@lug qmail]# lftpget http://pkg.tini4u.net/mta/qmail/src/qmailadmin-ko.tar.gz
[root@lug qmail]# tar -xvzf qmailadmin-1.2.9.tar.gz
[root@lug qmail]# tar -xvzf qmailadmin-ko.tar.gz -C ./qmailadmin-1.2.9/lang/
ko
[root@lug qmail]# cd qmailadmin-1.2.9
[root@lug qmailadmin-1.2.9]# ./configure --enable-htmllibdir=/home/qadmin/html/qmailadmin --enable-htmldir=/home/qadmin/html/qmailadmin --enable-cgibindir=/home/qadmin/html/qmailadmin --enable-imagedir=/home/qadmin/html/images --enable-imageurl=/images --enable-cgipath=/qmailadmin/qmailadmin

[root@lug qmailadmin-1.2.9]# make
[root@lug qmailadmin-1.2.9]# make install-strip

아파치에서 전체 혹은 가상호스트안에

코멘트로 되어 있는 곳을 넣어주세요.
여기 올리면 글씨가 변형되네요.


를 설정해 준다.

※ 웹으로 접속해 봅니다. 접속 주소는 http://도메인/qmailadmin/qamailadmin 입니다.

코리아서버센터 : http://www.koreaservercenter.com

관리자 / 07-02-05 15:25
/
아파치에서 전체 혹은 가상호스트안에

Script-xAlias /qmailadmin/ "/home/qadmin/html/qmailadmin/"

를 설정해 준다.
yukari / 07-02-10 15:08
/
처음부터 이런 에러가 발생합니다. 뭐가 문제 일까요?
----------------------------------------------------------------------------------------
ucspi-tcp-0.88 error.h 수정후 make시 worning
alloc.c:3: warning: conflicting types for built-in function 'malloc'
auto-str.c:9: warning: conflicting types for built-in function 'puts'
----------------------------------------------------------------------------------------
daemontools-0.76 error.h 수정후 package/install 시 에러 입니다.
./compile pathexec_run.c
pathexec_run.c: In function `pathexec_run':
pathexec_run.c:18: warning: implicit declaration of function `execve'
prot.c: In function `prot_gid':
prot.c:13: warning: implicit declaration of function `setgroups'
prot.c:15: warning: implicit declaration of function `setgid'
prot.c: In function `prot_uid':
prot.c:20: warning: implicit declaration of function `setuid'
./compile readclose.c
./compile seek_set.c
seek_set.c: In function `seek_set':
seek_set.c:9: warning: implicit declaration of function `lseek'
[출처 : http://www.welog.net/gbbs/bbs/board.php?bo_table=linux&wr_id=187&sca=%C6%C1&page=5]

[ 추가 계정 관리를 위한 명령어 집합 ]

vadddomain : 가상 도메인을 추가합니다.
postmaster 암호를 물어보는데 이것은 웹 인터페이스에서 로그인 할때 물어볼 암호입니다.
사용방법은 ./vadddomain 도메인명

vdeldomain : 가상 도메인과 모든 유저를 삭제합니다.
사용방법은 ./vdeldomain 도메인명

vadduser : pop 메일 유저 계정을 만듭니다.
사용방법은 ./vadduser 계정명@도메인명

vdeluser : pop 메일 유저를 삭제합니다.
사용방법은 ./vdeluser 계정명@도메인명

vpasswd : 메일 유저의 암호를 변경합니다.
사용방법은 ./vpasswd 계정명@도메인명

vsetuserquota : 각 유저 별로 quota 설정을 할 수 있습니다.
사용방법은 ./vsetuserquota babo@도메인명 51200 (단위는 byte)

vpopbull : 서버에 설정되어 있는 모든 유저들에게 한번에 메일을 보낼때 유용하게 사용할수 있습니다.
사용방법은 ./vpopbull -f 이메일파일명 도메인명



[ QMail 재시작 하기 ]

Starting Services.
Linux:
# /etc/rc.d/init.d/<SERVICE> start
FreeBSD:
# /usr/local/etc/rc.d/<SERVICE> start

Stopping Services.
Linux:
# /etc/rc.d/init.d/<SERVICE> stop
FreeBSD:
# /usr/local/etc/rc.d/<SERVICE> stop

Restarting Services.
Linux:
# /etc/rc.d/init.d/<SERVICE> restart
FreeBSD:/
# /usr/local/etc/rc.d/<SERVICE> restart

An alternative method - and often more appropriate - is to stop and then start the service:

Linux:
# /etc/rc.d/init.d/<SERVICE> stop
# sleep 10
# /etc/rc.d/init.d/<SERVICE> start
FreeBSD:
# /usr/local/etc/rc.d/<SERVICE> stop
# sleep 10
# /usr/local/etc/rc.d/<SERVICE> start

[서비스의 종류]

Following are the commands to put in place of <SERVICE>:

Service Linux FreeBSD
H-Sphere (tomcat) httpdcp apachecp.sh
H-Sphere Database
(PostgreSQL)
postgresql 010.pgsql.sh
Apache httpd apache.sh
FTP proftpd proftpd.sh
Qmail qmaild qmaild.sh
SpamAssasin spamd spamd.sh
ClamAV clamd clamd.sh
PostgreSQL (User DB) postgresql 010.pgsql.sh
MySQL mysqld mysql-server.sh
DNS (Bind 9.3 and up) named named.sh
ImapProxy imapproxy imapproxy.sh


출처 : http://niceit.tistory.com/112


'IT > Mail' 카테고리의 다른 글

[mail] smtp : queue 관리  (0) 2015.04.21
smtp 삽질  (0) 2014.11.18
[vpopmail] user 추가  (0) 2014.11.18
[svscan / qmail] unknown host error  (2) 2014.11.11
IMAP / POP3 / SMTP 간략 개념  (0) 2014.10.15