##################

## Qmail Server ##

##################


Ver : 2014052301

date : 2014.01.01

written by boaniyagi@naver.com


o 참고 사이트 

- http://qmail.kldp.net/phpbb/

- http://cr.yp.to/


o 컴파일에 필요한 패키지 

- "Development Tools"

- openssl-devel  


!!! 개발툴이 없다면 설치가 안되므로 개발툴과 암호화 관련 개발 라이브러리인 openssl-devel 패키지도 설치해야 한다.

!!! yum -y groupinstall "Development Tools"

!!! yum -y install openssl-devel   



!!! 또한 현재 CentOS 에서는 gcc 버전 4 이상을 사용하기 때문에 소스를 그대로 설치하게 되면 중간에 에러가 나므로 이를 방지하기 위해서 

!!! 헤더파일을 약간 수정해주어야 된다.


!!! 큐메일은 혼자서 작동하지 않기 때문에 다른 데몬과 연계해서 실행을 해야한다. 

!!! 큐메일의 실행은 xinetd와 tcpserver로 할 수 있으나 보안과 속도면에서 큐메일과 잘 맞는 tcpserver로 구축을 하도록 한다.


o qmail 설치 참고 문서 


참고 : http://coffeenix.net/board_view.php?bd_code=125


큐메일 서버 구축 #1 - 프롤로그

큐메일 서버 구축 #2 - ucspi-tcp, daemontools 설치

큐메일 서버 구축 #3 - qmail 설치

큐메일 서버 구축 #4 - qmail 부트 스크립트

큐메일 서버 구축 #5-1 - vpopmail + cdb 설치

큐메일 서버 구축 #5-2 - vpopmail + mysql 설치

큐메일 서버 구축 #6 - qmail과 vpopmail 시작

큐메일 서버 구축 #7 - ezmlm과 qmailadmin 설치

큐메일 서버 구축 #8 - courier-imap 설치

큐메일 서버 구축 #9 - 다람쥐메일(SquirrelMail) 설치


큐메일 서버 구축 #1 - 프롤로그

--------------------------------------------------------------------------------------

- 작성자 : 김혁중(티니) [sky(golbangi or at)tini4u.net]

- 작성일 : 2006-06-30

- 사이트 : http://linux.tini4u.net/

- 원제목 : 큐메일 서버 구축 #1 - 프롤로그

- 환 경 : CentOS 4.3

- 키워드 : qmail install

--------------------------------------------------------------------------------------


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 지원 여부 등등에 따라 수많은 경우가 있을 수 있습니다.



큐메일 서버 구축 #2 - ucspi-tcp, daemontools 설치


큐메일은 혼자서 작동하지 않기 때문에 다른 데몬과 연계해서 실행을 해야만 합니다.

큐메일의 실행은 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이하라면 수정하지 않아도 됩니다.

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


- 다운로드

# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz


- 압축해제

# tar xfz ucspi-tcp-0.88.tar.gz

# cd ucspi-tcp-0.88  


- 소스수정

# vi error.h



-- error.h --

#include <errno.h>      <-- 추가

#ifndef ERROR_H

#define ERROR_H


// extern int errno;    <-- 주석처리

  :

  :

-- error.h --



- 컴파일

# make


- 설치 

# make setup check  


- 확인 

# ls /usr/local/bin

  :

  :

-rwxr-xr-x 1 root root    29896 May 21 14:38 rblsmtpd

-rwxr-xr-x 1 root root    15832 May 21 14:38 recordio

-rwxr-xr-x 1 root root      143 May 21 14:38 tcpcat

-rwxr-xr-x 1 root root    38628 May 21 14:38 tcpclient

-rwxr-xr-x 1 root root    16808 May 21 14:38 tcprules

-rwxr-xr-x 1 root root    15468 May 21 14:38 tcpruleschec

-rwxr-xr-x 1 root root    43248 May 21 14:38 tcpserver




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

- 순서 -

1. daemontools 다운로드

2. 압축해제

3. 소스수정

4. 인스톨

5. 확인


# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

# mkdir -m 1755 /package

# tar xfz daemontools-0.76.tar.gz -C /package

# cd /package/admin/daemontools-0.76  

# vi src/error.h



-- src/error.h --

/* Public domain. */

#include <errno.h>      <-- 추가

