2011年03月30日

[Linux] CentOS5でメールサーバ構築(qmail + tcpserver + libev + vpopmail + qmail-conf + daemontools)

何度かqmailでメールサーバを構築している割には手順を理解していなかったので、まとめてみました。
構築手順の概要は以下です。
1.qmailのインストールと設定
2.tcpserverのインストールと設定
3.libevのインストール
4.vpopmailのインストールと設定
5.qmail-confのインストール
6.daemontoolsのインストールと設定
7.daemontoolsでのqmail運用
daemontoolsを使用しないなら4まで、更に複数ドメインで運用しないなら2まで設定します。


1.qmailのインストールと設定
・qmail用ディレクトリ作成、グループ作成、ユーザ作成
# mkdir /var/qmail

# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
# useradd -g nofiles -d /var/qmail -s /bin/false qmaild
# useradd -g nofiles -d /var/qmail -s /bin/false qmaill
# useradd -g nofiles -d /var/qmail -s /bin/false qmailp

# groupadd qmail
# useradd -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -g qmail -d /var/qmail -s /bin/false qmails
・qmail、パッチのダウンロード
# cd /usr/local/src/
# wget http://qmail.org/netqmail-1.06.tar.gz
# wget http://qmail.org/qmail-smtpd-relay-reject
# wget http://www.tymy.net/~matsu/blog/wp-content/uploads/2008/03/qmail-date-localtime.patch
・qmail解凍、パッチ適用、コンパイル、インストール
# tar xvfz netqmail-1.06.tar.gz
# cd netqmail-1.06
# patch -p1 < ../qmail-date-localtime.patch
# patch -p1 < ../qmail-smtpd-relay-reject
# make setup
# make check
# ./config-fast example.com
・コントロールファイルの編集、作成
# cd /var/qmail/control/
# vi locals
localhost
example.com
localhostを追加する。
# vi rcpthosts
localhost
example.com
localhostを追加する。

・重要エイリアスの作成と転送先の設定
# cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# chown alias:qmail .qmail-postmaster .qmail-mailer-daemon .qmail-root
# echo root > .qmail-postmaster
# echo root > .qmail-mailer-daemon
# echo foo@example.com > .qmail-root
postmasterとmailer-daemon宛のメールはrootへ転送。root宛のメールは外部メールアドレスへ転送。

・sendmailの停止とラッパー
# /etc/rc.d/init.d/sendmail stop
# mv /etc/rc.d/rc2.d/S80sendmail /etc/rc.d/rc2.d/_S80sendmail
# mv /etc/rc.d/rc3.d/S80sendmail /etc/rc.d/rc3.d/_S80sendmail
# mv /etc/rc.d/rc5.d/S80sendmail /etc/rc.d/rc5.d/_S80sendmail
# cd /usr/sbin
# mv sendmail sendmail.dist
# chmod 0 sendmail.dist
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
他のsmtpサーバが起動しているとqmailでメールが送信できないので、sendmailが起動していたら停止させる。
また、sendmailが起動されたら、qmailが起動するように設定する。

・postfix(SMTPサーバの停止)
# /etc/rc.d/init.d/dovecot stop
# /sbin/chkconfig --list | grep dovecot
# /sbin/chkconfig --level 2345 dovecot off
他のsmtpサーバが起動しているとqmailでメールが送信できないので、postfixが起動していたら停止させる。

・dovecot(POP3サーバ等の停止)
# /etc/rc.d/init.d/postfix stop
# /sbin/chkconfig --list | grep postfix
# /sbin/chkconfig --level 2345 postfix off
他のpop3サーバが起動しているとqmailでメールが受信できないので、dovecotが起動していたら停止させる。

・Maildirディレクトリの作成
# /var/qmail/bin/maildirmake ~alias/Maildir
# chown -R alias /var/qmail/alias/Maildir
# /var/qmail/bin/maildirmake /etc/skel/Maildir
・qmail起動スクリプトの作成
# cp /var/qmail/boot/home /var/qmail/rc
# vi /var/qmail/rc
#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail
./Mailboxを./Maildir/に変更する。

・qmailの起動と動作確認
# /var/qmail/rc &
# echo to: root@example.com | /var/qmail/bin/qmail-inject
# kill [プロセス番号]


