qmail: 2004年3月アーカイブ

qmailanalog-0.70
http://cr.yp.to/qmailanalog.html

参考:ツールを使った効率的なログ分析術
http://www.atmarkit.co.jp/flinux/rensai/qmail10/qmail10a.html

qmailanalogはqmailのログから統計情報を取得するツールです。

conf-ccとconf-ldのccをgccに変更
$ make
# su
# make setup check
multilogを利用した一日前の集計をメールにて通知するqmailanalogスクリプト

daemontoolsqlogtoolsが必要です。

currentから先日分のログのみ抽出し、yyyy-mm-dd.log形式で保存し
先日分の集計をqmailanalogにて処理し、メールにて通知します。

solarisのdateコマンドで一日前の日付を取得するには
TZ=JST+15 date '+%Y-%m-%d'
としています

日が変わった0:00以降に動くようにcrontabに登録する。
#!/bin/sh
MAILTO=[メールの送信先]
MAILFROM=[メール送信元]
PATH=/usr/local/qmailanalog/bin:/var/qmail/bin:/usr/local/bin:/usr/bin:$PATH
tmpdir=/tmp/qmail-cron.$$.$RANDOM
mkdir $tmpdir

DAYAGO=`env TZ=JST+15 date '+%Y-%m-%d'`

LOGDIR=/var/log/qmail

cat /var/log/qmail/current | tai64nlocal \
 | grep $DAYAGO > /var/log/qmail/$DAYAGO.log
  
cat /var/log/qmail/$DAYAGO.log | tai64n | awk '{$2="";$3="";print}' | tai64n2tai \
 | /usr/local/qmailanalog/bin/matchup >logfile 5>/dev/null


for ana in zoverall zddist zdeferrals zfailures zrhosts zsuids zrxdelay \
zsenders zrecipients zsuccesses; do
  echo "" >>result
  echo "-----------Result of $ana------------" >>result
  $ana 2>/dev/null >result
done
rm -f logfile

(echo "To: $MAILTO"
echo "From: $MAILFROM"
echo "Subject: mailstats for $DAYAGO"
echo ""
cat result )| qmail-inject -f $MAILFROM
rm -f result
rm -rf $tmpdir
qlogtools-3.1
http://untroubled.org/qlogtools/

solarisでmakeする情報
http://www.sa16.com/install_log/index.html

svcfns.cとteepipe.cにincludeされているfork.hをはずし、
instcheck.cのsys_errlist[errno]);をstrerror(errno));に変更

svcfns.c
// #include "fork.h"
teepipe.c
// #include "fork.h"
instcheck.c
static void diesys(const char* msg)
{
  fprintf(stderr, "installer error: %s:\n  %s\n", msg,
    strerror(errno));
  exit(1);
}

static void diefsys(const char* msg, const char* filename)
{
  fprintf(stderr, "installer error: %s '%s':\n  %s\n", msg, filename,
    strerror(errno));
  exit(1);
}
$ make
$ su
# ./installer
# ./instcheck
# ./instshow
最新はqmail-scanner-1.21ですね
http://qmail-scanner.sourceforge.net/

solarisでqmail-scanner使うのにsuidperlの導入でまずはまりますが
configure時に
SUIDPERL=/usr/local/bin/perl ./configure
とかするとsuidperlの代わりにperlで導入可能です。

意味があるか不明ですがどうしてもsuidperlを使いたい場合はsolarisにsuidperl導入成功の事例がありますのでご覧ください。

vpopmailでSpamAssassin

maildropからspamdを呼び出してます。

/etc/mailfilter作成
if ( $SIZE < 262144 )
{
        exception {
                xfilter "/usr/local/bin/spamc -f -u $EXT@$HOST"
        }
}

to "./Maildir/"
所有者をvpopmailに、パーミッションは600に
# chown vpopmail:vchkpw /etc/mailfilter
# chmod 600 /etc/mailfilter
バーチャルドメインユーザの.qmail
| /var/qmail/bin/preline /usr/local/bin/maildrop /etc/mailfilter
spamdの起動、solarisでspamdを使う場合--syslog-socket=inetが必要
spamd -d -a -v -u vpopmail --syslog-socket=inet
courier-imap-3.0.2
http://www.inter7.com/courierimap.html

認証はvpopmailのみ使用
$ CC=/usr/local/bin/gcc \
CPP=/usr/local/bin/cpp \
CFLAGS="-O3 -mcpu=i686" \
CPPFLAGS="-I/usr/local/include -I/usr/local/ssl/include \
-I/export/home/vpopmail/include" \
LDFLAGS="-R/usr/local/lib -R/usr/local/ssl/lib -L/usr/local/lib \
-L/usr/local/ssl/lib -R/usr/local/mysql/lib/mysql -L/usr/local/mysql/lib/mysql \
-R/export/home/vpopmail/lib -L/export/home/vpopmail/lib" \
./configure --without-authdaemon --without-authldap --without-authcram \
--with-authvchkpw --prefix=/usr/local/imapd \
--enable-unicode=iso-8859-1,utf-8,iso-8859-10 \
--without-authpam \
--without-authpgsql \
--without-authpwd \
--without-authuserdb

$ make
$ su
# make install
# make install-configure

起動スクリプトのコピー
# cp /usr/local/imapd/libexec/imapd.rc /etc/init.d/imapd.rc
# ln -s /etc/init.d/imapd.rc /etc/rc2.d/S99imapd
# ln -s /etc/init.d/imapd.rc /etc/rc2.d/K41imapd
vpopmailユーザにて起動するように/etc/init.d/imapd.rc編集
57行目付近のcouriertcpdのオプションに-user=vpopmail -group=vchkpwを追加
                /usr/local/imapd/libexec/couriertcpd -address=$ADDRESS \
                       -user=vpopmail -group=vchkpw \
                        -stderrlogger=${exec_prefix}/sbin/courierlogger \
                        -stderrloggername=imapd \