#ifndef ERROR_H

#define ERROR_H


// extern int errno;    <-- 주석처리

  :

  :

-- src/error.h --



- 설치

# package/install  


- 확인

# tail /etc/inittab 

  :

  :

SV:123456:respawn:/command/svscanboot  <-- 추가된다.



- 프로세스를 확인한다.

# ps auxww



root     17509  0.0  0.1   1608   256 ?        S    09:15   0:00 readproctitle service errors: ............

--------------------------------------------------------------------

※ 만약 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 에서 에러가 나는것 입니다.

따라서 이 부분을 #include 로 수정해주면 정상적으로 설치가 가능합니다.

--------------------------------------------------------------------


큐메일 서버 구축 #3 - qmail 설치


큐메일은 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의 운영자인 임은재 님께서 제작하신 패치 입니다.

큐메일을 사용하는데 있어 여러가지 편리한 패치가 종합적으로 되어 있기 때문에

일일히 패치를 하나씩 찾아 해주는 번거로움을 줄이기 위해 필자는 칵테일 패치를 하겠습니다.


# wget http://www.qmail.org/qmail-1.03.tar.gz

# wget http://people.kldp.org/~eunjea/qmail/patch/qmail-ej-cocktail-14.tar.gz



# tar xfz qmail-1.03.tar.gz

# tar xfz qmail-ej-cocktail-14.tar.gz

# cd 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로 수정하도록 하겠습니다.

# 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미만)으로 유저를 생성하겠다는 의미 입니다.

 groupadd -r nofiles

 useradd -r -g nofiles -d /var/qmail/alias alias

 useradd -r -g nofiles -d /var/qmail qmaild

 useradd -r -g nofiles -d /var/qmail qmaill

 useradd -r -g nofiles -d /var/qmail qmailp

 groupadd -r qmail

 useradd -r -g qmail -d /var/qmail qmailq

 useradd -r -g qmail -d /var/qmail qmailr

 useradd -r -g qmail -d /var/qmail qmails  


- make 시 오류가 발생하므로 const 를 extern 으로 변경한다.

# vi +12 tls.c



-- tls.c --

extern char *strerror(int);   

-- tls.c --



- 컴파일한다.

# make


- 설치한다.

# make setup check


- 확인

# ls -F /var/qmail/

alias/  bin/  boot/  control/  doc/  man/  queue/  users/


# ./config


-------------------------------------------------------------------


※ 정상적으로 config가 되지 않았을 경우

# ./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 설정을 확인해야된다.


# cat /etc/resolv.conf

search mail.foobar.com

nameserver 168.126.63.1

nameserver 168.126.63.2  



※ 필자는 search 부분을 등록하지 않은 서버를 세팅할 때 고생한적이 있습니다.

resolv에서 search [domain name] 부분은 반드시 있어야 됩니다.


# 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

...  



호스트네임 적용 (reboot)

-------------------------------------------------------------------


※ 호스트네임 부분 또한 반드시 있어야 됩니다.

만약 위의 모든 세팅이 정상적인데도 config가 제대로 되지 않는다면 아래와 같이 해주면 됩니다.


-- 구글에서 qmail control 검색 --


# ./config-fast mail.sbs.com  



- 큐메일 설치 확인

- 큐메일이 정상적으로 설치되면 /var/qmail 과 /var/qmail/control/ 

- 디렉토리에 각종 설정파일이 생성된다.


# ls -l /var/qmail

total 64

drwxr-sr-x  2 alias  qmail 4096 May  3 07:17 alias

drwxr-xr-x  2 root   qmail 4096 May  3 07:17 bin

drwxr-xr-x  2 root   qmail 4096 May  3 07:17 boot

drwxr-xr-x  2 root   qmail 4096 May  3 07:19 control

drwxr-xr-x  2 root   qmail 4096 May  3 07:17 doc

drwxr-xr-x 10 root   qmail 4096 May  3 07:17 man

drwxr-x--- 11 qmailq qmail 4096 May  3 07:17 queue

drwxr-xr-x  2 root   qmail 4096 May  3 07:17 users


# ls -l /var/qmail/control

total 40

-rw-r--r-- 1 root root  8 May  3 07:19 defaultdomain

-rw-r--r-- 1 root root 13 May  3 07:19 locals

