Posted on 2004/01/18 17:53
Filed Under 리눅스기술문서/서버관련 조회수:

### qmail 셋팅법 ###  (수정판 #1)

큐메일이란 유닉스류 운영체제의 인터넷 Mail Transfer Agent (MTA)입니다.
대부분의 UNIX운영체제가 제공하고 있는 Sendmail시스템을 대체합니다.
Simple Mail Transfer Protocol (SMTP)을 이용해서 다른 시스템의 MTA와
메세지를 교환합니다.

먼저 설치 소스를 구해야 합니다.

qmail, ftp://koobera.math.uic.edu/www/software/qmail-1.03.tar.gz

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

daemontools,
ftp://koobera.math.uic.edu/www/daemontools/daemontools-0.61.tar.gz


큐메일을 설치할려면 기본적으로 qmail , ucspi-tcp , daemontools 이 세개의
소스가 필요 합니다.

## 소스를 풉니다
먼저 /usr/local/src/qmail 만들고 세개의 소스를 모두 옮긴다.

[root@alang /]# mkdir -p /usr/local/src/qmail
[root@alang /]# mv *.tar.gz /usr/local/src/qmail

[root@alang /]# cd /usr/local/src/qmail
[root@alang qmail]# tar xzvf  qmail-1.03.tar.gz
[root@alang qmail]# tar xzvf  ucspi-tcp-0.84.tar.gz
[root@alang qmail]# tar xzvf  daemontools-0.61.tar.gz

## 큐메일이 설치될 디렉토리를 만든다
[root@alang src]# mkdir /var/qmail

---------------------------------------------------------------------
유의점: 큐메일파일들을 /var가 아닌 다른 곳에 놓고 싶으시면, /var/qmail디렉토리
에  그곳을 가리키는 심볼릭 링크를 만드시면 됩니다.

        예를 들면, 다음과 같이 하시면 됩니다.

        mkdir /var/qmail
        ln -s /usr/man /var/qmail/man
        mkdir /etc/qmail
        ln -s /etc/qmail /var/qmail/control
        ln -s /usr/sbin /var/qmail/bin
---------------------------------------------------------------------
--
## 사용자와 그룹을 만듭니다.

필요한 사용자와 그룹을 만드는 가장 쉬운 방법은 작은 스크립트를 만들어서 하는

입니다.

[root@alang qmail-1.03]# cp INSTALL.ids IDS
[root@alang qmail-1.03]# vi IDS
---------------------------------------------------------------------
--
    groupadd nofiles
    useradd -g nofiles -d /var/qmail/alias alias
    useradd -g nofiles -d /var/qmail qmaild
    useradd -g nofiles -d /var/qmail qmaill
    useradd -g nofiles -d /var/qmail qmailp
    groupadd qmail
    useradd -g qmail -d /var/qmail qmailq
    useradd -g qmail -d /var/qmail qmailr
    useradd -g qmail -d /var/qmail qmails
---------------------------------------------------------------------
--

[root@alang qmail-1.03]# sh IDS   ## 스크립트 실행

## 컴파일을 하세요.

컴파일환경을 검증한다'항목에서, C 컴파일러를 지정하셨습니다. 그것이 cc가 아니
거나
디렉토리가 PATH환경변수에 있지 않으면 conf-cc와 conf-ld를 편집하십시오.
컴파일러가 gcc이고, PATH에 있다고 하면, conf-cc와 conf-ld를 가볍게 편집하
고,
cc를 gcc로 바꾸십시오.

[root@alang qmail-1.03]# vi conf-cc
---------------------------------------------------------------------
--
gcc -O2

This will be used to compile .c files.


[root@alang qmail-1.03]# vi conf-ld
---------------------------------------------------------------------
gcc -s

This will be used to link .o files into an executable.

## 컴파일 시작

[root@alang qmail-1.03]# make setup check

컴파일이 끝나면 DNS 설정을 큐메일에 적용 시켜야 한다.
이 일을 쉽게 해주는 스크립트가 두어개 있습니다.

