daemontoolsをインストールしたので、起動をdjb-supervisor系に、ログ収集をsyslogからmultilogに変更する。
まず /etc/rc.d/init.d/qmail の起動スクリプトを元にして、/etc/ 配下に新しくqmail,qmail-smtpd,qmail-pop3dとデーモン個々に起動環境を作成、最後に /service からそれぞれシンボリックを生成すればsvscanによりrunスクリプトが起動される。
またログも /var/log/qmail*/ 配下にそれぞれ別れる。
$ sudo ln -s /etc/qmail /service
$ sudo ln -s /etc/qmail-smtpd /service
$ sudo ln -s /etc/qmail-pop3d /service
$ sudo svc -dx /service/qmail /service/qmail-pop3d /service/qmail-smtpd
$ sudo svc -dx /service/qmail/log /service/qmail-pop3d/log /service/qmail-smtpd/log
$ for pid in `ps -ef | grep qmails | awk '! /grep/{print $2}'`; do sudo kill -9 $pid; done
$ sudo rm -f /service/qmail /service/qmail-pop3d /service/qmail-smtpd
参照 | |
---|---|
qmail | http://www.qmail.jp/ |
qmailsolutions.com | http://qmailsolutions.com/ |
実用qmailサーバ運用・管理術 | http://www.atmarkit.co.jp/flinux/index/indexfiles/qmailindex.html |
daemontools | http://www.emaillab.org/djb/daemontools/ |
relay-ctrl | http://untroubled.org/relay-ctrl/ |
qmail-vida-0.53でSMTP認証(SMTP-Auth)を導入する。qmail-vidaにはAPOP機能も含んでいるのでqmapopのpatchを当てたものではなくqmail-1.03のオリジナルから適用する事。あとReceived:のtimestampをlocal timeにするpatchと、DNSバッファを大きくするpatchも当てといた方が良いと思う。2002/11/21
基本はhttp://www.emaillab.org/djb/qmail-vida/doc/install.html。
まずは各パッケージの展開
[yano@nx9030 software]$ tar zxvf ~/archives/ucspi-tcp-0.88.tar.gz
[yano@nx9030 software]$ tar zxvf ~/archives/qmail-1.03.tar.gz
[yano@nx9030 software]$ tar zxvf ~/archives/checkpassword-0.90.tar.gz
[yano@nx9030 software]$ tar zxvf ~/archives/qmail-vida-0.53.tar.gz
localtimeやdnsなqmailパッチの適用。
[yano@nx9030 software]$ cd qmail-1.03
[yano@nx9030 qmail-1.03]$ patch -p1 < ~/archives/qmail-date-localtime.patch
[yano@nx9030 qmail-1.03]$ patch -p1 < ~/archives/qmail-large-dns.patch
glibcのバージョンが2.3.1以降の場合は errno のリンクエラーが発生するので"extern int errno;"を"#include <errno.h>"に変更する必要がある。以下のパッチを適用するのが吉。
qmail のパッチ | http://www.emaillab.org/djb/qmail-patch/patch.html |
glibcのバージョンが2.3.1以降の場合 | http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ |
qmail-1.03.errno.patch | http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch |
qmail-1.03.qmail_local.patch | http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.qmail_local.patch |
checkpassword-0.90.errno.patch | http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/checkpassword-0.90.errno.patch |
ucspi-tcp-0.88.errno.patch | http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.errno.patch |
[yano@nx9030 qmail-1.03]$ patch -p1 < ~/archives/djb_glibc2.3/qmail-1.03.qmail_local.patchqmail-vidaはパッチが見当たらなかったので手直しして、patchをqmail-vida-0.53.errno.patchとして保存。
[yano@nx9030 qmail-1.03]$ patch -p1 < ~/archives/djb_glibc2.3/qmail-1.03.errno.patch
[yano@nx9030 qmail-1.03]$ cd ../ucspi-tcp-0.88
[yano@nx9030 ucspi-tcp-0.88]$ patch -p1 < ~/archives/djb_glibc2.3/ucspi-tcp-0.88.errno.patch
[yano@nx9030 ucspi-tcp-0.88]$ cd ../checkpassword-0.90
[yano@nx9030 checkpassword-0.90]$ patch -p1 < ~/archives/djb_glibc2.3/checkpassword-0.90.errno.patch
[yano@nx9030 checkpassword-0.90]$ cd ../qmail-vida-0.53/src/vida
[yano@nx9030 vida]$ patch -p1 < ~/archives/djb_glibc2.3/qmail-vida-0.53.errno.patch
[yano@nx9030 vida]$ diff --unified=3 error.h.orig error.h
--- error.h.orig 2004-12-27 14:35:04.044439920 +0900
+++ error.h 2004-12-27 15:13:19.141532128 +0900
@@ -1,7 +1,7 @@
#ifndef ERROR_H
#define ERROR_H
-extern int errno;
+#include <errno.h>
extern int error_intr;
extern int error_nomem;
肝心要、vidaパッチの適用はあっさり。
[yano@nx9030 qmail-vida-0.53]$ make patch
[yano@nx9030 qmail-vida-0.53]$ make copy
メールドメインのオーナーアカウント pop を変更する場合は、このタイミングで qmail-vida-0.53/src/vida/conf-realdomainowner と checkpassword-0.90/conf-realdomainowner を変更する。
ちゅうわけで pop を "domowner" に変更した後、やっとビルド。
[yano@nx9030 qmail-vida-0.53]$ cd ../qmail-1.03
[yano@nx9030 qmail-1.03]$ make; sudo make setup check;
[yano@nx9030 qmail-1.03]$ cd ../checkpassword-0.90
[yano@nx9030 checkpassword-0.90]$ make; sudo make setup check;
[yano@nx9030 checkpassword-0.90]$ cd ../qmail-vida-0.53/
[yano@nx9030 qmail-vida-0.53/]$ cd src/vida
[yano@nx9030 vida]$ make; sudo make setup check;
[yano@nx9030 vida]$ cd ../../
[yano@nx9030 qmail-vida-0.53/]$ sudo make install-doc
[yano@nx9030 software]# mkdir /var/qmail
[yano@nx9030 software]# /usr/sbin/groupadd nofiles
[yano@nx9030 software]# /usr/sbin/useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
[yano@nx9030 software]# /usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmaild
[yano@nx9030 software]# /usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmaill
[yano@nx9030 software]# /usr/sbin/useradd -g nofiles -d /var/qmail -s /bin/false qmailp
[yano@nx9030 software]# /usr/sbin/groupadd qmail
[yano@nx9030 software]# /usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmailq
[yano@nx9030 software]# /usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmailr
[yano@nx9030 software]# /usr/sbin/useradd -g qmail -d /var/qmail -s /bin/false qmails
[yano@nx9030 software]# /usr/sbin/groupadd vida
[yano@nx9030 software]# /usr/sbin/useradd -g vida -d /var/qmail -s /bin/false qmailu
[yano@nx9030 software]# /usr/sbin/useradd -g vida -d /var/qmail -s /bin/false authdb
[yano@nx9030 software]# /usr/sbin/useradd -g vida -d /home/domowner -s /bin/bash domowner
POP before SMTPをサポートする為、relay-ctrlを導入する。
Fedora Core 3の man は/usr/local/manでなく/usr/share/manのようなので conf-man の先頭行を以下のように/usr/share/man修正してから
Man pages will be installed in subdirectories of this directory. An
unformatted man page foo.1 will go into .../man1/foo.1.
[yano@nx9030 relay-ctrl-3.1.1]$ makeするなり。
[yano@nx9030 relay-ctrl-3.1.1]$ sudo ./installer
[root@nx9030 relay-ctrl-3.1.1]# mkdir /etc/relay-ctrl/
[root@nx9030 relay-ctrl-3.1.1]# mkdir /var/spool/relay-ctrl; chmod 744 /var/spool/relay-ctrl
[root@nx9030 relay-ctrl-3.1.1]# mkdir /var/spool/relay-ctrl/allow; chmod 777 /var/spool/relay-ctrl/allow
[root@nx9030 relay-ctrl-3.1.1]# echo "/var/spool/relay-ctrl/allow" > /etc/relay-ctrl/RELAY_CTRL_DIR #キャッシュディレクトリ
[root@nx9030 relay-ctrl-3.1.1]# echo "600" > /etc/relay-ctrl/RELAY_CTRL_EXPIRY #有効期限600秒(10分)
POP before SMTPの有効期限を毎分チェックするcronスクリプト。動作確認が済んだ後でよい。
#!/bin/sh
/usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
eth0だけでなくlocalhostからの接続も許すのでIPは指定はゼロにする。
[yano@nx9030 yano]$ su
[root@nx9030 yano]# cd /etc/qmail-smtpd/
[root@nx9030 qmail-smtpd]# echo "0" > env/IP
[root@nx9030 qmail-smtpd]# echo "nx9030.bravotouring.com" > env/HOST
[root@nx9030 qmail-smtpd]# echo "domowner" > env/DOMAINOWNER
[root@nx9030 qmail-smtpd]# ln -s /etc/relay-ctrl/RELAY_CTRL_DIR /etc/qmail-smtpd/env/
[root@nx9030 qmail-smtpd]# ln -s /etc/relay-ctrl/RELAY_CTRL_EXPIRY /etc/qmail-smtpd/env/
tcpserverのルールを作成。
・SMTP-Auth未対応のWebMailerによるlocalhostからのRELAY送信を許可
・ローカルIPからの送信はrblsmtpdによるチェックを省略
[yano@nx9030 tcpserver]$ echo '127.0.0.1:allow,RELAYCLIENT=""' > smtp_auth.rules
[yano@nx9030 tcpserver]$ echo '192.168.:allow,RBLSMTPD="",MFCHECK=""' >> smtp_auth.rules
[yano@nx9030 tcpserver]$ /usr/local/bin/tcprules smtp_auth.cdb smtp_auth.tmp <smtp_auth.rules
[yano@nx9030 tcpserver]$ sudo cp smtp_auth.cdb /etc/tcpserver/
WebMailerによるlocalhostからの接続はも許すのでIPは指定はゼロにする。
#!/bin/sh
# /service/smtpd/run SMTP-Auth 対応 powerd by qmail-vida
# -x /etc/tcpserver/smtp_auth.cdbでlocalhostをSMTP-Auth対象外とする
# Set environment variables IP and HOST.
# If it is virtual domain, set DOMAINOWNER.
# If it is necessary, set ALLOWPLAIN, FORCEAUTH and TEMPRELAYCLIENT, too.
# If it is not necessary, remove 'recordio' line.
# recordio fixcrio \
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin:
exec envdir ./env sh -c '
exec softlimit -d6000000 \
relay-ctrl-chdir \
tcpserver -x /etc/tcpserver/smtp_auth.cdb \
-vhR -l"$HOST" -c40 -- "$IP" smtp \
rblsmtpd -r relays.ordb.org \
qmail-smtpup "$HOST" \
checkpassword \
relay-ctrl-check \
qmail-smtpd 2>&1
'
[root@nx9030 qmail-pop3d]# echo "0" > env/IP
[root@nx9030 qmail-pop3d]# echo "nx9030.bravotouring.com" > env/HOST
[root@nx9030 qmail-pop3d]# echo "domowner" > env/DOMAINOWNER
[root@nx9030 qmail-pop3d]# ln -s /etc/relay-ctrl/RELAY_CTRL_DIR /etc/qmail-pop3d/env/
[root@nx9030 qmail-pop3d]# ln -s /etc/relay-ctrl/RELAY_CTRL_EXPIRY /etc/qmail-pop3d/env/
WebMailerによるlocalhostからの接続も許すのでIPは指定はゼロにする。
#!/bin/sh
# /service/pop3d/run SMTP-Auth 対応 powerd by qmail-vida
# Set environment variables IP and HOST.
# If it is virtual domain, set DOMAINOWNER.
# If it is necessary, set ALLOWPLAIN, too.
# If it is not necessay, remove 'recordio' line.
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec envdir ./env sh -c '
exec softlimit -d6000000 \
relay-ctrl-chdir \
tcpserver -x /etc/tcpserver/pop3.cdb \
-vhR -l "$HOST" -c40 -- "$IP" pop3 \
qmail-popup "$HOST" \
checkpassword \
relay-ctrl-allow \
qmail-pop3d Maildir 2>&1
'
まずはrootでvida認証データベースの初期化。
[yano@nx9030 qmail-vida-0.53/]# /var/qmail/bin/vida-pwdbinit
続いて各ユーザーの設定
[yano@nx9030 yano]$ /var/qmail/bin/maildirmake ./Maildir
[yano@nx9030 yano]$ echo '#| /var/qmail/bin/qmail-spamassassin spam@bravotouring.com' > .qmail
[yano@nx9030 yano]$ echo ./Maildir/ >> .qmail ←.qmailがないと/var/qmail/queueに溜まるだけで配送されない(;_;)
[yano@nx9030 yano]$ /var/qmail/bin/vida-passwd -a
Changing password for user yano
New password:********
Retype new password:********
vida-passwd: Password for user yano was changed
pwdbmake: authdb/pwdusers/cdb was updated
linuxのユーザーアカウントを持たないML受信専用のメールボックスを作る。WebMailerからも読み書き可能。
[yano@nx9030 yano]$ su domowner # DOMAINOWNERアカウントで操作する
[domowner@nx9030 yano]$ cd
/home/domowner/
[domowner@nx9030 domowner]$ vida-passwd -a -u mail -p ********
[domowner@nx9030 domowner]$ vida-assign -a -u mail
[domowner@nx9030 domowner]$ vida-maildirmake mail Maildir
[domowner@nx9030 domowner]$ echo ./Maildir/ > ~/mail/.qmail ←.qmailがないと/var/qmail/queueに溜まるだけで配送されない(;_;)
忘れちゃならないのが sendmail の置き換え。sendmail を捨てた後、qmail版のsendmailインタフェースを入れておかないと、cronやlogwatchのメールが送信されなくなってしまう。
[yano@nx9030 qmail-vida-0.53]$ sudo rpm -e sendmail # RPMパッケージの削除
[yano@nx9030 qmail-vida-0.53]$ cd /usr/sbin
[yano@nx9030 sbin]$ sudo mv sendmail sendmail.orig
[yano@nx9030 sbin]$ sudo ln -s /var/qmail/bin/sendmail .
参照 | |
---|---|
qmail-vida | http://qmail-vida.sourceforge.jp/ |
qmail | http://www.qmail.jp/ |
・timestampをlocal timeにするpatch | ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch |
・DNSバッファを拡張するpatch | ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-large-dns.patch |
qmail および qmail-vida のインストールメモ | http://gya.jp/~yk/inst-qmail-vida.html |
いろいろ弄ってたら /var/log/qmail/current に "deferral: Sorry,_message_has_wrong_owner._(#4.3.5)/" というメッセージが出力され、メールの送受信ができなくなった。原因はつい出来心で"chown qmaill:qmail /var/qmail/bin/qmail-*"とかしてしまった為。
そういう場合はqmail-1.03のmakefileで"make setup check"し、OwnerやPermissionを復旧すれば良い。ちなみにqmail-*で
-rwsr-x--- 1 qmailu vida 12340 1月 7 22:13 qmail-newu* #←qmail-vidaのツールの2つ以外はOwnerがroot:qmailだ。またQueuing中のメッセージも"chown -R qmailq:qmail /var/qmail/queue/mess/"でOwnerを変更しておいた方が良い。2004/01/07
-rws--x--x 1 qmailq qmail 13612 1月 7 22:13 qmail-queue*
[Full-Disclosure] Lame crash in qmail-smtpd and memory overwrite according to gdb, yet still qmail much better than windowsで指摘された、SMTPセッションで2GB以上のヘッダーを受信するとoverflowしてしまうバグ修正。2004/01/20
368 pos = 0; flagmaybex = flagmaybey = flagmaybez = 1;
369 for (;;) {
370 substdio_get(&ssin,&ch,1);
371 if (flaginheader) {
372 if (pos < 9) {
373 if (ch != "delivered"[pos]) if (ch != "DELIVERED"[pos]) flagmaybez = 0;
374 if (flagmaybez) if (pos == 8) ++*hops;
375 if (pos < 8)
376 if (ch != "received"[pos]) if (ch != "RECEIVED"[pos]) flagmaybex = 0;
377 if (flagmaybex) if (pos == 7) ++*hops;
378 if (pos < 2) if (ch != "\r\n"[pos]) flagmaybey = 0;
379 if (flagmaybey) if (pos == 1) flaginheader = 0;
380 ++pos; /* insert by YANO at 2004/01/20 */
381 }
382 /* ++pos; * commentout by YANO at 2004/01/20 */
383 if (ch == '\n') { pos = 0; flagmaybex = flagmaybey = flagmaybez = 1; }
384 }
385 switch(state) {
qmail-smtpd.c: 502 lines, 13278 characters
$ sudo make setup check
[yano@nx9030 yano]$ tar xvpfz qmailanalog-0.70.tar.gz以下、glibc 2.3.1以降のお約束。
[yano@nx9030 yano]$ cd qmailanalog-0.70
[yano@nx9030 qmailanalog-0.70]$ patch < qmailanalog-0.70.errno.patch
[yano@nx9030 qmailanalog-0.70]$ make
[yano@nx9030 qmailanalog-0.70]$ sudo make setup check
[yano@nx9030 qmailanalog-0.70]$ cd
[yano@nx9030 yano]$ tar xvpfz qlogtools-3.1.tar.gz
[yano@nx9030 yano]$ cd qlogtools-3.1
[yano@nx9030 qlogtools-3.1]$ patch < qlogtools-3.1.errno.patch
[yano@nx9030 qlogtools-3.1]$ make
[yano@nx9030 qlogtools-3.1]$ sudo ./installer
[yano@nx9030 qlogtools-3.1]$ cd
[yano@nx9030 yano]$ wget http://www.qcc.sk.ca/%7Echarlesc/software/misc/qlogselect
[yano@nx9030 yano]$ chmod +x qlogselect
[yano@nx9030 yano]$ sudo cp qlogselect /usr/local/qmailanalog/bin
--- error.h.orig 1998-08-31 06:39:27.000000000 +0900
+++ error.h 2005-01-04 16:01:53.716976752 +0900
@@ -1,7 +1,7 @@
#ifndef ERROR_H
#define ERROR_H
-extern int errno;
+#include <errno.h>
extern int error_intr;
extern int error_nomem;
--- qfilelog.c.orig 2001-06-13 06:41:47.000000000 +0900
+++ qfilelog.c 2005-01-04 16:40:52.397443280 +0900
@@ -4,7 +4,7 @@
#include <string.h>
#include <unistd.h>
-extern int errno;
+#include <errno.h>
#define PAUSE sleep(60)
#!/bin/sh
MAILTO=logwatcher@bravotouring.com
MAILFROM=qmailanalog@bravotouring.com
export PATH="$PATH:/usr/local/bin:/usr/local/qmailanalog/bin"
tmpdir=/tmp/qmail-cron.$$.$RANDOM
mkdir $tmpdir
pushd $tmpdir >/dev/null
s_year=`date -d '1 week ago' +%Y`
s_month=`date -d '1 week ago' +%m`
s_day=`date -d '1 week ago' +%d`
e_year=`date +%Y`
e_month=`date +%m`
e_day=`date +%d`
x_year=`date -d '1 day' +%Y`
x_month=`date -d '1 day' +%m`
x_day=`date -d '1 day' +%d`
start="$s_year-$s_month-$s_day"
end="$e_year-$e_month-$e_day"
xday="$x_year-$x_month-$x_day"
LOGDIR=/var/log/qmail
echo -e "\n$start 〜 $end" >result
cat "$LOGDIR"/{"@",cur}* 2>/dev/null \
| tai64n2tai \
| qlogselect start $start end $xday \
| matchup >logfile 5>/dev/null
for ana in zoverall zddist zdeferrals zfailures zrhosts zsuids zrxdelay; do
echo -n "\n-----------Result of $ana------------" >>result
$ana 2>/dev/null <logfile >>result
done
rm -f logfile
(echo "To: $MAILTO"
echo "From: $MAILFROM"
echo "Subject: qmaillog for $e_year-$e_month-$e_day"
echo ""
cat result )| /var/qmail/bin/qmail-inject -f $MAILTO
rm -f result
popd >/dev/null
rm -rf $tmpdir
参照 | |
---|---|
qmailanalog | http://www.emaillab.org/djb/qmailanalog/qmailanalog.html |
qlogtools | http://untroubled.org/qlogtools/ |
qlogselect | http://www.qcc.sk.ca/%7Echarlesc/software/misc/ |
ITXイー・グローバレッジ株式会社が始めた「電子メールの浄化(アンチウィルスとスパムブロック)を行うサービス」が
福祉関係・自然保護等の活動を行っている各種団体やNPOが所有するドメイン、ならびに個人が所有・運用する非営利のドメインについては、有料サービス開始以降も無料でEPOCサービスをご利用頂けます。という事なので、早速利用の手続きをとって使ってみる事に。そゆわけでtinydnsの設定を変更する。2003/07/10
[root@portage root]# vi data
# SOA/NS/A
.bravotouring.com:210.175.***.***:ns1.bravotouring.com:86400
# SOA/NS
#.bravotouring.com::ns.spanavi.net:86400
.bravotouring.com:210.175.***.***:ns2.bravotouring.com:86400
# MX/A
@bravotouring.com::bunny.e-globaledge.com:10:86400
@bravotouring.com:210.175.***.***:mail.bravotouring.com:20:86400
# A
+bravotouring.com:210.175.***.***:86400
+www.bravotouring.com:210.175.***.***:86400
# TXT
'bravotouring.com:v=spf1 a -all:3600
'bravotouring.com:Powered by djbdns - http\072//cr.yp.to/djbdns.html
[root@portage root]# make
/usr/local/bin/tinydns-data
./tinydns-notify data
Received NOTIFY answer for bravotouring.com from 219.117.???.???
[root@portage root]#
参照 | |
---|---|
ITXイー・グローバレッジ株式会社 | http://www.e-globaledge.com/ |
EPOCから始まる電子メール浄化サービス | http://epoc.e-globaledge.com/EPOC/ |