본문 바로가기

리눅스

[install] qmail+vpopmail+qmailadmin 설치

** QMAIL, vpopmail, qmailadmin 의 장점.

  . 한개의 서버, 한개의 IP 에서 무한정(?)의 도메인, pop 메일 서비스를 해 줄수 있다.
  . 한개의 uid,gid 로 모든 버츄얼 도메인, pop 계정을 관리 하므로 불필요한 유저 생성을 피할수 있다.
  . 각 도메인의 postmaster 는 웹 인터페이스로 pop 메일 유저 설정을 직접 할수 있다.
  . 각 도메인마다 메일 계정, 메일링 리스트의 한계를 설정 할 수 있다.
  . 유저 별로 quota 설정이 가능하다.

  vpopmail 은 데이타베이스(MySQL, Oracle, Sybase)를 이용한 사용자 관리, 
  smtp 사용자들의 로밍 서비스 (고정 IP를 가지고 있지 않은 사용자에게 smtp 릴레이를 허용해주는)를 해줄 있다.
 
  * qmailadmin 은 vpopmail의 웹 인터페이스로 POP 사용자 관리를 브라우저를 통해 편하게 할 수 있도록 해준다.
  * qmailadmin 을 설치하려면 autoresponder 와 ezmlm 도 설치한다.
  * ezmlm 은 qmail 하에서 돌아가는 강력한 메일링 리스트로서 http://www.ezmlm.org/에서 ezmlm 과 ezmlm-idx 를 받는다.