-rw-r--r-- 1 root root 13 May  3 07:19 me

-rw-r--r-- 1 root root  8 May  3 07:19 plusdomain

-rw-r--r-- 1 root root 13 May  3 07:19 rcpthosts



- 컨트롤 파일 수정

- 참고 : http://yoonperl.tistory.com/38

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


--------- 수정 예정 -----------------

# vi /var/qmail/control/defaultdomain

foobar.com  

# vi /var/qmail/control/locals

localhost  

# vi /var/qmail/control/me

mail.foobar.com  

# vi /var/qmail/control/plusdomain

mail.foobar.com  

# cat /dev/null > /var/qmail/control/rcpthosts  

--------- 수정 예정 -----------------



*** qmail 의 데몬을 띄우기 위해서 실행파일 5개를 생성한다 *** 


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

# cd /var/qmail

# install /dev/null rc

# vi rc



-- /var/qmail/rc --

#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/  

-- /var/qmail/rc --



# mkdir -p /var/qmail/supervise/qmail-send/log

# mkdir -p /var/qmail/supervise/qmail-smtpd/log

# chmod 1755 /var/qmail/supervise/qmail-send

# chmod 1755 /var/qmail/supervise/qmail-smtpd  


# tree -p supervise

supervise

|-- [drwxr-xr-t]  qmail-send

|   `-- [drwxr-xr-x]  log

`-- [drwxr-xr-t]  qmail-smtpd

    `-- [drwxr-xr-x]  log



- qmail 실행에 관련된 스크립트 파일을 생성한다.

# install /dev/null supervise/qmail-send/run

# vi supervise/qmail-send/run



-- supervise/qmail-send/run --

#!/bin/sh

exec /var/qmail/rc  

-- supervise/qmail-send/run --



# install /dev/null supervise/qmail-send/log/run

# vi supervise/qmail-send/log/run



-- supervise/qmail-send/log/run --

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail  

-- supervise/qmail-send/log/run --



# install /dev/null supervise/qmail-smtpd/run

# vi supervise/qmail-smtpd/run



-- supervise/qmail-smtpd/run --

#!/bin/sh

Q_UID=`id -u qmaild`

Q_GID=`id -g qmaild`

exec /usr/local/bin/softlimit -m 70000000 \

/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  

-- supervise/qmail-smtpd/run --



# install /dev/null supervise/qmail-smtpd/log/run

# vi supervise/qmail-smtpd/log/run



-- supervise/qmail-smtpd/log/run --

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail/smtpd  

-- supervise/qmail-smtpd/log/run --



- 큐메일을 위한 로그 디렉토리를 생성한다.

# mkdir -p /var/log/qmail/smtpd

# chown qmaill /var/log/qmail /var/log/qmail/smtpd  



- Alias 설정

큐메일은 root로 메일을 배달하지 않으므로 반드시 알리아즈를 만들어줘야한다.

그리고 postmaster, mailer-daemon으로 오는 메일도 알리아즈 해서 사용한다.

아래는 sbsuser@sbs.com 이란 주소로 알리아즈 시킨다.


# echo sbsuser@sbs.com > /var/qmail/alias/.qmail-root

# echo sbsuser@sbs.com > /var/qmail/alias/.qmail-postmaster

# echo sbsuser@sbs.com > /var/qmail/alias/.qmail-mailer-daemon

# chmod 644 /var/qmail/alias/.*  



- sendmail 패키지를 삭제한다.

# rpm -qa | grep sendmail   

sendmail-8.13.8-8.1.el5_7

# /etc/init.d/sendmail stop

# yum -y groupremove "Mail Server"



- qmail 바이너리 파일 소프트 링크

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

# ln -s /var/qmail/bin/sendmail /usr/lib

# ln -s /var/qmail/bin/sendmail /usr/sbin  



- 확인 

# cd /var/qmail

# chmod 755 .

# ls -ld

drwxr-xr-x 11 root qmail 4096  5월 21 15:26 .



# ls -l rc 

-rwxr-xr-x 1 root root 73  5월 21 15:23 rc

# ls -l supervise/qmail-smtpd/run 

-rwxr-xr-x 1 root root 211  5월 21 15:30 supervise/qmail-smtpd/run

# ls -l supervise/qmail-smtpd/log/run 

-rwxr-xr-x 1 root root 98  5월 21 15:30 supervise/qmail-smtpd/log/run

# ls -l supervise/qmail-send/run 

-rwxr-xr-x 1 root root 29  5월 21 15:29 supervise/qmail-send/run

# ls -l supervise/qmail-send/log/run 

-rwxr-xr-x 1 root root 90  5월 21 15:29 supervise/qmail-send/log/run



- qmail 시작

# ln -s /var/qmail/supervise/qmail-send  /service/

# ln -s /var/qmail/supervise/qmail-smtpd /service/

# netstat -nltp | grep 25

tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      2766/tcpserver      



# ps auxww




- 릴레이파일을 생성한다.

# vi /etc/tcp.smtp



-- /etc/tcp.smtp --

127.0.0.1:allow,RELAYCLIENT="" 

192.168.:allow,RELAYCLIENT="" 

-- /etc/tcp.smtp --



# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp



# telnet localhost 25

Trying 127.0.0.1...

Connected to www.sbs.com (127.0.0.1).

Escape character is '^]'.

220 mail.sbs.com ESMTP

                  <-- 멈추면 메일서버 구축 성공!!!



*********에러가 발생되면 디버깅하는 방법*********


1. /var/qmail 디렉토리 권한을 확인한다.

- 644 가 되면 안되고 755 or 711 이어야 한다.

# ls -ld /var/qmail

drwxr-xr-x 11 root qmail 4096 May  3 08:11 /var/qmail


2. (rc 1개 + run 4개)5개의 실행파일을 모두 확인한다.

- 실행권한 확인

# find \( -name rc -o -name run \) -ls


- 파일의 내용 확인

rc  

supervise/qmail-send/run 

supervise/qmail-send/log/run

supervise/qmail-smtpd/run 

supervise/qmail-smtpd/log/run


3. 확인이 다 되었다면 /etc/inittab 파일을 수정한다.

# vi /etc/inittab

-- /etc/inittab --

  :

  :

#SV:123456:respawn:/command/svscanboot

-- /etc/inittab --


# kill -1 1 


# vi /etc/inittab

-- /etc/inittab --

  :

  :

SV:123456:respawn:/command/svscanboot

-- /etc/inittab --

# kill -1 1 


4. qmail 의 로그를 확인한다.

# tree /var/log/qmail/

/var/log/qmail/

|-- current             <-- 확인

|-- lock

|-- smtpd

|   |-- current         <-- 확인

|   |-- lock

|   `-- state