DNS가 제대로 설정되었다면, 다음 스크립트를 실행하기만 하면 됩니다.

[root@alang qmail-1.03]# ./config

어떤 이유로 config가 DNS에서 hostname을 찾지 못하면, config-fast script를
실행하셔야 합니다.

[root@alang qmail-1.03]#  ./config-fast 호스트네임.완전.경로

큐메일이 시스템에 설치되어서 가동될 준비가 되었습니다!


## ucspi-tcp를 설치합니다.

먼저번에 qmail, ucpsi-tcp, daemontools 타볼을 풀었습니다. 예제에서 그것들을
/usr/local/src/qmail에 풀었습니다. 자 ucpsi-tcp디렉토리로 옮깁시다.

[root@alang qmail-1.03]# cd /usr/local/src/qmail/ucspi-tcp-0.84

컴파일을 하세요.
항목에서, conf-cc와 conf-ld를 고치셨으면, 이 디렉토리에서도 똑같이 해줍니다.
그런뒤에 다음과 같이 하십시오.

[root@alang ucspi-tcp-0.88]# make
[root@alang ucspi-tcp-0.88]# make setup check

## daemontools를 설치합니다.

[root@alang ucspi-tcp-0.88]# cd /usr/local/src/qmail/daemontools-0.61

위와 같이 conf-cc와 conf-ld를 고치고 컴파일

[root@alang ucspi-tcp-0.88]# make && make setup check

## 큐메일을 가동합니다.
/var/qmail/rc로 만드시고
[root@alang ucspi-tcp-0.88]# cd /var/qmail/
[root@alang qmail]# vi rc
--------------------------------------------------------------------
#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by
default

exec env - PATH="/var/qmail/bin:$PATH" \\
qmail-start "`cat /var/qmail/control/defaultdelivery`"
--------------------------------------------------------------------

[root@alang qmail]# chmod 755 /var/qmail/rc
[root@alang qmail]# mkdir /var/log/qmail

각 계정 홈디렉토리에 큐메일이 저장되는 파일을 생성시켜준다.

[root@alang qmail]# echo > /home/alang/Mailbox
[root@alang qmail]# echo > /home/alang/maildir

기본 멜복스 형태를 고르시려면, 위의 테이블의 defaultdelivery 값을
/var/qmail/control/defaultdelivery에 적어넣으십시오.
예) 표준 큐메일 Mailbox 다음과 같이 해주시면 됩니다.

[root@alang qmail]# echo ./Mailbox >/var/qmail/control/defaultdelivery

## 시스템 기동 파일

/var/qmail/rc 스크립트를 수동으로 실행하셔야 하면, 큐메일은 부분가동합니다.
하지만 시스템이 부팅할때 자동으로 가동되고, 시스템이 꺼질땐 자동으로 중지
하도록 관리 하여야 합니다.

이것은 startup/shutdown스크립트를 다음과 같이 작성하면 됩니다.

[root@alang qmail]# vi /etc/rc.d/init.d/qmail
--------------------------------------------------------------------
#!/bin/sh
#
# Startup script for QMAIL service
#
# chkconfig: 345 85 15
# description: Apache is a World Wide Web server.  It is used to serve \\
#              HTML files and CGI.
# processname: qmail-send qmail-lspawn qmail-rspawn qmail-clean
splogger
# pidfile:
# config: /var/qmail/control/*

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
  start)
    echo -n "Starting qmail: "
   /bin/csh -fc '/var/qmail/rc&'
# /usr/local/bin/tcpserver -v -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-
smtpd \\
# 2>&1 | /var/qmail/bin/splogger smtpd 3 &
    echo
    ;;
  stop)
        echo -n "Shutting down qmail: "
        killproc qmail-send
        killproc qmail-lspawn
        killproc qmail-rspawn
        killproc qmail-lspawn
        killproc qmail-rspawn
        killproc qmail-clean
        killproc splogger
        echo
        ;;
  status)
        status qmail-send
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  reload)
        echo -n "Reloading httpd: "
        killproc qmail-send -HUP
        echo
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac

exit 0
-----------------------------------------------------------------

이 스크립트를 몇개의 rc디렉토리에 링크시키셔야 합니다.

[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc0.d/K30mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc1.d/K30mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S80mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc4.d/S80mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S80mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc6.d/K80mail

다음으로 큐메일 서비스의 로그 디렉토리를 만드세요.

[root@alang qmail]# mkdir -p /var/qmail/supervise/qmail-send/log
[root@alang qmail]# mkdir -p /var/qmail/supervise/qmail-smtpd/log
[root@alang qmail]# chmod +t /var/qmail/supervise/qmail-send
[root@alang qmail]# chmod +t /var/qmail/supervise/qmail-smtpd

몇개의 스크립터를 작성합니다.

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

[root@alang qmail]# 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@alang qmail]# vi /var/qmail/supervise/qmail-smtpd/run
------------------------------------------------------------------
#!/bin/sh                                                                  
QMAILDUID=`id -u qmaild`                                                  
NOFILESGID=`id -g qmaild`                                                  
exec /usr/local/bin/softlimit -m 2000000   /usr/local/bin/tcpserver -v -p -
x /etc/tcp.smtp.cdb  -u $QMAILDUID -g $NOFILESGID 0
smtp /var/qmail/bin/qmail-smtpd 2>&1

[root@alang qmail]# 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

run파일들에 실행가능을 부여합니다.

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


그런 다음에, 로그디렉토리를 만듭니다.

[root@alang qmail]# mkdir -p /var/log/qmail/smtpd
[root@alang qmail]# chown qmaill /var/log/qmail /var/log/qmail/smtpd

기동스크립트에 실행권한을 부여하고, 실행경로에 있는 디렉토리로 링크합니다.

[root@alang qmail]# chmod 755 /etc/rc.d/init.d/qmail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /usr/local/sbin

로컬호스트가 SMTP를 통해서 멜을 삽입 (inject)하도록 합니다.

[root@alang qmail]# echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
[root@alang qmail]# echo '210.220.69.:allow,RELAYCLIENT=""'
>>/etc/tcp.smtp

기존에 설치된 MTA를 멈추고 무력하게 합니다.

[root@alang qmail]# /etc/rc.d/init.d/sendmail stop

레드햇리눅스에서는 다음과 같이 해서 Sendmail을 제거합니다.

[root@alang qmail]# rpm -e --nodeps sendmail

끝으로, 기존의 /usr/lib/sendmail을 큐메일판으로 바꿉니다.

[root@alang qmail]# mv /usr/lib/sendmail /usr/lib/sendmail.old
[root@alang qmail]# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
[root@alang qmail]# chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old
[root@alang qmail]# ln -s /var/qmail/bin/sendmail /usr/lib
[root@alang qmail]# ln -s /var/qmail/bin/sendmail /usr/sbin

끝단계는 시스템앨리어스를 두어개 만드는 것입니다.

[root@alang qmail]# echo alang > /var/qmail/alias/.qmail-root
[root@alang qmail]# echo alang > /var/qmail/alias/.qmail-postmaster
[root@alang qmail]# ln -s /var/qmail/alias/.qmail-
postmaster /var/qmail/alias/.qmail-mailer-daemon
[root@alang qmail]# chmod 644 /var/qmail/alias/.qmail-root
[root@alang qmail]# chmod 644 /var/qmail/alias/.qmail-postmaster

큐메일을 가동합니다.

[root@alang qmail]# /usr/local/sbin/qmail start

릴레이선택을 허용하기

대부분의 단일사용자와 소규모 서버는 릴레이를 완전히 금지할수 있지만,
분산된 사용자 공동체를지원하려면 사용자에게만은 릴레이용으로 서버를 이용하게
할 수 있는 방법이 필요합니다.
qmail-smtpd에게 rcpthosts 파일을 무시하도록 tcpserver를 써서 RELAYCLIENT
환경변수를 정하면 됩니다.

모든 사람들에게 릴레이를 허용할려면 /var/qmail/control 밑의 rcpthosts 파일을
제거 한다.

[root@alang qmail]
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp
< /etc/tcp.smtp
[root@alang qmail]# /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -
u -g 0 smtp /var/qmail/bin/qmail-smtpd &



다중 호스트네임

같은 시스템에 여러개의 도메인이 셋팅 되어져 각 도메인 마다 메일을 사용할수 있
도록 할려면
/var/qmail/control/locals에 해당 도메인을 적어준다.

[root@alang qmail]# vi /var/qmail/control/locals
--------------------------------------------------------
alang.kobis.net
love.kobis.net
     .
     .
     .

## 앨리어스##

가상메일 webmaster at
alang.kobis.net 를 실제 존재 메일인 alang at kobis.net 로
포워딩 시킬는 경우

[root@alang qmail]# echo alang > /var/qmail/alias/.qmail-webmaster

## 포워딩 ##

각 홈디렉토리에 .qmail 파일에 포워딩 전달이 될 메일 주소를 다음과 같이 적어 준
다.

  &user at example.com  
  
  user at example.com      

그러면 메세지사본이  user at
example.com로 보냅니다.


## POP 서버 셋팅 ##

# qmail-pop3d의 구조

다음의 세모듈로 구성합니다.

      qmail-popup : 사용자명과 암호를 받습니다.
      checkpassword : 사용자명과 암호를 인증합니다.
      qmail-pop3d : POP데몬입니다.

qmail-popup은 POP3포트인 110번 포트를 듣는 inetd나 tcpserver로 움직입니다.
연결을 하면 사용자명?을  암호를 대라고 합니다.  그리고서는 checkpassword를
불러서 사용자명과 암호를 검증하고 맞다면 qmail-pop3d를 부릅니다.

# qmail-pop3d의 설치



1. 큐메일을 완전히 설치하고 시험사십시오. 모든 사용자가 POP가능한 멜복스를
    갖게하려면 defaultdelivery를 ./Maildir/로 설정하세요.

[root@alang qmail]#  echo ./Maildir/ > /var/qmail/control/defaultdelivery

2. 메일 전달 방식을 maildir 방식으로 바꿉니다. maildir 전달 방식은 홈디렉토리의
메일박스 디렉토리안에 3개의 디렉토리가 생성되는데 new, cur, tmp 등입니다.
각 디렉토리 마다 다른 용도로 사용이 되는데 new는 읽지 않은 메세지가, cur는
읽은 메세지가, tmp는 전달중인 메세지가 들어 있습니다. 이때 사용되는 메일 박스

큐메일과 같이 제공되는 maildirmake프로그램으로 만듭니다.

--------------------------------------------------------------------
유의점: maildir멜복스는 큐메일과 같이 제공하는 maildirmake프로그램으로 만듭니
다.

[root@alang qmail]# /var/qmail/bin/maildirmake ~계정/Maildir
--------------------------------------------------------------------
3. checkpassword를 컴파일하고 생성된 checkpassword을 /bin 디렉토리 안에
옮긴다.
먼저 http://pobox.com/~djb/checkpwd.html 사이트에서 checkpassword 를 다
운 받는다.
일정 디렉토리에서 압축을 풀고 컴파일 시킨다.
[root@alang checkpassword-0.81]# make
[root@alang checkpassword-0.81]# make setup check
[root@alang checkpassword-0.81]# cp checkpassword /bin

4. /etc/inetd.conf 에 다음을 추가 하세요.

[root@alang qmail]# vi /etc/inetd.conf
--------------------------------------------------------------------

  pop3   stream  tcp     nowait  root    /var/qmail/bin/qmail-popup qmail-
popup  hostname.domain /bin/checkpassword /var/qmail/bin/qmail-pop3d
Maildir

5. [root@alang qmail]# /etc/rc.d/init.d/inet restart  ## inet 재시작



수정판 # 1...큐메일은 앞으로도 계속 업그레이드 됩니다.
Writer profile
author image
-아랑 -

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우

Counter

· Total
: 4885596
· Today
: 15
· Yesterday
: 478