2.tcpserverのインストールと設定
・tcpserverのダウンロード
# cd /usr/local/src/
# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
・tcpserverのインストール(netqmail-1.06のソースが必要)
# tar xvfz ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# patch -p1 < ../netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
# make setup check
・cdbの作成
# cd /etc
# echo '192.168.:allow,RELAYCLIENT=""' > tcp.smtp
# echo '127.:allow,RELAYCLIENT=""' >> tcp.smtp
# echo 'xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""' >> tcp.smtp
# echo ':allow' >> tcp.smtp
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
・tcpserver起動スクリプトの作成
# id qmaild
uid=502(qmaild) gid=501(nofiles) 所属グループ=501(nofiles)
uidとgidの数値を確認する。上記の例ではuidが502、gidが501。
# vi /etc/rc.d/init.d/qmail
#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/rc ] || exit 0

case "$1" in
start)
# Start daemons.
echo "Starting qmail."
csh -cf '/var/qmail/rc &'
tcpserver -v -u 502 -g 501 -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
echo
touch /var/lock/qmail
;;
stop)
# Stop daemons.
echo "Shutting down qmail."
PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
echo
rm -f /var/lock/qmail
;;
*)
echo "Usage: S99qmail {start|stop}"
exit 1
esac

exit 0
先程確認したuidとgidの数値を設定する。

・tcpserverの起動と動作確認
# chmod 755 /etc/rc.d/init.d/qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S99qmail
# /etc/rc.d/init.d/qmail start
外部からroot@example.com宛にメールを送信し、受信できるか確認する。


3.libevのインストール
vpopmail-5.5.0の./configureでの「WARNING:libev not found」を回避する。

・libevのダウンロード
# cd /usr/local/src/
# wget http://dist.schmorp.de/libev/libev-4.04.tar.gz
・libevをインストール
# tar xvfz libev-4.04.tar.gz
# cd libev-4.04
# ./configure && make && make install


4.vpopmailのインストールと設定
・vpopmail用グループ作成、ユーザ作成
# groupadd -g 89 vchkpw
# useradd -g vchkpw -u 89 vpopmail
・vpopmail用コントロールファイルの作成
# touch /var/qmail/control/virtualdomains
・vpopmailのダウンロード
# cd /usr/local/src/
# wget http://sourceforge.net/projects/vpopmail/files/vpopmail-devel/5.5.0/vpopmail-5.5.0.tar.bz2/download
・vpopmailの解凍、コンパイル、インストール
# cd /usr/local/src/
# tar xvfj vpopmail-5.5.0.tar.bz2
# cd /usr/local/src/vpopmail-5.5.0
# ./configure --prefix=/home/vpopmail --enable-roaming-users=y --enable-relay-clear-minutes=15 --disable-clear-passwd --enable-logging=y
# make
# make install-strip
・認証系モジュールのインストール
# cd vpopmail-5.5.0/backends/cdb
# ./configure && make && make install
./vadddomainでの「Error - no authentication module loaded.」を回避する。

・フォルダのアクセス権限の変更
# chmod 755 /home/vpopmail
「warning: dropping connection, unable to read /home/vpopmail/etc/tcp.smtp.cdb: access denied」を回避する。

・バーチャルドメインの追加
# cd /home/vpopmail/bin/
# ./vadddomain test.example.com
(パスワードを入力)
# ./vadduser info@test.example.com
(パスワードを入力)
・vpopmail用cdbの作成
# cd /home/vpopmail/etc
# echo '192.168.:allow,RELAYCLIENT=""' > tcp.smtp
# echo '127.:allow,RELAYCLIENT=""' >> tcp.smtp
# echo 'xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""' >> tcp.smtp
# echo ':allow' >> tcp.smtp
# /usr/local/bin/tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
# chown -R vpopmail:vchkpw /home/vpopmail/etc
・cronの設定
# crontab -e
*/15 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
rootのcronに設定。15分毎にIPアドレスを整理する。

・vpopmail対応tcpserver起動スクリプトの作成
# /etc/rc.d/init.d/qmail stop
# mv /etc/rc.d/init.d/qmail /etc/rc.d/init.d/qmail.qmail
# chmod 0 /etc/rc.d/init.d/qmail.qmail
# vi /etc/rc.d/init.d/qmail
#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/rc ] || exit 0

case "$1" in
start)
# Start daemons.
echo "Starting qmail."
csh -cf '/var/qmail/rc &'