`-- state


5. 다른 메일서버가 25번 포트를 사용하는지 확인한다.

# netstat -nltp | grep 25


*********에러가 발생되면 디버깅하는 방법*********



qmail 부트 스크립트 생성


혹은 http://pkg.tini4u.net/mta/qmail/ 에서 받으실 수 있습니다.


# install /dev/null /etc/init.d/qmail

# vi /etc/init.d/qmail



-- /etc/init.d/qmail --

#!/bin/sh


# For Red Hat chkconfig

# chkconfig: - 80 30

# description: the qmail MTA


PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin

export PATH


case "$1" in

start)

    echo "Starting qmail"

     if [ -e /service/qmail-send ] ; then

         if svok /service/qmail-send ; then

            svc -u /service/qmail-send

        else

            echo qmail-send supervise not running

        fi

     else

         ln -s /var/qmail/supervise/qmail-send /service/

     fi


     if [ -e /service/qmail-smtpd ] ; then

         if svok /service/qmail-smtpd ; then

            svc -u /service/qmail-smtpd

        else

            echo qmail-smtpd supervise not running

        fi

     else

         ln -s /var/qmail/supervise/qmail-smtpd /service/

     fi

    

    if [ -d /var/lock/subsys ]; then

     touch /var/lock/subsys/qmail

    fi

    ;;

stop)

    echo "Stopping qmail..."

    echo " qmail-smtpd"

    svc -dx /service/qmail-smtpd /service/qmail-smtpd/log

     rm -f /service/qmail-smtpd

    echo " qmail-send"

    svc -dx /service/qmail-send /service/qmail-send/log

     rm -f /service/qmail-send

    if [ -f /var/lock/subsys/qmail ]; then

     rm /var/lock/subsys/qmail

    fi

    ;;

stat)

    svstat /service/qmail-send

    svstat /service/qmail-send/log

    svstat /service/qmail-smtpd

    svstat /service/qmail-smtpd/log

    qmail-qstat

    ;;

doqueue|alrm|flush)

    echo "Flushing timeout table and sending ALRM signal to qmail-send."

    /var/qmail/bin/qmail-tcpok

    svc -a /service/qmail-send

    ;;

queue)

    qmail-qstat

    qmail-qread

    ;;

reload|hup)

    echo "Sending HUP signal to qmail-send."

    svc -h /service/qmail-send

    ;;

pause)

    echo "Pausing qmail-send"

    svc -p /service/qmail-send

    echo "Pausing qmail-smtpd"

    svc -p /service/qmail-smtpd

    ;;

cont)

    echo "Continuing qmail-send"

    svc -c /service/qmail-send

    echo "Continuing qmail-smtpd"

    svc -c /service/qmail-smtpd

    ;;

restart)

    echo "Restarting qmail:"

    echo "* Stopping qmail-smtpd."

    svc -d /service/qmail-smtpd

    echo "* Sending qmail-send SIGTERM and restarting."

    svc -t /service/qmail-send

    echo "* Restarting qmail-smtpd."

    svc -u /service/qmail-smtpd

    ;;

cdb)

    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

    chmod 644 /etc/tcp.smtp.cdb

    echo "Reloaded /etc/tcp.smtp."

    ;;

help)

    cat << HELP

stop -- stops mail service (smtp connections refused, nothing goes out)

start -- starts mail service (smtp connection accepted, mail can go out)

pause -- temporarily stops mail service (connections accepted, nothing leaves)

cont -- continues paused mail service

stat -- displays status of mail service

cdb -- rebuild the tcpserver cdb file for smtp

restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it

doqueue -- schedules queued messages for immediate delivery

reload -- sends qmail-send HUP, rereading locals and virtualdomains

queue -- shows status of queue

alrm -- same as doqueue

flush -- same as doqueue

hup -- same as reload

HELP

     ;;

 *)

     echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"

     exit 1

     ;;

 esac


exit 0

-- /etc/init.d/qmail --


# chkconfig --add qmail

# chkconfig --list qmail

# chkconfig qmail on

# /etc/init.d/qmail start

# /etc/init.d/qmail stop

# /etc/init.d/qmail start



o 사용자 메일발송 테스트

# useradd sbsuser

# su - sbsuser

$ /var/qmail/bin/maildirmake ~/Maildir 

$ tree Maildir/

Maildir/

|-- cur   <-- 메일수신 후에 옮겨지는 디렉토리

|-- new   <-- 메일수신 디렉토리

`-- tmp   <-- 메일발송 임시 디렉토리


