[ TOP ]2004/3/24qmail + vpopmail
qmail + vpopmail- MTA(Mail Transfer Agent)には、最初から入っているsendmailではなくqmailを利用します。
インストールはsendmailの方が楽なんですが、セキュリティホールなどを考えるとqmailの方が安定してるということでこちらにしました。
ちなみに、思ったとおりではまりました。(T-T)
2日間ほどインストールと設定を繰り返しました。。。。
#複数のドメインを利用するということがなければ、意外なほど簡単に動きましたが。。。。(--;;
そんな中、kuri3.net XOOPS実験室さんのコンテンツの第6章 スーパー&セキュアなMailサーバー構築(インストール編)が大変参考になりました。
他のコンテンツも大変参考になります。一度訪れることをお薦めします。
ちなみに、バーチャルドメインは使わねぇ〜!って人はここを参考にすると良いかもです。
http://uworld.ddo.jp/uBlog/archives/000176.html
前置き.
コンパイルの途中でエラーが出た場合にmakeでエラーになって止まる場合は、まずerror.hというファイルがあるかを探し、あった場合は
error.h 内の
extern int errno;
という行を探し、
#include <errno.h>
と修正するとOKになることが多いです。
sendmailが入っていたら削除まずは、sendmailが入っていたら削除します。
# rpm -qa | grep sendmail
# rpm -e sendmail-<Version>
必要なファイルをダウンロードインストールするファイルはRed Hat社には無いので各所から取得する必要があります。
単純にダウンロードしまくるというのもありなんですが、この2カ所のサイトは最低限、目を通しておくと良いです。
qmailの作者 Dan Bernstein氏
vpopmailやqmailadminなどの、inter 7
作業はとりあえず、/usr/src/qmail というディレクトリを用意してここを基本として作業することにします。
ダウンロードしたファイルはとりあえず総てここに置きます。
このディレクトリでwgetコマンドで取得するのも良いでしょう。
ユーザーとインストール用ディレクトリを作成qmailとvpopmailのユーザーとインストール用ディレクトリは最初に全部作ってしまいます。
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
vpopmail
# groupadd -g 89 vchkpw
# useradd -g vchkpw -u 89 vpopmail
# mkdir /home/vpopmail/etc
tcpserver をインストールまずは、qmailやvpopmailを動かす前提条件ということで tcpserver からインストールします。
解凍して、ディレクトリを移動します
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
RBL対応パッチをあてます
# patch -p0 rblsmtpd.c < ../ucspi-rss.diff
rblsmtpd.cを編集します
# vi rblsmtpd.c
166行目を修正
if (text.len > 200) text.len = 200;
↓
if (text.len > 500) text.len = 500;
インストールします
# make
# make setup check
daemontools をインストール次に daemonools をインストールします。
daemontools のインストールは /package でやる必要があります
# mkdir -p /package
# chmod 1755 /package
# cd /package
解凍して、ディレクトリを移動します
# tar zxvf /usr/src/qmail/daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
インストールします
# ./package/install
この2つのディレクトリが出来ているか確認します
# ls /
/command
/service
inittab内の最後に1行登録されているか確認します
# tail /etc/inittab
SV:123456:respawn:/command/svscanboot
動作テスト
# /command
# date | ./tai64n | ./tai64nlocal
# date | sh -c './multilog t e 2>&1' | ./tai64nlocal
それぞれ日時が2つ並んで表示されるので、その時間が同じか確認します
同じならばOKです
qmail をインストールいよいよ qmail をインストールします。
解凍して、ディレクトリを移動します
# tar zxvf qmail-1.03.tar.gz
# cd qmail-1.03
パッチをあてます
# patch -p1 < ../qmail-103.patch
# patch -p1 < ../qmailqueue-patch
# patch < ../qmail-maildir++.patch
# patch -p1 < ../qmail-date-localtime.patch.txt
# patch < ../qmail-limit-bounce-size.patch.txt
# patch < ../qregex.patch-20020129.txt
# patch < ../qmail-smtpd-esmtp-size_qregex-compat.diff.txt
ソースファイルを修正します
# vi qmail-smtpd.c
54行目あたりのstraynewline function内を修正します
451 → 553
インストールします
# make setup check
# ./config-fast umekawa.info ← 一応メインにするドメインでOKです
インストールしたら、設定を確認します。
ディレクトリ /var/qmail/control 内にあるファイルを確認・修正します。
localsとrcpthostsにはlocalhostを追加しておきます。
locals 受信するドメイン me 自分のFQDN defaultdomain ドメイン名省略時の補完ドメイン plusdomain +で終わっている場合の補完 rcpthosts 受信するホスト名・ドメイン名
localsには、localhostのみを。
rcpthostsには受信するバーチャルドメインを総て列記しておきます。
meには、メインとなるドメインを入力しておく必要があります。
入れておかないと、送信先のプロバイダによってはエラーとなります。sendmailのシンボリックリンクを作成します。
これを作っておかないと、/bin/mailやcgiからのsendmail呼び出しでエラーになります。
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
qmailctl を使えるようにします。
# cd /usr/src/qmail
# vi qmailctl-script-dt70
cdb) 項のパスをすべて修正します
/etc → /home/vpopmail/etc
同じく cdb) 項に下記の2行を追加します
tcprules /home/vpopmail/etc/tcp.pop3.cdb /home/vpopmail/etc/tcp.pop3.tmp < /home/vpopmail/etc/tcp.pop3
chmod 644 /home/vpopmail/etc/tcp.pop3.cdb
bin ディレクトリにコピーして、実行権を付与します
# cp qmailctl-script-dt70 /var/qmail/bin/qmailctl
# chmod 755 /var/qmail/bin/qmailctl
シンボリックリンクを作成しておきます
# ln -s /var/qmail/bin/qmailctl /usr/bin
次は、pop3, smtp のリレー設定を行います。
smtpリレー
# vi /home/vpopmail/etc/tcp.smtp
# 明らかなspam
216.242.75.100-116:allow,RBLSMTPD="-Connections from this IP have been banned."
64.228.127.:allow,RBLSMTPD="-Connections refused due to spam from freeamateurhotties.com"
154.20.94.:allow,RBLSMTPD="-Connections refused due to spam from freeamateurhotties.com"
209.151.132.:allow,RBLSMTPD="-Connections refused due to spam from freeamateurhotties.com"
216.18.85.:allow,RBLSMTPD="-Connections refused due to spam from freeamateurhotties.com"
# 無条件に許可するアドレス
# 内部LANの例
192.168.1.:allow,RELAYCLIENT="",RBLSMTPD=""
# サーバー自身(必須)
127.0.0.1:allow,RELAYCLIENT="",RBLSMTPD=""
# 上記以外はpopアカウントとRBLチェックを行う(必須)
:allow
pop3リレー
# vi /home/vpopmail/etc/tcp.pop3
# 全部受け付ける
:allow
暗号化DB (CDB) を作成します。
# qmailctl cdb aliasの配送先を設定します。
# cd /var/qmail/alias
# echo "&hoge@umekawa.info" > .qmail-root
# echo "&hoge@umekawa.info" > .qmail-postmaster
# echo "&hoge@umekawa.info" > .qmail-mailer-daemon
# chmod 644 .qmail-*
# chown root.qmail .qmail-*
メッセージ長とキュー生存時間を設定します。
メッセージ長は20MBに
# echo '20000000' > /var/qmail/control/databytes
キュー生存時間は4日間に
# echo '345600' > /var/qmail/control/queuelifetime
不正なアドレスフォーマットを拒否するようにします。
# echo '# reject containing invalid characters, brackets or multiple @' > /var/qmail/control/badmailto
# echo '[!%#:\*\^]' >> /var/qmail/control/badmailto
# echo '[\(\)]' >> /var/qmail/control/badmailto
# echo '[\{\}]' >> /var/qmail/control/badmailto
# echo '@.*@' >> /var/qmail/control/badmailto
バウンスメッセージの処理も設定しておきます。
差し出し人をpostmasterに変更します
# echo 'postmaster' > /var/qmail/control/bouncefrom
ダブルバウンスメールを受け取るようにします
# echo 'postmaster' > /var/qmail/control/doublebounceto
# echo 'umekawa.info' > /var/qmail/control/doublebouncehost
qmail の起動スクリプトサーバー起動時に立ち上がるようにします。
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/init.d/qmail
# ln -s ../init.d/qmail /etc/rc.d/rc0.d/K30qmail
# ln -s ../init.d/qmail /etc/rc.d/rc1.d/K30qmail
# ln -s ../init.d/qmail /etc/rc.d/rc2.d/S80qmail
# ln -s ../init.d/qmail /etc/rc.d/rc3.d/S80qmail
# ln -s ../init.d/qmail /etc/rc.d/rc4.d/S80qmail
# ln -s ../init.d/qmail /etc/rc.d/rc5.d/S80qmail
# ln -s ../init.d/qmail /etc/rc.d/rc6.d/K30qmail
runスクリプトを作成します。
# mkdir -p /var/qmail/supervise/qmail-send/log
# mkdir -p /var/qmail/supervise/qmail-smtpd/log
# mkdir -p /var/qmail/supervise/qmail-pop3d/log
# chmod +t /var/qmail/supervise/qmail-send
# chmod +t /var/qmail/supervise/qmail-smtpd
# chmod +t /var/qmail/supervise/qmail-pop3d
以下、スクリプトファイルを作成しまくります。
qmail-send
# vi /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/
qmail-send log
# vi /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
# ログは30個まで。1個は10MB。
#
# 10MBになったらローテートさせる。
# または午前0時にcrontabでローテート。先に達した方が優先される。
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
s10000000 n30 /var/log/qmail/send
qmail-smtpd
# vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 3000000 \
/usr/local/bin/tcpserver \
-H -l umekawa.info \
-v -x /home/vpopmail/etc/tcp.smtp.cdb \
-c 20 -R -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/usr/local/bin/rblsmtpd -b -C \
-r 'relays.ordb.org:Your message was rejected because the mail server you use is configured to allow OPEN RELAY - More detailed information regarding this problem is available from http://www.ordb.org/lookup/?%IP% - Please forward this error through to your email server support staff f or easy resolution.' \
-t 5 \
/var/qmail/bin/qmail-smtpd 2>&1
qmail-smtpd log
# vi /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
# ログは各10MBのmax30個までとする。
# 10MBになったらローテートする。またはcrontabで毎日0時にローテートさせてもよい。
# その場合先に達したものが優先される
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
s10000000 n30 /var/log/qmail/smtpd
qmail-pop3d
# vi /var/qmail/supervise/qmail-pop3d/run
#!/bin/sh
exec /usr/local/bin/softlimit -m 3000000 \
/usr/local/bin/tcpserver \
-H -l umekawa.info \
-v -x /home/vpopmail/etc/tcp.pop3.cdb -c 30 -R 0 pop3 \
/var/qmail/bin/qmail-popup umekawa.info \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
qmail-pop3d log
# vi /var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
# Keep 30 logs of max 10Mb each
# They will get rotated when they reach 10Mb in size,
# or at midnight when our crontab script fires (whichever event comes 1st)
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
s10000000 n30 /var/log/qmail/pop3d
runスクリプトに実行権を付与します。
# 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
# chmod 755 /var/qmail/supervise/qmail-pop3d/run
# chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
ログ用ディレクトリを作成します。
# mkdir /var/log/qmail
# mkdir /var/log/qmail/smtpd
# mkdir /var/log/qmail/send
# mkdir /var/log/qmail/pop3d
# chown -R qmaill /var/log/qmail
qmailの起動設定をします。
# ln -s /var/qmail/supervise/qmail-send /service
# ln -s /var/qmail/supervise/qmail-smtpd /service
# ln -s /var/qmail/supervise/qmail-pop3d /service
すべて作成し終わったら、サーバーを再起動しておきましょう。
qmail の起動確認qmail が起動されたか確認します。
# ps axf こんなのが表示されればOKです。
1278 ? S 0:00 /bin/sh /command/svscanboot 1280 ? S 0:00 \_ svscan /service 1282 ? S 0:00 | \_ supervise qmail-send 1288 ? S 0:00 | | \_ qmail-send 1294 ? S 0:00 | | \_ qmail-lspawn ./Maildir/ 1295 ? S 0:00 | | \_ qmail-rspawn 1296 ? S 0:00 | | \_ qmail-clean 1283 ? S 0:00 | \_ supervise log 1289 ? S 0:00 | | \_ /usr/local/bin/multilog t s10000000 n30 /var/log/qmail/send 1284 ? S 0:00 | \_ supervise qmail-smtpd 1293 ? S 0:00 | | \_ /usr/local/bin/tcpserver -H -l umekawa.info -v -x /home/vpopmail/etc/tcp.smtp.cdb -c 20 -R -u 502 -g 502 0 smtp /usr/l 1285 ? S 0:00 | \_ supervise log 1290 ? S 0:00 | | \_ /usr/local/bin/multilog t s10000000 n30 /var/log/qmail/smtpd 1286 ? S 0:00 | \_ supervise qmail-pop3d 1291 ? S 0:00 | | \_ /usr/local/bin/tcpserver -H -l umekawa.info -v -x /home/vpopmail/etc/tcp.pop3.cdb -c 30 -R 0 pop3 /var/qmail/bin/qmail-po 1287 ? S 0:00 | \_ supervise log 1292 ? S 0:00 | \_ /usr/local/bin/multilog t s10000000 n30 /var/log/qmail/pop3d 1281 ? S 0:00 \_ readproctitle service errors: ................................................................................................... vpopmail のインストールPOP before SMTP を有効にし、mysql は使わない設定でインストールします。
解凍して、ディレクトリを移動します
# tar zxvf vpopmail-5.4.0.tar.gz
# cd vpopmail-5.4.0
POP before SMTP を有効にし、認証情報を30分保持し、/home/vpopmail/etc/tcp.smtpで更新するように設定します。
# ./configure \
> --enable-roaming-users=y \
> --enable-relay-clear-minutes=30 \
> --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp
インストールします。
# make
# make install-strip
デフォルトドメインの設定は、
/home/vpopmail/etc/defaultdomain
にドメインを記入すれば良いでしょう。(私はやってません。)
このままでは、POPの認証情報がたまる一方なので、定期的にクリアするようにします。 clearopensmtp を cron に登録します。
今回は10分ごとにリフレッシュするように設定するため、./configure で行った30分と合わせて最大40分間 認証情報が保持されることになります。
# crontab -e
*/10 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null 運用の基本コマンドとメールクライアントの設定vpopmail のコマンドは /home/vpopmail/bin 以下にあります。
コマンドの名称がそのまま機能になっているので、分かりやすいと思います。
コマンド例(vpopmailでドメインとユーザーを登録)
ドメインの追加
# vadddomain umekawa.info パスワード
メールボックスの作成
# vadduser hoge@umekawa.info パスワード
ユーザー情報の確認
# vuserinfo hoge@umekawa.info メールクライアントの設定
MTUでは下記のように設定します。
アカウントではドメインまで含めることに注意してください。
デフォルトドメインのみ、ドメインを付与しなくても受信が可能です。
-----------------------------------------
POP3 : umekawa.info
SMTP : umekawa.info
アカウント : ume@umekawa.info
パスワード : メールボックスの作成時に登録したパスワード
-----------------------------------------
以上で、qmail + vpopmail の設定は終わりです。
このままコマンドでユーザーを管理しても良いのですが、ブラウザから出来た方が何かと楽なので、vqadmin をインストールすることにしました。
インストール方法は別途まとめるようにします。
qmailadmin もありますが ezmlm が必須のため、メーリングリストは fml にしようと思っている私は断念しました。