## Qmail 설치.

  1. ucspi-tcp 설치하기
  tar -xvzf ucspi-tcp-0.88.tar.gz
  cd ucspi-tcp-0.88
  patch -p1 < /패치파일경로/ucspi-tcp-0.88.errno.patch.txt
  make
  make setup check

  2. daemontools 설치하기
  mkdir -p /package
  chmod 1755 /package
  cp daemontools-0.76.tar.gz /package
  cd /package
  tar -xvzf daemontools-0.76.tar.gz
  cd admin/daemontools-0.76 
  patch -p1 < /패치파일경로/daemontools-0.76.errno.patch
  package/install
  
  3. qmail 설치하기
  mkdir /var/qmail
  tar -xvzf qmail-1.03.tar.gz
  vi qmailuser.txt

  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

  chmod 755 qmailuser.txt
  ./qmailuser.txt
  tar -xvzf qmail-ej-cocktail-14.tar.gz
  cp qmail-ej-cocktail-14/cocktail.patch ./qmail-1.03
  cd qmail-1.03
  patch -p1 < cocktail.patch
  vi conf-spawn (1000을 509로)
  make
  make setup check
  ./config-fast 도메인이름
  
  ** qmail 컴파일은 openssl 버전이 openssl-0.9.7b이하에서만 정상적으로 컴파일 된다.
     그러므로 qmail을 컴파일시 openssl 버전을 낮추고 컴파일 한후, 다시 버전을 올린다.

   ** openssl 소스 설치법.

      . tar xvfz openssl-0.9.7d.tar.gz
      . cd openssl-0.9.7d
      . ./config --prefix=/usr/local --openssldir=/usr/local/openssl
      . make
      . make test
      . make install 
    
  4. qmail 시작 종료 스크립트를 작성한다.
  
  vi /var/qmail/rc

  ---------------------------------------------
  #!/bin/sh
  exec env - PATH="/var/qmail/bin:$PATH" \
  qmail-start ./Maildir/
  ---------------------------------------------

  chmod 755 /var/qmail/rc
  mkdir -p /var/qmail/supervise/qmail-send/log 
  mkdir -p /var/qmail/supervise/qmail-smtpd/log 
  chmod +t /var/qmail/supervise/qmail-send
  chmod +t /var/qmail/supervise/qmail-smtpd

  vi /var/qmail/supervise/qmail-send/run

  ----------------------
  #!/bin/sh
  exec /var/qmail/rc 
  ----------------------

  vi /var/qmail/supervise/qmail-send/log/run

  -----------------------------------------
  #!/bin/sh
  exec /usr/local/bin/setuidgid qmaill \
  /usr/local/bin/multilog t /var/log/qmail 
  -----------------------------------------

  vi /var/qmail/supervise/qmail-smtpd/run

  ----------------------------------------------------------
  #!/bin/sh
  Q_UID=`id -u vpopmail`
  Q_GID=`id -g vpopmail`
  exec /usr/local/bin/softlimit -m 7000000 \
  /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
  ----------------------------------------------------------

  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 
  -------------------------------------------------

  chmod 755 /var/qmail/supervise/qmail-send/run 
  chmod 755 /var/qmail/supervise/qmail-send/log/run 
  chmod 755 /var/qmail/supervise/qmail-smtpd/run
  chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
  mkdir -p /var/log/qmail/smtpd 
  chown qmaill /var/log/qmail /var/log/qmail/smtpd

  vi /etc/tcp.smtp

  ------------------------------------
  127.0.0.1:allow,RELAYCLIENT=""
  서버아이피:allow,RELAYCLIENT=""
  ------------------------------------

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

  echo root > /var/qmail/alias/.qmail-root
  echo root > /var/qmail/alias/.qmail-postmaster
  echo root > /var/qmail/alias/.qmail-mailer-daemon
  cd /var/qmail/alias/
  chmod 644 .qmail-root .qmail-postmaster .qmail-mailer-daemon


  vi /etc/rc.d/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
  ------------------------------------------------------------------------------------------------------

  chmod 755 /etc/rc.d/init.d/qmail

  ** service qmail start 를 실행하여 프로세스 및 포트를 정상적으로 BIND 하면 정상.
 
 ## vpopmail with mysql 연동 설치.

  - vpopmail 유저와 그룹을 생성한다.

   groupadd -g 89 vchkpw
   useradd -g vchkpw -u 89 vpopmail
  
   mkdir ~vpopmail/etc
   chown vpopmail.vchkpw ~vpopmail -R
   echo "localhost|0|vpopmailuser|vpoppasswd|vpopmail" > ~vpopmail/etc/vpopmail.mysql
   chown vpopmail.vchkpw ~vpopmail/etc/vpopmail.mysql
   chmod 640 ~vpopmail/etc/vpopmail.mysql
   
   - mysql root 접속후 아래 디비생성및 접근권한을 설정한다.
 
   CREATE DATABASE vpopmail;
   GRANT select,insert,update,delete,create,drop ON vpopmail.* TO vpopmailuser@localhost IDENTIFIED BY 'vpoppasswd';
   quit;
   
   tar xvfz vpopmail-5.4.17.tar.gz
   
   ./configure --enable-roaming-users --enable-tcprules-prog=/usr/local/bin/tcprules 
   --enable-tcpserver-file=/etc/tcp.smtp --enable-relay-clear-minutes=15 --enable-logging=p 
   --disable-ip-alias-domains --disable-passwd --enable-clear-passwd --enable-auth-module=mysql 
   --enable-many-domains=y --enable-valias=y --enable-mysql-limits=y --enable-auth-module=mysql 
   --enable-incdir=/usr/local/mysql/include/mysql --enable-libdir=/usr/local/mysql/lib/mysql 
   --enable-domain-quotas=y

    --------------------------  설명 ----------------------------

   // roaming 옵션 목록 
   --enable-roaming-users \          :enable roaming users functionality
   --enable-tcprules-prog=path \    :defaults to /usr/local/bin/tcprules
   --enable-tcpserver-file=path \    :defaults to /home/vpopmail/etc/tcp.smtp
   --enable-relay-clear-minutes=15  :defaults to 180

   //mysql 옵션 목록
   --enable-auth-module=mysql                     :mysql 사용하겠다
   --enable-incdir=/usr/local/mysql/include... :include 경로
   --enable-libdir=/usr/local/mysql/lib....       :lib 경로
   --enable-many-domains   :도메인별로 테이블을 생성관리 할것이라면 --enable-many-domains=n 옵션을 사용한다.
   --enable-mysql-limits      :mysql을 이용한 쿼터 설정

   --enable-logging=y : 모든 pop 로그인 기록과 오류 메시지를 남긴다.
   --enable-logging=n : 아무런 로그도 남기지 않는다.
   --enable-logging=e : 오류/ 치명적인 오류 메세지를 기록한다.
   --enable-logging=p : 오류 로그에 암호를 포함한다.
   --enable-logging=v : --enable-logging=y 와 같으며 사용자 암호를 로그에 포함한다.


   --enable-default-domain :주서버의 메일 계정도 모두 가상 도메인의 메일 계정과 동일하게 관리 할수 있다. 
   --enable-domain-quotas: 도메인별 쿼터 설정 (--enable-mysql-limits 옵션과 같이 사용)
   --enable-many-domains : 도메인별로 테이블을 생성한다는 옵션
   --enable-mysql-limits : 쿼터 설정데 대한 세부 옵션 (README.vlimit 파일 참고)

    --------------------------  설명 ----------------------------
   
   make
   make install-strip
   
   ** /home/vpopmail 안에..디렉토리와 여러 파일들이 생성확인.
   
    . ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.12 /usr/lib/
    . /home/vpopmail/bin/clearopensmtp

   - 주기적으로 smtp허용 IP를 갱신해주도록 cron에 등록.
   
    . crontab -e
    . 40 * * * *  /home/vpopmail/bin/clearopenstmp
   
   - qmail smtp 수정

    . vi /var/qmail/supervise/qmail-smtpd/run
    ---------------------------------------------------------------------------
    #!/bin/sh
    Q_UID=`id -u vpopmail`
    Q_GID=`id -g vpopmail`
    exec /usr/local/bin/softlimit -m 7340032 \
         /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
    ---------------------------------------------------------------------------

    ※이 run파일은 나중에 smtp auth설정에서 한번 더 바뀌게 됩니다.

   - pop3시동 파일 작성

    . mkdir /var/qmail/supervise/vpop
    . vi /var/qmail/supervice/vpop/run
    ---------------------------------------------------------------------------
    #!/bin/sh
    VPOP_UID=`id -u vpopmail`
    VPOP_GID=`id -g vpopmail`

    exec /usr/local/bin/softlimit -m 6000000 \
         tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \
         /var/qmail/bin/qmail-popup ecstore.co.kr \
         /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
    ---------------------------------------------------------------------------
    
    . chmod a+x /var/qmail/supervise/vpop/run
   
   - Sendmail 데몬 중지 및 옮겨 놓는다.
    
    . /etc/init.d/sendmail stop
    . mv /usr/lib/sendmail /usr/lib/sendmail.org
    . mv /usr/sbin/sendmail /usr/sbin/sendmail.org
    . ln -s /var/qmail/bin/sendmail /usr/lib
    . ln -s /var/qmail/bin/sendmail /usr/sbin

   - 서비스 시작하기
   
    - qmail 데몬 시작 - daemontool이 자동으로 데몬을 시작한다.
    . ln -s /var/qmail/supervise/qmail-send /service/
    . ln -s /var/qmail/supervise/qmail-smtpd /service/
    
    - vpopmail 데몬 시작 - daemontool이 자동으로 데몬을 시작한다.
    . ln -s /var/qmail/supervise/vpop /service

    ** ps -aux 명령으로 해당 데몬이 정상적으로 떠 있는지 확인한다.
        
  ## qmailadmin 과 smtp auth 설정.
    
   - vpopmail을 웹에서 관리하는 도구.
   
   - ezmlm 설치
    . wget http://sylvestre.ledru.info/howto/qmail/ezmlm-idx-0.40.tar.gz
    . wget http://cr.yp.to/software/ezmlm-0.53.tar.gz
    . wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/ezmlm-idx-0.53.400.unified_41.patch 
    
    . tar -zxvf ezmlm-0.53.tar.gz
    . tar -zxvf ezmlm-idx-0.40.tar.gz
    . mv ezmlm-idx-0.40/* ezmlm-0.53/
    . cd ezmlm-0.53
    . patch < idx.patch
    . patch < ../ezmlm-idx-0.53.400.unified_41.patch
   
    . make  
    . make man
    . make setup

   
   - autorespond 설치
    . wget http://www.inter7.com/devel/autorespond-2.0.2.tar.gz
    
    . tar xvfz autorespond-2.0.2.tar.gz
    . cd autorespond-2.0.2
    . vi Makefile
    . INSTALL_DIR = /usr/bin 로 변경
    . make
    . make install
   
   - qmailadmin 설치
    . tar xvfz qmailadmin-1.2.9.tar.gz
    . cd qmailadmin-1.2.9
    .  ./configure --enable-htmldir=/usr/local/apache/htdocs --enable-cgibindir=/usr/local/apache/cgi-bin 
      --enable-autoresponder-bin=/usr/bin --enable-vpopuser=vpopmail 
      --enable-ezmlmdir=/usr/local/bin/ezmlm/ 
      --enable-ezmlmidx=y --enable-modify-quota --disable-ipauth --enable-help 
      --enable-domain-autofill=y
    . make
    . make install-strip
    
    ** 이미지 경로는 도메인의 홈디렉토리임.
       기본적으로 설치후에 이미지 경로는 /usr/local/apache/htdoc 안에 images에 생성된다.

   - smtp_auth
     
    . vi /var/qmail/supervise/qmail-smtpd/run

    -----------------------------------------------------------------------------------------
    #!/bin/sh
    Q_UID=`id -u vpopmail`
    Q_GID=`id -g vpopmail`
    exec /usr/local/bin/softlimit -m 7340032 \
    /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 ecstore.co.kr \
    /home/vpopmail/bin/vchkpw /bin/true 2>&1
    -----------------------------------------------------------------------------------------
    . /etc/rc.d/init.d/qmail restart

   ** 도메인 추가
    . /home/vpopmail/bin/vadddomain ecstore.co.kr
    . 비번입력.
  
  ## 스팸 & 바이러스 차단 툴 설치 - qmail-scanner / spamassassin
    
    - maildrop 설치
     . tar xvfz pcre-7.2.tar.gz
     . cd pcre-7.2
     . ./configure
     . make && make install

     . tar jxpf maildrop-2.0.4.tar.tar -C /backup/app_source/spam/   
        --mandir=/usr/share/man --enable-sendmail=/var/qmail/bin/sendmail 
        --enable-maildrop-uid=root --enable-maildrop-gid=vchkpw --enable-maildirquota 
        --enable-restrict-trusted=1 --enable-trusted-users='root qmaild vpopmail'

     . make install-strip
     . make install-man

    - HTML-Parser 설치.
     . tar xvfz HTML-Tagset-3.10.tar.gz
     . cd HTML-Tagset-3.10
     . perl Makefile.PL
     . make
     . make install
 
     . tar zxfp HTML-Parser-3.56.tar.tar -C /backup/app_source/spam
     . cd HTML-Parser-3.56
     . perl Makefile.PL
     . make
     . make test
     . make install

    -Time-HiRes 설치.
     . tar xvfz Time-HiRes-1.9707.tar.gz
     . cd Time-HiRes-1.9707
     . perl Makefile.PL
     . make
     . make test
     . make install

    - spamAssassin 설치
     . wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-SHA1-2.11.tar.gz
     . tar xvfz Digest-SHA1-2.11.tar.gz 
     . cd Digest-SHA1-2.11
     . perl Makefile.PL
     . make && make install

     . tar xvfz Net-IP-1.25.tar.gz
     . cd Net-IP-1.25
     . perl MakeFile.PL
     . make
     . make install
     
     . tar xvfz Digest-HMAC-1.01.tar.gz
     . cd Digest-HMAC-1.01
     . perl MakeFile.PL
     . make && make install

     . tar xvfz Net-DNS-0.60.tar.gz
     . cd Net-DNS-0.60
     . perl MakeFile.PL
     . make && make install

     . tar xvfz Mail-SpamAssassin-3.2.1.tar.gz
     . cd Mail-SpamAssassin-3.2.1
     . perl MakeFile.PL
     . make
     . make test
     . make install   
    
    - qmail-scanner 설치
     . tar xvfz qmail-scanner-1.16.gz
     . cd qmail-scanner-1.16
     . cp -r locale/en_GB locale/eucKR
     . ./configure --debug no --lang "eucKR" --log-details syslog --unzip yes
     . ./configure --debug no --lang "eucKR" --log-details syslog --install
     . cp -f quarantine-attachments.txt /var/spool/qmailscan/
     . chown qmailq.qmail /var/spool/qmailscan/quarantine-attachments.txt
     . chmod 660 /var/spool/qmailscan/quarantine-attachments.txt
     . chown qmailq.qmail /var/qmail/bin/qmail-scanner-queue.pl
     . chmod 4755 /var/qmail/bin/qmail-scanner-queue.pl
     . /var/qmail/bin/qmail-scanner-queue.pl -g
     . echo 'export QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"' >> /etc/profile
     . export QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
     . /etc/profile
     . . /etc/profile
     . /etc/rc.d/init.d/qmail restart

    ** 설치중에 모듈이 없으면 http://search.cpan.org/ 에서 perl 모듈을 검색해서 설치한다.