============================================================


QMAIL-LAB> 메일을 발송해보자.


# cd /var/named/chroot/var/named

# cp -a localhost.zone qmailtest.com.zone

# vim qmailtest.com.zone



56.200# cat /var/named/sbs.com.zone

-- /var/named/sbs.com.zone --

$TTL 60

@ IN SOA @       root (

2014052601

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum


       IN NS    ns

       IN MX  10   mail              <--

                IN A    192.168.56.200

mail            IN A    192.168.56.200    <--

www IN A    192.168.56.200

-- /var/named/sbs.com.zone --



# vim /etc/named.caching-nameserver.conf




# /etc/init.d/named restart

# (또는 rndc reload)



- 메일 도메인 확인

56.200# cat /var/qmail/control/locals 

mail.sbs.com

sbs.com

56.200# cat /var/qmail/control/rcpthosts 

mail.sbs.com



- 메일수신 로그 확인

56.200# tail -f /var/log/qmail/smtpd/current



- 메일발송 로그 확인

56.210# tail -f /var/log/maillog 



56.210# cat /etc/resolv.conf 

-- /etc/resolv.conf --

nameserver 192.168.56.200

-- /etc/resolv.conf --



56.210# dig sbs.com mx   <-- 56.200 이 출력이 되면 성공



56.210# mail -v -s testmail sbsuser@sbs.com < /etc/fstab


56.200# tree  /home/sbsuser/Maildir/

/home/sbsuser/Maildir/

|-- cur

|-- new

|   `-- 1401064505.15810.www.sbs.com   <-- 성공적으로 메일을 수신함.

`-- tmp


============================================================