#Vsmtp
/usr/local/bin/tcpserver -H -R -l example.com -v -x /home/vpopmail/etc/tcp.smtp.cdb -u 502 -g 501 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

#Vpop
/usr/local/bin/tcpserver -H -R -l example.com -v 0 pop3 /var/qmail/bin/qmail-popup example.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 &

echo
touch /var/lock/qmail
;;
stop)
# Stop daemons.
echo "Shutting down qmail."
PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
echo
rm -f /var/lock/qmail
;;
*)
echo "Usage: S99qmail {start|stop}"
exit 1
esac

exit 0
・vpopmail対応tcpserverの起動と動作確認
# chmod 755 /etc/rc.d/init.d/qmail
# /etc/rc.d/init.d/qmail start
外部からinfo@test.example.com宛にメール送信してみる。

・メインドメインのバーチャルドメイン化
# cd /home/vpopmail/bin/
# ./vadddomain example.com
(パスワードを入力)
# ./vadduser info@example.com
(パスワードを入力)
・コントロールファイルの編集
# vi /var/qmail/control/locals
メインドメインが残っていたら削除し、中身をlocalhostのみに変更する。
# cp /var/qmail/alias/.qmail-* /home/vpopmail/var/vpopmail/example.com/
# chown vpopmail:vchkpw /home/vpopmail/var/vpopmail/example.com/.qmail-*


5.qmail-confのインストール
・qmail-conf、djbdnsのダウンロード
# cd /usr/local/src/
# wget http://www.din.or.jp/~ushijima/qmail-conf/qmail-conf-0.60.tar.gz
# wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
・qmail-conf、djbdnsの解凍
# tar zxvf qmail-conf-0.60.tar.gz
# tar zxvf djbdns-1.05.tar.gz
・extern int errno; を #include に変更
# cd djbdns-1.05/
# vi error.h
extern int errno;

#include
・qmail-confのコンパイル、インストール
# cd /usr/local/src/qmail-conf-0.60
# make -f Makefile.ini djbdns=../djbdns-1.05
# make
# make setup check
daemontoolsでの起動設定を簡単にするtool。


6.daemontoolsのインストールと設定
・vpopmail対応tcpserverの停止
# /etc/rc.d/init.d/qmail stop
# mv /etc/rc.d/init.d/qmail /etc/rc.d/init.d/qmail.vpopmail
# chmod 0 /etc/rc.d/init.d/qmail.vpopmail
・daemontoolsのダウンロード
# cd /usr/local/src/
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
・フォルダ作成、daemontools解凍、コンパイル、インストール(netqmail-1.06のソースが必要)
# mkdir /package
# chmod 1755 /package
# cd /package
# tar xpzf /usr/local/src/daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# patch -p1 < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch
# ./package/install
・svscan起動スクリプトの作成
# vi /etc/rc.d/init.d/svscan
#!/bin/sh
#
# svscan Start svscan.
#
# Author: TAKIZAWA Takashi
#
# chkconfig: 345 99 50
# description: svscan starts and monitors a collection of services.
# see http://cr.yp.to/daemontools.html
# processname: svscan
# service directory: /service

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

PATH="/usr/local/bin:$PATH"
prog=svscan
SVDIR=/service
RETVAL=0
export PATH SVDIR


start() {
echo -n $"Starting $prog: "
daemon svscan $SVDIR &
RETVAL=$?
echo_success
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/svscan
}

stop() {
echo -n $"Stopping $prog: "
killproc svscan
RETVAL=$?
(cd $SVDIR && svc -dx $SVDIR/*)
(cd $SVDIR && svc -dx $SVDIR/*/log)
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/svscan
}


case "$1" in
start)
start
;;
stop)
stop
;;
status)
status svscan
RETVAL=$?
;;
restart|reload)
stop
start
;;
*)
echo $"Usage: $prog {start|stop|status|restart|reload}"
exit 1
esac

exit $RETVAL
・svscanの起動
# chmod 755 /etc/rc.d/init.d/svscan
# /etc/rc.d/init.d/svscan start
・svscanの自動起動設定
# /sbin/chkconfig --add svscan
# /sbin/chkconfig svscan on
・qmail起動スクリプトの変更
# vi /var/qmail/rc
#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
sploggerを使用しないように変更する。