vpopmail-5.4.3

本家では5.4系の5.4.0が「vpopmail 5.4.0 is availble」となってます。
http://www.inter7.com/vpopmail.html

vpopmail日本語FAQ
http://qmail.visionmakers.net/vpopmail/faq.html

バーチャルドメインにおけるqmailの運用
http://www.atmarkit.co.jp/flinux/rensai/qmail06/qmail06c.html

vpopmail+MySQLによるバーチャルドメイン作成。
POP Before SMTP、APOP対応です。

ユーザ、グループ作成
solarisはidに100未満を指定すると警告がでるのでidは100以上に
# groupadd -g 189 vchkpw
# useradd -g vchkpw -u 189 -d /export/home/vpopmail vpopmail
make前にMySQLの設定

データベースはvpopmail
ユーザーはvpopmailuser
$ /usr/local/mysql/bin/mysql -u root -h localhost -p
> CREATE DATABASE vpopmail;
> GRANT select,insert,update,delete,create,drop ON vpopmail.*
> TO vpopmailuser@localhost IDENTIFIED BY 'パスワード';
設定ファイルvpopmail.mysql作成
# echo "localhost|0|vpopmailuser|パスワード|vpopmail" > /export/home/vpopmail/etc/vpopmail.mysql
# chown vpopmail:vchkpw ~vpopmail/etc/vpopmail.mysql
# chmod 640 /export/home/vpopmail/etc/vpopmail.mysql
rootでインストール
$ su
# CFLAGS="-O3 -mcpu=i686" \
LDFLAGS="-R/usr/local/lib -R/usr/lib -R/usr/local/mysql/lib/mysql -L/usr/lib \
-L/usr/local/lib -L/usr/local/mysql/lib/mysql" \
CPPFLAGS="-I/usr/local/include -I/usr/local/mysql/include/mysql -I/usr/include" \
CPP=/usr/local/bin/cpp \
LIBS="-R/usr/local/lib -R/usr/lib -R/usr/local/mysql/lib/mysql \
-L/usr/lib -L/usr/local/lib -L/usr/local/mysql/lib/mysql -lmysqlclient -lz" \
CC=/usr/local/bin/gcc ./configure \
--enable-roaming-users=y \
--enable-relay-clear-minutes=10 \
--enable-incdir=/usr/local/mysql/include/mysql \
--enable-libdir=/usr/local/mysql/lib/mysql \
--enable-libs=/usr/local/mysql/lib/mysql \
--enable-auth-module=mysql \
--enable-domainquotas=y \
--enable-auth-logging \
--enable-many-domains=n \
--enable-mysql-logging

# make
# make install-strip
# cp *.h /export/home/vpopmail/include 
なぜかヘッダファイルがコピーされないので、手動でコピる

設定ファイルdefaultdomainに指定されたドメインユーザは、
username@yourdomain.com ではなくusernameにて接続可能になる
# echo "yourdomain.com" > /export/home/vpopmail/etc/defaultdomain


tcpserver用tcp.smtp作成
/export/home/vpopmail/etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""
:allow
crontabにてPOP接続してきたリレー登録も10分で削除
0,10,20,30,40,50 * * * * /export/home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null


qmailの起動スクリプト

tcpserver利用とログ取りにdaemontools付属のmultilogを使用しています。
multilogのオプションは、n10 で10世代保管、s10000000 で10Mでログの切り替え
# qmail
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
qmail-start ./Maildir/ | /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t n10 s10000000 /var/log/qmail &

# smtp
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
tcpserver -v -H -R -l0 -x /export/home/vpopmail/etc/tcp.smtp.cdb \
-u[qmaildのUID] -g[nofilesのGID] 0 smtp qmail-smtpd 2>&1 | \
/usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t n10 s10000000 /var/log/smtp &

# pop3
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
tcpserver -v -H -R -l0 0 pop3 \
qmail-popup [サーバのFQDN] \
/export/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1 |  \
/usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t n10 s10000000 /var/log/pop3 &

ログ保管ディレクトリ作成
# mkdir /var/log/qmail
# mkdir /var/log/smtp
# mkdir /var/log/pop3
# chown qmaill /var/log/qmail
# chown qmaill /var/log/smtp
# chown qmaill /var/log/pop3
.qmail-defaultの注意点
vpopmai-5.2xからの移行で.qmail-defaultに管理者宛に転送設定で、
&info@hoge.com
などとローカルユーザに転送するとloopしてしまうので注意。vdelivermailを必ず使用すること。
| /export/home/vpopmail/bin/vdelivermail '' info@hoge.com
エラーメールをすべて削除するにはdeleteを使う
| /export/home/vpopmail/bin/vdelivermail '' delete
  • qmailqueue qmailqueue-patch


  • 環境変数「QMAILQUEUE」によるトリガを利用可能にするパッチ
    Qmail-Scannerとの組み合わせで使う
  • qregex http://www.unixpimps.org/software/qregex/

  • これはbadmailfromで正規表現が利用可能になるパッチ

    さらにbadmailtoという制御ファイルにより受信拒否する自側アカウントを指定できる。
    あてずっぽうでsalesとかsupportとかの存在しないアカウントにspamが届く場合に使う
tcpserver
http://www.jp.qmail.org/のqmail関連ツールなど
$ make
$ su
# make setup check

このアーカイブについて

このページには、2004年3月以降に書かれたブログ記事のうちqmailカテゴリに属しているものが含まれています。

次のアーカイブはqmail: 2004年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.22-ja