리눅스/mail

qmail+vpopmail+dovecot+Roundcube 설치 Centos 6

Rohin 2017. 8. 29. 14:05
반응형

qmail.tar.gz


위파일을 받아서 /home 디렉토리에 풀어놓는다.

> cd /home/haru

> tar zxvf qmail.tar.gz

> cd qmail

> ll

-rwxrwxrwx 1 1000 1000   7300 2017-08-24 15:55 autorespond-2.0.2.tar.gz*

-rwxrwxrwx 1 1000 1000    355 2017-08-24 15:55 daemontools-0.76.errno.patch*

-rwxrwxrwx 1 1000 1000  36975 2017-08-24 15:55 daemontools-0.76.tar.gz*

-rwxrwxrwx 1 1000 1000 357893 2017-08-24 15:55 knetqmail-1.06-20110908.tar.gz*

-rwxrwxrwx 1 1000 1000  37973 2017-08-24 15:55 libdomainkeys-0.68.tar.gz*

-rwxrwxrwx 1 1000 1000   1684 2017-08-24 15:55 qmail-dk-0.54-auth.patch*

-rwxrwxrwx 1 1000 1000    710 2017-08-24 15:55 qmail.sh*

-rwxrwxrwx 1 1000 1000   4432 2017-08-24 15:55 qmaild*

-rwxrwxrwx 1 1000 1000     83 2017-08-24 15:55 svscan.conf*

-rwxrwxrwx 1 1000 1000    330 2017-08-24 15:55 ucspi-tcp-0.88.errno.patch*

-rwxrwxrwx 1 1000 1000  60359 2017-08-24 15:55 ucspi-tcp-0.88.tar.gz*

-rwxrwxrwx 1 1000 1000 612271 2017-08-24 15:55 vpopmail-5.4.33.tar.gz*


1.Qmail 설치


1-1) Qmail 설치전 라이브러리설치

#yum install -y patch wget openssl-devel libtool-ltdl-devel libxml2-devel ncurses-devel

imap-devel


1-2) Ucspi-tcp 설치 ( TCP client-server 구축)


>  cd /usr/local/src

> cp -arp /home/haru/qmail/ucspi-tcp-0.88.* ./

> tar zxvf ucspi-tcp-0.88.tar.gz

> cd ucspi-tcp-0.88

> patch -p1 < ../ucspi-tcp-0.88.errno.patch

> echo "/usr/local" > conf-home

> make

> make setup check


1-3) Daemontools 설치

(Qmail의 모듈을 관리하며 특정 모듈이 제기능을 동작 못할시 모듈을 재시작하는 용도로 사용되어짐)

> cd /usr/local/src

> cp -arp /home/haru/qmail/daemontools-0.76.* ./

> tar zxvf daemontools-0.76.tar.gz

> cd admin/daemontools-0.76

> patch -p1 < ../../daemontools-0.76.errno.patch

> echo "/usr/local" > src/home

> make -C src

> mkdir /service /command

> for i in `cat package/commands`; do cp -a src/$i /usr/local/bin/$i; done

> for i in `cat package/commands`; do ln -sfv /usr/local/bin/$i /command/$i; done


※ CentOS 5 버전과 CentOS 6 버전의 실행 방법이 변경되었습니다.


CentOS 5.x


> echo "SV:345:respawn:/command/svscanboot" >> /etc/inittab

> pkill -1 init


CentOS 6.x


> cd /etc/init/

> cp -arp /home/haru/qmail/svscan.conf ./

> initctl start svscan


CentOS 7.x


> vi /etc/systemd/system/daemontools.service


[Unit]

Description=daemontools Start supervise

After=getty.target


[Service]

Type=simple

User=root

Group=root

Restart=always

ExecStart=/command/svscanboot /dev/ttyS0

TimeoutSec=0


[Install]

WantedBy=multi-user.target


> systemctl start daemontools.service

> systemctl status daemontools.service

> systemctl enable daemontools.service



cp -arp /etc/yum.repos.d /etc/yum.repos.d_org