・daemontools用起動スクリプトの作成
# cd /var/qmail/bin
# ./qmail-delivery-conf qmaill /var/qmail/service/qmail
# ./qmail-smtpd-conf qmaild qmaill /var/qmail/service/smtpd
# ./qmail-pop3d-conf /home/vpopmail/bin/vchkpw qmaill /var/qmail/service/pop3d
・daemontools用cdbの作成(smtpd)
# cd /var/qmail/service/smtpd
# ./add-relayclient 192.168.
# ./add-relayclient 127.
# ./add-relayclient xxx.xxx.xxx.xxx
# echo ':allow' >> tcp
# make
・daemontools用cdbの作成(pop3d)
# cd /var/qmail/service/pop3d
# ./add-client 192.168.
# ./add-client xxx.xxx.xxx.xxx
# make
接続を許可するIPアドレスを追加する。

・エイリアスの作成
# ln -s /var/qmail/service/* /service


7.daemontoolsでのqmail運用
・全サービスの起動
# svc -u /service/*
・全サービスの一時停止
# svc -d /service/*
・全サービスの起動状況の確認
# svstat /service/*
・ログの確認
# /usr/local/bin/tai64nlocal < /service/qmail/log/main/current | more
# /usr/local/bin/tai64nlocal < /service/smtpd/log/main/current | more
# /usr/local/bin/tai64nlocal < /service/pop3d/log/main/current | more


備考.telnetでportの確認
・portが閉じている場合
# telnet example.com 110
Trying xxx.xxx.xxx.xxx...
telnet: connect to address xxx.xxx.xxx.xxx: Connection refused
telnet: Unable to connect to remote host: Connection refused
・portが開いていて、ユーザー名とパスワードも正しい場合
# telnet example.com 110
Trying xxx.xxx.xxx.xxx...
Connected to example.com (xxx.xxx.xxx.xxx).
Escape character is '^]'.
+OK <12345.1234567890@example.com>
user info@example.com
+OK
pass xxxxxxxxxx
+OK
quit
+OK
Connection closed by foreign host.


参考サイト
・実用qmailサーバ運用・管理術
http://www.atmarkit.co.jp/flinux/index/indexfiles/index-linux.html#qmail

・CentOS4 に qmail + vpopmail + qmailadmin
http://d.hatena.ne.jp/cat-o-ninetail/20080229

・サーバーを構築する(qmail + vpopmail)
http://www.mgfcompany.net/ufo/com/

・qmail-1.03の導入(CentOS5) - ORANGE BOX
http://orangebox.lbn.bz/index.php?qmail-1.03%A4%CE%C6%B3%C6%FE%A1%CACentOS5%A1%CB

・qmailのインストール及びその設定(daemontoolsを用いたプロセスの監視)
http://www.mm-labo.com/computer/linux/qmail/qmail-daemontools.html

・daemontools の勧め
http://www.emaillab.org/djb/daemontools/

・qmail-conf
http://www.y-min.or.jp/~nob/qmail/qmail-conf.html

