작성자 : 김용복 (ruo91@yongbok.net) – 2010/03/16 PM 8:39
원제목 : FreeBSD – Qmail 메일 서버 구축
환 경 : FreeBSD 8.0
설치순 : mysql – > ucspi-tcp -> daemontools – > qmail -> vpopmail
준비물 : ucspi-tcp, daemontools, mysql, qmail, autorespond, vpopmail

0. Ports 목록 업데이트
cvsup 으로 최신의 Ports 목록을 갱신 해줍니다. 이미 업데이트 하신 분이라면 넘어 가셔도 무방합니다.
[root@yongbok ~]# cd /usr/ports/net/cvsup-without-gui && make install clean

Ports 목록을 업데이트 하기 위한 설정 파일을 복사합니다.
[root@yongbok ~]# cp /usr/share/examples/cvsup/ports-supfile /etc

Ports 목록을 업데이트 해줍니다.
[root@yongbok ~]# cvsup -L2 /etc/ports-supfile

1. MySQL 설치
[root@yongbok ~]# cd /usr/ports/databases/mysql51-server
[root@yongbok ~]# make WITH_CHARSET=euckr BUILD_OPTIMIZED=yes BUILD_STATIC=yes install clean

MySQL 시작
[root@yongbok ~]# echp ‘mysql_enable=”YES”‘ >> /etc/rc.conf
[root@yongbok ~]# /usr/local/etc/rc.d/mysql-server start

루트 비밀번호 설정
[root@yongbok ~]# mysqladmin -u root password ‘123456’

vpopmail 에 사용할 사용자 및 데이터베이스 생성
[root@ruo91 ~]# mysql -u root -p
mysql> GRANT ALL ON vpopmail.* TO ‘vpopmaill’@’localhost’ IDENTIFIED BY ‘123456 WITH GRANT OPTION;

MySQL 데이터베이스 생성
mysql> CREATE DATABASE vpopmail;
mysql> flush privileges;
mysql> exit

2. ucspi-tcp 설치
[root@yongbok ~]# cd /usr/ports/sysutils/ucspi-tcp && make install clean

3. daemontools 설치
MAN, S_NORMAL, TESTS 3가지 옵션이 기본으로 선택 되어 있으므로 그냥 설치 해줍니다.
[root@yongbok ~]# cd /usr/ports/sysutils/daemontools && make install clean

/etc/rc.conf 파일에 svscan 을 활성화 시켜 줍니다.
[root@yongbok ~]# echo ‘svscan_enable=”YES”‘ >>/etc/rc.conf

4. Qmail 설치
필자는 ports 설치시 오류가나 바이너리로 설치 했습니다.
[root@yongbok ~]# cd /usr/ports/mail/qmail && make install clean

qmail 활성화
[root@yongbok ~]# echo ‘qmail_smtp_enable=”YES”‘ >> /etc/rc.conf
[root@yongbok ~]# echo ‘qmail_pop_enable=”YES”‘ >> /etc/rc.conf
[root@yongbok ~]# echo ‘qmail_enable=”YES”‘ >> /etc/rc.conf

5. Sendmail 비활성화
FreeBSD 에서는 기본으로 Sendmail 을 사용하도록 되어 있기 때문에 실행 되지 않도록 설정 해줍니다.
(“NONE” 으로 준 이유는 “NO” 로 해도 Sendmail 이 실행 되기 때문에…)
[root@yongbok ~]# echo ‘sendmail_enable=”NONE”‘ >> /etc/rc.conf

기본 sendmail 을 old 로 변경 후 qmail 에 있는 sendmail 로 대체
[root@yongbok ~]# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
[root@yongbok ~]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
[root@yongbok ~]# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

6. autorespond 설치
[root@yongbok ~]# cd /usr/ports/mail/autorespond && make install clean

7. Qmail 설정
– Qmail 로그 디렉토리 생성
[root@yongbok ~]# mkdir /var/log/qmail
[root@yongbok ~]# cd /var/log/qmail
[root@yongbok ~]# mkdir qmail-send qmail-smtpd qmail-pop3d
[root@yongbok ~]# chown -R qmaill:wheel /var/log/qmail
[root@yongbok ~]# chmod -R 750 /var/log/qmail

– Qmail 기본 도메인 설정
[root@yongbok ~]# /var/qmail/configure/config-fast yongbok.net

– supervise 디렉토리 설정
[root@yongbok ~]# mkdir /var/qmail/supervise
[root@yongbok ~]# cd /var/qmail/supervise
[root@yongbok ~]# mkdir -p qmail-smtpd/log qmail-send/log qmail-pop3d/log
[root@yongbok ~]# chmod +t qmail-smtpd qmail-send qmail-pop3d

– 도메인 설정 파일 생성
[root@yongbok ~]# ee /var/qmail/rc
#!/bin/sh
exec env – PATH=”/var/qmail/bin:$PATH” \
qmail-start “`cat /var/qmail/control/defaultdelivery`”

[root@yongbok ~]# ee /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc

[root@yongbok ~]# ee /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-send 2>&1

[root@yongbok ~]# ee /var/qmail/supervise/qmail-pop3d/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec tcpserver -H -R -v -c100 0 110 qmail-popup yongbok.net \
/usr/local/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1

[root@yongbok ~]# ee /var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1