rm -rf /etc/yum.repos.d/*


echo '[base]

name=CentOS-$releasever - Base

baseurl=http://ftp.daum.net/centos/$releasever/os/$basearch/

gpgcheck=0


[updates]

name=CentOS-$releasever - Updates

baseurl=http://ftp.daum.net/centos/$releasever/updates/$basearch/

gpgcheck=0


[extras]

name=CentOS-$releasever - Extras

baseurl=http://ftp.daum.net/centos/$releasever/extras/$basearch/

gpgcheck=0' > /etc/yum.repos.d/Daum.repo



rpm -Uvh $SOURCE_ADDR/epel-release-7-1.noarch.rpm

yum repolist


yum -y install \

gcc* \

make \

libtool-ltdl-devel \

openssl-devel \

pcre-devel \

ncurses-devel \

libxml2-devel \

bzip2-devel \

curl-devel \

gdbm-devel \

libjpeg-devel \

libpng-devel \

freetype-devel \

libc-client-devel \

krb5-devel \

libmcrypt-devel \

pam-devel \

flex


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


# ps -ef | grep -E 'svscan|errors'

root       734     1  0 Aug26 ?        00:00:00 /bin/sh /command/svscanboot

root       745   734  0 Aug26 ?        00:00:06 svscan /service

root       746   734  0 Aug26 ?        00:00:00 readproctitle service errors: .............................................................................................................................................................................................................................................................................................................................................................................hostname: Host name lookup failure?

root     10732 10636  0 13:26 pts/0    00:00:00 grep --color=auto -E svscan|errors


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


위와같이 나와야 정상적으로 실행이된것임


1-4) Qmail, vpopmail을 위한 계정 및 그룹 생성


> cd /usr/local/src

> cp -arp /home/haru/qmail/qmail.sh ./

> sh qmail.sh


1-5) vpopmail 설치

※ Qmail 버전이 변경되면서 vpopmail을 우선적으로 설치하여야 정상적으로 설치가 가능합니다.


> mkdir -p /var/qmail/bin

> touch /var/qmail/bin/qmail-newu

> touch /var/qmail/bin/qmail-inject

> touch /var/qmail/bin/qmail-newmrh


※ vpopmail은 cdb(Sendmail처럼 자체적으로 관리)와 MySQL을 이용한 도메인 및 관리를 합니다


MySQL 관리 형태 (MySQL 설치는 이 문서에서는 생략 하였습니다.)

> cd /usr/local/src

> cp -arp /home/haru/qmail/vpopmail-5.4.33.tar.gz ./

> tar zxvf vpopmail-5.4.33.tar.gz

> cd vpopmail-5.4.33

> ./configure \

--prefix=/home/vpopmail \

--enable-vpopuser=vpopmail \

--enable-vpopgroup=vchkpw \

--enable-tcprules-prog=/usr/local/bin/tcprules \

--enable-tcpserver-file=/etc/tcprules.d/tcp.smtp \

--disable-users-big-dir \

--enable-qmail-ext \

--enable-domainquotas \

--enable-logging=v \

--enable-log-name=vpopmail \

--enable-valias \

--disable-many-domains \

--enable-auth-module=mysql \

--enable-incdir=/usr/local/mysql/include/mysql \

--enable-libdir=/usr/local/mysql/lib/mysql


*Centos7의 경우 –enable-incdir=/usr/local/mysql/include/myslq →

--enable-incdir=/usr/local/mysql/include/ 로변경

--enable-libdir=/usr/local/mysql/lib/mysql → --enable-libdir=/usr/local/mysql/lib/ 로 변경


> make

> make install-strip


MySQL DB 연동을 위한 설정 파일 생성


> vi /home/vpopmail/etc/vpopmail.mysql

localhost|0|DB_USER|PASSWORD|DB_NAME (서버의 MYSQL 접속정보에 맞도록 수정한뒤 저장)


> rm -rf /var/qmail


- mysql db 추가
create database vpopmail;
grant all privileges on vpopmail.* to vpopmail@localhost identified by 'password' with grant option;
flush privileges;


CDB 관리 형태 (Sendmail처럼 자체적 관리)


> cd /usr/local/src

> cp -arp /home/haru/qmail/vpopmail-5.4.33.tar.gz ./

> tar zxvf vpopmail-5.4.33.tar.gz

> cd vpopmail-5.4.33

> ./configure \

--prefix=/home/vpopmail \

--enable-vpopuser=vpopmail \

--enable-vpopgroup=vchkpw \

--enable-tcprules-prog=/usr/local/bin/tcprules \

--enable-tcpserver-file=/etc/tcprules.d/tcp.smtp \

--disable-users-big-dir \

--enable-qmail-ext \

--enable-domainquotas \

--enable-logging=v \

--enable-log-name=vpopmail \

--enable-valias \

--disable-many-domains \

> make

> make install-strip

> rm -rf /var/qmail

자체적으로 관리하므로 별도의 설정 파일은 없습니다.


1-6) Libdomainkeys 설치

( Yahoo에서 주도하여 개발된 인증 방법이며 발신지 변조 방지 기술입니다.)

> cd /usr/local/src

> cp -arp /home/haru/qmail/libdomainkeys-0.68.tar.gz ./

> tar xfz libdomainkeys-0.68.tar.gz

> mv libdomainkeys-0.68 libdomainkeys

> cd libdomainkeys

> echo "-lresolv" > dns.lib

> make


1-7) Qmail 설치


> Qmail은 1.03버전에서 릴리즈가 더이상 없으며 (1998년도에 배포된 버전이 최신) kldp.net에서 knetQmail의 이름으로 1.06 버전이 배포가 되고 있습니다.


> ※ knetqmail 의 경우 설치 파일은 qmail.kldp.net 에서 받는것이 원칙 입니다 .


> cd /usr/local/src

> cp -arp /home/haru/qmail/knetqmail-1.06-20110908.tar.gz ./

> cp -arp /home/haru/qmail/qmail-dk-0.54-auth.patch ./

> tar zxvf knetqmail-1.06-20110908.tar.gz

> cd knetqmail-1.06-20110908

> patch -p0 < ../qmail-dk-0.54-auth.patch

> echo "gcc -O2 -g -DTLS=20070408 -I/usr/include/openssl -I/home/vpopmail/include" > conf-cc

> echo "gcc -s -O2 -g" > conf-ld

> make

> make setup check

> cp -a spfquery /var/qmail/bin


> cp -a /var/tmp/libdomainkeys/dknewkey /var/qmail/bin 또 는

cp -a /usr/local/src/qmail/libdomainkeys/dknewkey /var/qmail/bin


> chown root:qmail /var/qmail/bin/spfquery /var/qmail/bin/dknewkey

> chmod 755 /var/qmail/bin/spfquery /var/qmail/bin/dknewkey

※ 설치 도중 OPEN-SSL이 필요한부분이 있으며 이부분은 yum을 통해 설치를 하면 해결 됩니다.


설정 파일 생성

> cd /var/qmail/control

> touch rcpthosts smtproutes

> echo "localhost"

> locals

> echo "your-domain.com" > me

> echo "your-domain.com" > defaultdomain

> echo "your-domain.com" > defaulthost

> echo "your-domain.com" > plusdomain

> echo "60" > concurrencyremote

> echo "100"> concurrencyincoming

> echo "86400" > queuelifetime

> echo "1" > spfbehavior

> echo "Welcome to Qmail SMTP Server" > smtpgreeting

> echo "./Maildir/" > defaultdelivery

> chmod 644 *

> cd /var/qmail/users

> touch cdb

> echo "." > assign

> chmod 644 *


1-8) Qmail 데몬을 위한 디렉토리 생성 및 설정파일 생성


> mkdir -p /var/qmail/supervise

> for i in send smtp pop3 submission; do mkdir -p /var/qmail/supervise/$i/log; done


> vi /var/qmail/rc

#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \

qmail-start "`cat /var/qmail/control/defaultdelivery`"


> vi /var/qmail/supervise/send/run

#!/bin/sh

exec /var/qmail/rc


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

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail/send 2>&1


> vi /var/qmail/supervise/smtp/run

#!/bin/sh

VPOP_UID=`id -u vpopmail`

VPOP_GID=`id -g vpopmail`

MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`

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

/usr/local/bin/tcpserver -vRHl0 \

-x /etc/tcprules.d/tcp.smtp.cdb \

-c ${MAXSMTPD} \

-u ${VPOP_UID} -g ${VPOP_GID} 0 25 \

/var/qmail/bin/qmail-smtpd \

/home/vpopmail/bin/vchkpw /bin/true 2>&1


> vi /var/qmail/supervise/smtp/log/run

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail/smtp 2>&1


> vi /var/qmail/supervise/pop3/run

#!/bin/sh

VPOP_UID=`id -u vpopmail`

VPOP_GID=`id -g vpopmail`

HOSTNAME=`hostname -f`

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

/usr/local/bin/tcpserver -vRHl0 \

-u ${VPOP_UID} -g ${VPOP_GID} 0 110 \

/var/qmail/bin/qmail-popup ${HOSTNAME} \

/home/vpopmail/bin/vchkpw \

/var/qmail/bin/qmail-pop3d Maildir 2>&1


> vi /var/qmail/supervise/pop3/log/run

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail/pop3 2>&1


> vi /var/qmail/supervise/submission/run

#!/bin/sh

VPOP_UID=`id -u vpopmail`

VPOP_GID=`id -g vpopmail`

MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`

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

/usr/local/bin/tcpserver -vRHl0 \

-x /etc/tcprules.d/tcp.smtp.cdb \

-c ${MAXSMTPD} \

-u ${VPOP_UID} -g ${VPOP_GID} 0 587 \

/var/qmail/bin/qmail-smtpd \

/home/vpopmail/bin/vchkpw /bin/true 2>&1


> vi /var/qmail/supervise/submission/log/run

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail/submission 2>&1


1-9) Qmail 디렉토리 및 파일 권한 설정


> chmod 755 /var/qmail/rc

> chown root:qmail /var/qmail/rc

> chmod 700 /var/qmail/supervise

> chown -R qmaill:qmail /var/qmail/supervise

> for i in send smtp pop3 submission; do chmod 1700 /var/qmail/supervise/$i; done

> for i in send smtp pop3 submission; do chmod 700 /var/qmail/supervise/$i/log; done

> for i in send smtp pop3 submission; do chmod 751 /var/qmail/supervise/$i/run; done

> for i in send smtp pop3 submission; do chmod 751 /var/qmail/supervise/$i/log/run; done


1-10) tcp.smtp 설정


> mkdir -p /etc/tcprules.d

> vi /etc/tcprules.d/tcp.smtp

127.0.0.1:allow,RELAYCLIENT="",CHKUSER_RCPTLIMIT="50",CHKUSER_WRONGRCPTLIMIT="10"

:allow,CHKUSER_RCPTLIMIT="50",CHKUSER_WRONGRCPTLIMIT="10"

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


1-11) Qmail Log 디렉토리 생성 및 권한 설정


> for i in send smtp pop3 submission; do mkdir -p /var/log/qmail/$i; done

> chmod -R 750 /var/log/qmail

> chown -R qmaill:qmail /var/log/qmail



1-12) Qmail 실행 스크립트 생성 및 권한 설정


> cd /etc/init.d/

> cp -arp /home/haru/qmail/qmaild ./

> chmod 755 /etc/init.d/qmaild

> chkconfig --add qmaild

> chkconfig --level 345 qmaild



1-13) Qmail 시작 및 데몬리스트와 pstree 구조 확인



> /etc/init.d/qmaild start

※ 아래와 같이 25 번 포트와 110 번 포트를 점유하는 tcpserver 데몬이 올라와야 정상 입니다.

tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      772/tcpserver       

tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN      769/tcpserver

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


※ pstree에서 아래와 같이 tree를 이루어지는 경우 정상 실행 입니다.


├─svscanboot─┬─readproctitle

     │            └─svscan─┬─3*[supervise───tcpserver]

     │                     ├─4*[supervise───multilog]

     │                     └─supervise───qmail-send─┬─qmail-clean

     │                                              ├─qmail-lspawn

     │                                              └─qmail-rspawn



2. dovecot 설치 (소스)


2-1) openssl openssl-devel 패키지 설치 (ssl 기반의 imap 이용시 요구됨. 필요 없다면 생략 가능)

# yum -y install openssl openssl-devel


2-2) RPM으로 설치된 Dovecot 제거

# yum -y remove dovecot


2-3) 소스로 설치될 Dovecot 사용자, 그룹 생성

# groupadd -g 97 dovecot

# useradd -g 97 -u 97 -d /usr/local/libexec/dovecot -s /sbin/nologin dovecot


2-4) Dovecot 소스 최신 버전 다운로드 (현재 최신 버전은 dovecot-1.1.3.tar.gz 이었음)

http://www.dovecot.org/download.html

# wget http://www.dovecot.org/releases/1.1/dovecot-1.1.3.tar.gz


2-5) 압축 해제

# tar zxvf dovecot-1.1.3.tar.gz


2-6) Configure (필수 옵션 : --with-vpopmail)

# ./configure --with-vpopmail --with-ssl=openssl


2-7) 컴파일 & 설치

# make

# make install


2-8) "vpopmail" 유저 uid 번호 확인

# id -u vpopmail


2-9) Dovecot 설정파일 생성

아래 내용에서, [first_valid_uid = 508] 부분의 숫자를 (8)번 과정에서 확인한 번호로 수정한 후, /usr/local/etc/dovecot.conf 파일로 저장

(필요한 경우, protocols 부분은 적당히 수정)


# vi /usr/local/etc/dovecot.conf


 ## Ex) protocols = imap imaps pop3 pop3s

protocols = imap

listen = *

ssl_disable = yes

disable_plaintext_auth = no

login_process_per_connection = no

login_greeting = Ready

mail_debug = yes

first_valid_uid = 508

protocol imap {

}

auth_verbose = yes

auth_debug = yes

auth default {

 mechanisms = plain

 passdb vpopmail {

 }

 userdb vpopmail {

 }

 user = vpopmail

}


편의상 /usr/local/etc/dovecot.conf파일을 /etc/dovecot.conf로 심볼릭링크를 건다.

ln -s /usr/local/etc/dovecot.conf /etc/dovecot.conf


2-10) Dovecot init 스크립트 생성


# vi /etc/init.d/dovecot

 #!/bin/bash

#

#   /etc/rc.d/init.d/dovecot

#

# Starts the dovecot daemon

#

# chkconfig: - 65 35

# description: Dovecot Imap Server

# processname: dovecot

# Source function library.

. /etc/init.d/functions


test -x /usr/local/sbin/dovecot || exit 0


RETVAL=0

prog="Dovecot Imap"


start() {

        echo -n $"Starting $prog: "

    daemon /usr/local/sbin/dovecot

    RETVAL=$?

    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dovecot

    echo

}


stop() {

    echo -n $"Stopping $prog: "

    killproc /usr/local/sbin/dovecot

    RETVAL=$?

    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/dovecot

    echo

}


#

#   See how we were called.

#

case "$1" in

  start)

    start

    ;;

  stop)

    stop

    ;;

  reload|restart)

    stop

    start

    RETVAL=$?

    ;;

  condrestart)

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

        stop

        start

    fi

    ;;

  status)

    status /usr/local/sbin/dovecot

    RETVAL=$?

    ;;

  *)

    echo $"Usage: $0 {condrestart|start|stop|restart|reload|status}"

    exit 1

esac


exit $RETVAL



2-11) Dovecot init스크립트 권한 조정

# chmod 700 /etc/init.d/dovecot

# chown root:root /etc/init.d/dovecot


2-12) ntsysv 등록

# chkconfig --add dovecot

# chkconfig --level 345 dovecot on


2-13) dovecot 실행

#/etc/init.d/dovecot start


2-14) /var/log/message에 Dovecot 작동 로그에 특별한 에러가 보이지 않는다면, 정상 설치 된 것임.



3.Roundcube 설치


> cd /usr/local/src

> https://github.com/roundcube/roundcubemail/releases/download/1.3.0/roundcubemail-1.3.0-complete.tar.gz

> tar zxvf roundcubemail-1.3.0-complete.tar.gz

> mv roundcubemail-1.3.0 /home/haru/webmail


logs와 temp 디렉토리의 접근권한을 변경합니다.

     # cd /home/haru/webmail
     # chmod 707 logs temp

>>vhost 설정


>vi /usr/local/apache/conf/extra/httpd-vhosts.conf


<VirtualHost *:80>
    DocumentRoot “/home/haru/webmail”
    ServerName mail.harulife.co.kr
    ErrorLog “logs/mail.harulife.co.kr-error_log”

    CustomLog “logs/mail.harulife.co.kr-access_log” combined

</VirtualHost>


apache 재시작후 mail.harulife.co.kr/installer 로 접근한다.



위부분에서 not ok 부분을 다 해결해준뒤 next로 넘어간다.




위부분을 복사하거나 다운로드하여 /home/haru/webmail/config/config.inc.php  파일로 저장한다.




위와같은부분에 빈칸을 채워준뒤 test로 넘어오며

test단계에서 mime.types 관련 오류가발견되면


config.inc.php 파일에

$config['mime_types'] = '/usr/local/apache/conf/mime.types';

위구문을 추가해준다.


roundcube 와 vpopmail 연동이 잘안될시에는 db연결부분을 확인해준다.


'리눅스 > mail' 카테고리의 다른 글

sendmail 큐 삭제  (0) 2014.11.23
sendmail 계정 추가  (0) 2014.11.23
메일 전송 테스트  (0) 2014.11.23
서버에서 외부로 메일 전송이 되지 않을때 확인.  (0) 2014.11.23
mail 발송 테스트  (0) 2014.11.23