"ネット・PC・携帯"の記事

  1. 2011年02月02日

    1. [Windows] Outlook2007からOutlook2007への移行(データ+アカウント+仕分けルール+署名)

  2. 2010年12月03日

    1. [linux] CentOS5 + Apache2にsubversionを導入

  3. 2010年03月09日

    1. [mobile] イーモバイルのIPアドレス帯域

  4. 2009年10月31日

    1. [PC] Windows7搭載ノートパソコン購入

  5. 2007年11月04日

    1. [mobile] 905i/705iシリーズ23機種を開発

  6. 2007年10月02日

    1. [DoCoMo] ドコモの「メロディコール」が固定電話にも対応

  7. 2007年09月27日

    1. [vocaloid] 大ブレイクの「初音ミク」、売り上げもぶっちぎりのトップを爆走中!

  8. 2007年09月20日

    1. [DoCoMo] 電池パックの無償交換

  9. 2007年06月28日

    1. [PC] +LhacaからLhaplusへ

  10. 2007年06月26日

    1. [mobile] 韓国人気俳優の…

  11. 2007年05月09日

    1. [mobile] ケータイ小説始めます

  12. 2007年03月25日

    1. [bbs] 掲示板SPAM対策

  13. 2007年02月15日

    1. [mobile] TVのチカラ

  14. 2007年01月19日

    1. [linux] audit時限爆弾

  15. 2006年12月07日

    1. [linux] NFSマウントで大ハマリ

  16. 2006年11月29日

    1. [DoCoMo] 最近のiD

  17. 2006年11月07日

    1. [PC] 会社のマウスが…

  18. 2006年11月03日

    1. [domain] 国別ドメイン「.日本」使用可能に・2008年にも、米団体方針

  19. 2006年10月19日

    1. [PC] 会社のマウス

  20. 2006年10月13日

    1. [mobile] 自作自演のDDos攻撃

  21. 2006年08月29日

    1. [mobile] アップデートしられまくっちゃ

  22. 2006年08月23日

    1. [mobile] DDoS攻撃と高橋名人

  23. 2006年07月25日

    1. [mobile] x-jphone-copyright

  24. 2006年06月07日

    1. [DoCoMo] 電話帳データの移行

  25. 2006年06月06日

    1. [DoCoMo] 携帯が壊れた

  26. 2006年05月16日

    1. [PC] 牛丼大盛 + Windows2000 + HDD300GB

  27. 2006年05月12日

    1. [OS] 1割は未だ Win98/Me、3割が「Intel Mac、聞いたことない」~OS 調査

  28. 2006年05月11日

    1. [DoCoMo] バッテリーが…

  29. 2006年05月05日

    1. [DoCoMo] iD デビュー

  30. 2006年05月02日

    1. [DoCoMo] jigブラウザFREE

  31. 2006年04月26日

    1. [DoCoMo] iDデビュー?

  32. 2006年04月13日

    1. [DoCoMo] おサイフケータイ + 三井住友カード = iD

  33. 2006年04月11日

    1. [DoCoMo] FOMAの電波状況

  34. 2006年04月09日

    1. [DoCoMo] 機種変しました

  35. 2006年03月27日

    1. [Firefox] 検索プラグイン修正

  36. 2006年03月23日

    1. [DoCoMo] 送信できませんでした。宛先を確認してください(451)

  37. 2005年12月01日

    1. [Firefox] Firefox1.5へのバージョンアップ

  38. 2005年10月18日

    1. [DoCoMo] ぴったり料金プラン診断

  39. 2005年10月13日

    1. [Firefox] FireTune

  40. 2005年08月26日

    1. [mobile] 携帯HPリンク集

  41. 2005年07月15日

    1. [Google] Googleマップ

  42. 2005年06月16日

    1. [PC] STOP: c0000218 Unknown Hard Error

  43. 2005年04月29日

    1. [Firefox] 検索プラグインを作成してみました

  44. 2005年04月21日

    1. [PHP] 初めの一歩

  45. 2005年04月19日

    1. [PC] 牛丼大盛

  46. 2005年04月13日

    1. [PC] パソコンのデュアルブート化

  47. 2005年04月05日

    1. [apple] iPodのディスク化

  48. 2005年03月02日

    1. [mail] メールが送信出来ない

  49. 2005年02月28日

    1. [PC] マウス

  50. 2005年02月17日

    1. [PC] Nifty終了

  51. 2005年01月27日

    1. [Firefox] 光速化

  52. 2005年01月22日

    1. [DoCoMo] 携帯電話料金

  53. 2005年01月13日

    1. [Google] 2004年検索キーワードランキング

  54. 2004年12月03日

    1. [Firefox] Single Window Mode

  55. 2004年12月01日

    1. [Firefox] MozEX

  56. 2004年11月13日

    1. [Firefox] 拡張機能の追加

  57. 2004年11月11日

    1. [Firefox] レッサーパンダ

  58. 2004年10月24日

    1. [apple] iPod

  59. 2004年10月23日

    1. [WindowsXP] Service Pack 2

  60. 2004年10月18日

    1. [homepage] 日本の苗字7000傑

  61. 2004年09月01日

    1. [homepage] Googleニュース日本版

  62. 2004年08月06日

    1. [bowling] ボウリング板

  63. 2004年07月17日

    1. [homepage] ごくうのお気に入りリンク集(ブックマーク)

  64. 2004年07月15日

    1. [Windows Update] メールソフトが起動しない

  65. 2004年07月08日

    1. [homepage] アクセスカウンタを設置しました

  66. 2004年07月07日

    1. [homepage] 引っ越し(掲示板&カウンタ)

  67. 2004年07月03日

    1. [homepage] ホームページを始めました

  68. 2004年06月30日

    1. [homepage] サーバを探しています