방송통신위원회/KISA 에서 스팸과 좀비 공격을 줄이기 위해 ISP의 25번 포트 차단으로 인해 587 포트로 사용하도록 설정 해줬습니다. (필자는 25 열려 있다능.. ~ㅅ~)
[root@yongbok ~]# cat /etc/services | grep 587
submission 587/tcp
submission 587/udp

[root@yongbok ~]# ee /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
if [ -z “$QMAILDUID” -o -z “$NOFILESGID” -o -z “$MAXSMTPD” -o -z “$LOCAL” ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/qmail/control/rcpthosts ]; then
echo “No /var/qmail/control/rcpthosts!”
echo “Refusing to start SMTP listener because it’ll create an open relay”
exit 1
fi
exec /usr/local/bin/softlimit -m 30000000 \
/usr/local/bin/tcpserver -v -R -l “$LOCAL” -x /usr/local/vpopmail/etc/tcp.smtp.cdb -c “$MAXSMTPD” \
-u “$QMAILDUID” -g “$NOFILESGID” 0 submission \
/var/qmail/bin/qmail-smtpd yongbok.net \
/usr/local/vpopmail/bin/vchkpw /usr/bin/true 2>&1

[root@yongbok ~]# echo ’20’ > /var/qmail/control/concurrencyincoming

[root@yongbok ~]# ee /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1

위에서 만든 설정 파일들의 실행 권한 반영
[root@yongbok ~]# chmod 755 /var/qmail/rc
[root@yongbok ~]# chmod 755 /var/qmail/supervise/qmail-send/run
[root@yongbok ~]# chmod 755 /var/qmail/supervise/qmail-send/log/run
[root@yongbok ~]# chmod 755 /var/qmail/supervise/qmail-smtpd/run
[root@yongbok ~]# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
[root@yongbok ~]# chmod 755 /var/qmail/supervise/qmail-pop3d/run
[root@yongbok ~]# chmod 755 /var/qmail/supervise/qmail-pop3d/log/run

서비스할 디렉토리 생성 및 링크
[root@yongbok ~]# mkdir /var/service
[root@yongbok ~]# ln -s /var/qmail/supervise/qmail-send /var/service/
[root@yongbok ~]# ln -s /var/qmail/supervise/qmail-smtpd /var/service/

8. vpopmail 설치
[root@yongbok ~]# cd /usr/ports/mail/vpopmail
[root@yongbok ~]# make WITH_MYSQL=yes QMAIL_PREFIX=/var/qmail install clean

9. vpopmail 설정
– vpopmail 에 사용할 기본 도메인 설정
[root@yongbok ~]# cd /usr/local/vpopmail/etc
[root@yongbok ~]# echo ‘yongbok.net’ > defaultdomain
[root@yongbok ~]# chown vpopmail defaultdomain
[root@yongbok ~]# chgrp vchkpw defaultdomain
[root@yongbok ~]# cp vpopmail.mysql-dist vpopmail.mysql
[root@yongbok ~]# chmod 640 vpopmail.mysql

– MySQL 연동 설정
기본 예제
[root@yongbok ~]# echo ‘localhost|포트|사용자ID|비밀번호|DB이름’ >> vpopmail.mysql

실제 사용예
[root@yongbok ~]# echo ‘localhost|3306|vpopmail|123456|vpopmail’ >> vpopmail.mysql

– tcp.smtp 설정
[root@yongbok ~]# chmod 640 tcp.smtp

tcp.smtp.cdb 파일 생성
[root@yongbok ~]# ../bin/clearopensmtp

– 가상 도메인 설정
[root@yongbok ~]# ../bin/vadddomain yongbok.net
Please enter password for postmaster:
enter password again:

가상 사용자를 생성
[root@yongbok ~]# ../bin/vadduser ruo91@yongbok.net 123456

pop3 데몬을 서비스 링크
[root@yongbok ~]# ln -s /var/qmail/supervise/qmail-pop3d /var/service/

svscan 실행
[root@yongbok ~]# /usr/local/etc/rc.d/svscan start
Starting svscan.

Qmail 프로세스 확인
[root@yongbok ~]# ps -x | grep qmail
34662 ?? I 0:00.00 supervise qmail-send
34664 ?? I 0:00.00 supervise qmail-smtpd
34666 ?? I 0:00.00 supervise qmail-pop3d
34673 ?? I 0:00.01 tcpserver -H -R -v -c100 0 110 qmail-popup yongbok.net /usr/local/vpopmail/bin/vchkpw qmail-pop3d Maildir
34678 ?? I 0:00.00 qmail-lspawn

DNS 서버의 MX 레코드 추가
MX 레코드는 Bind 기준으로 설명 드리며 아래 처럼 Zone 파일마다 MX 레코드를 추가 해준 후 네임서버를 재시작 해주면 됩니다.
$TTL10
@ IN SOA ns.yongbok.net. ruo91.yongbok.net.
(
2010031215; Serial
604800 ; Refresh
86400 ; Retry
2419200; Expire
86400 ; Minimum
)
@IN NS ns.yongbok.net.
MX10 yongbok.net.

[root@yongbok ~]# /etc/rc.d/named restart
Stopping named.
Starting named.

이후 외부에서 메일이 보내지는지 확인 해보면 됩니다.

참고
http://qmail.kldp.net
http://logicsquad.net/freebsd/qmail-how-to.html