qmail

メールサーバ(Mail Transfer Agent)です。ありゃ?いつのまにかパブリックドメインになっている!んーでも5年遅すぎたように思いますがどうでしょうか。 qmailパッケージがパブリックドメインに

環境設定

http://cr.yp.to/qmail.htmlから

qmail
ucspi-tcp
checkpassword or checkpw(APOP対応 vpopmailを使う場合はいりません。)
qmailanalog

をダウンロードします。ソースは/usr/loca/srcに展開します。
またhttp://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/もしくはhttp://ftp.sg.freebsd.org/pub/FreeBSD/ports/local-distfiles/sada/ からqmail-date-localtime.patchをダウンロードしておいてください。日本時間で表示するために必要になります。 さらにこれも落としておいてください。メールアドレス中の%と!と複数の@に対応できていないためのパッチです。これをしてないために、http://www.rbl.jp/svcheck.phpでひっかかってました。http://www.qmail.org/qmail-smtpd-relay-reject
vpopmailを使わずに、APOP対応させてたい場合は、http://checkpw.sourceforge.net/checkpw/からcheckpw-1.01.tar.gzをダウンロードして、

tar xzvf checkpw-1.01.tar.gz
cd checkpw-1.01
make setup check 
cd ..
cp ./checkpw-1.01/qmail-popup-auth.patch ./

このqmail-popup-auth.patchをあてるのはPOPユーザ用とAPOPユーザ用で2つ立ち上げるのではなく、1つで両方対応させるためのものです。ちなみにポートを指定する場合は、

tcpserver 0 110

とします。この0は、サーバを起動するIPアドレス/ホストを特定しなければ、0で、110がポートです。 またSMTP AUTHを使いたい場合は、http://members.elysium.pl/brush/qmail-smtpd-auth/より、qmail-smtpd-auth-0.30.tar.gzをダウンロードして、(31は使わず。理由は下で) Outbound Port25 Blocking をいろいろなISPがはじめたので、もやは必須でしょうか。

tar zxvf qmail-smtpd-auth-0.30.tar.gz
cp qmail-smtpd-auth-0.30/base64.* qmail-1.03
cp qmail-smtpd-auth-0.30/README.auth qmail-1.03
cp ./qmail-smtpd-auth-0.30/base64.* .  

またhttp://www.sera.desuyo.net/smtp-auth/から「qmail-smtpd-auth で SMTP-AUTH だけ許可するぞパッチ」をダウンロードしました。これが30用みたいなので、31を使ってないです。 ではさらにhttp://www.qmail.org/top.htmlからqmail-dkもダウンロードしておきます。これはsmtp-authを使ってかつSubmissionPort?(587)を使って送信専用とした場合、smtp(25)は、DomainKeys?認証にしておくことによって、SMTPサーバーからしか受け取らないようにできます。ただし、まだあまり普及していないらしく、試してみたい人はやってみてください。~ DomainKeys?を使う場合は、http://domainkeys.sourceforge.net/より、

wget http://nchc.dl.sourceforge.net/sourceforge/domainkeys/libdomainkeys-0.68.tar.gz
tar xzvf libdomainkeys-0.68.tar.gz 
cd libdomainkeys-0.68
make
gcc -DBIND_8_COMPAT -O2 -o dktest dktest.o -L. -ldomainkeys -lcrypto `cat dns.lib`
cp libdomainkeys.a ../
cp *.h ../
cd ..
wget http://qmail.org/qmail-1.03-dk-0.53.patch  
cd qmail-1.03
patch -p1 < ../qmail-1.03-dk-0.53.patch

とすると

patching file Makefile
Hunk #1 succeeded at 812 (offset 4 lines).
patching file qmail-dk.8
patching file qmail-dk.c 

と出力されます。qmail-1.03のフォルダでコンパイルすると

make setup check

qmail-dk,qmail-dk.8ができますので、

cp qmail-dk /var/qmail/bin/
cp qmail-dk.8 /var/qmail/man/man8/
chown qmailq:qmail /var/qmail/bin/qmail-dk
chmod 4711 /var/qmail/bin/qmail-dk

参考 http://blog.cles.jp/item/1778 またhttp://www.flounder.net/qmail/qmail-dns-patchからDNSのUDPが512バイトをこえると処理ができなくなることのパッチを落としておきます。 SPF用のパッチは、 http://www.saout.de/misc/spf/より

wget http://www.saout.de/misc/spf/qmail-spf-rc5.patch

だらだらと書いてますが、めんどくさい人はhttp://qmail.org/netqmail/のnetqmail-1.05はいろいろパッチ適応済みらしいです。spfのパッチも当たっているんですね。
http://shupp.org/より抜粋させていただきました。

Includes these popular patches:
   * smtp auth
   * tls/ssl
   * spf
   * qmail-queue (to allow for virus scanners)
   * maildir++ patch
   * support oversize dns packets (not necessary if you use dnscache)
   * chkuser (check for local vpopmail users, envelope syntax. requires vpopmail to be previously installed)
   * spam throttle
   * qregex (regular expression matching in badmailfrom and badmailto)
   * big concurrency (set the spawn limit above 255) 

ではqmailのインストールです。

gunzip -v qmail-date-localtime.patch.gz
tar zxvf qmail-1.03.tar.gz
cd qmail-1.03
patch < ../qmail-date-localtime.patch #<--パッチをあてる
patch < ../qmail-dns-patch #<--パッチをあてる
patch < ../qmail-smtpd-relay-reject #<--パッチをあてる
patch < ../qmail-smtpd-auth-0.30/auth.patch #<--SMTP AUTHのパッチをあてる(認証しなくても送信できてしまうらしいので、以下)
patch < ../qmail-smtpd-auth-0.30-iwm.patch #<--SMTP AUTHだけ許可パッチをあてる
patch < ../qmail-popup-auth.patch #<--パッチをあてる APOPの場合 vpopmailの場合はいらない。qmail-smtpd-auth-0.30/base64.* をソースになければコピーしておきます。
patch < ../qmail-spf-rc5.patch #<--spf対応用のパッチ ただしエラーがでるので、手で修正する。

qmail-smtpd-relay-rejectのパッチを当てている場合、qmail-smtpd.cを開いて、

int addrrelay()
{
  int j;
  j = addr.len;
  while(--j >= 0)
    if (addr.s[j] == '@') break;
  if (j < 0) j = addr.len;
  while(--j >= 0) {
    if (addr.s[j] == '@') return 1;
    if (addr.s[j] == '%') return 1;
    if (addr.s[j] == '!') return 1;
    if (addr.s[j] <= 0x20) return 1; <--追加
  }
  return 0;
}

編集しておいて、

mkdir /var/qmail
groupadd qmail
groupadd nofiles
useradd -d /var/qmail -g nofiles -s /bin/true qmaild
useradd -d /var/qmail -g nofiles -s /bin/true qmaill
useradd -d /var/qmail -g nofiles -s /bin/true qmailp
useradd -d /var/qmail/alias -g nofiles -s /bin/true alias
useradd -d /var/qmail -g qmail -s /bin/true qmailq
useradd -d /var/qmail -g qmail -s /bin/ture qmailr
useradd -d /var/qmail -g qmail -s /bin/true qmails
make setup check

エラーがでました。その場合は、error.hを修正します。extern int errno;の下に#include <errno.h>を追加。修正後、再度 make setup check

./config-fast test.com   <--サーバのFQDN

ではcontrolファイルを編集します。/var/qmail/control

defaultdomain  <--ドメイン名が省略された場合、補完されるドメイン名
locals         <--受信するホスト名・ドメイン名
rcpthosts      <--受信するホスト名・ドメイン名 バーチャルドメインのときはここに追加されています。

このとき、locals,rcpthostsは複数してすることができます。次にエイリアスの設定を行います。

cd /var/qmail/alias/
touch .qmail-postmaster
touch .qmail-mailer-daemon
touch .qmail-root
chmod 644 .qmail*

この中に&admin@mydomain.comと書いておくと、root,postmaster,mailer-daemon宛メールを転送してくれます。
.qmail-defaultとうのもあります。行き先不明のメールのあて先で、catch-allとして設定できます。
ではテストをしてみます。解凍したソースの中にhomeというファイルがありますので、/var/qmail/rcにコピーします。次に/var/qmail/rcを開いてMailboxをMaildirに変更します。Maildirの後ろに/は忘れないでください。これでMaildir形式に変更されます。その後ユーザごとにMaildirを作ってやる必要がありますので、ユーザのホームディレクトリで

/var/qmail/bin/maildirmake ./Maildir/

を実行します。 その後、

csh /var/qmail/rc &

で起動し、

echo "douda" | /var/qmail/bin/qmail-inject test@tete.com

とします。test@tete.comは好きなアドレスを指定してください。届いていればOKです。ではkill %1で終わっておきましょう。tcpserverのインストールをやってみます。エラーが出る場合は、errno.hのextern int errno;の下に#include <errno.h>を追加します。

tar zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make setup check

/var/qmail/control/tcp.smtpというファイルを作成して、

192.168.1.:allow,RELAYCLIENT=""
127.0.0.1:allow,RELAYCLIENT=""
:allow

を書き込みます。ちなみにこのあたりの詳細は、qmail メールサーバの構築P315にあります。

/usr/local/bin/tcprules /var/qmail/control/tcp.smtp.cdb /var/qmail/control/tcp.smtp.tmp < /var/qmail/control/tcp.smtp

POP3サーバもインストールしておきましょう。APOP対応のcheckpwの場合は、すでに上のほうで終わっています。checkpassword-0.90を解凍して、conf-homeファイルに/を/var/qmailに変更して、

cd checkpassword-0.90
make setup check

次に起動用のスクリプトです。

#!/bin/sh
[ -f /var/qmail/rc ] || exit 0
PATH=$PATH:/var/qmail/bin:/usr/local/bin
case "$1" in
   start)
       echo -n "Starting... qmail"
       csh -cf '/var/qmail/rc &'
       /usr/local/bin/tcpserver -v -u 503 -g 505 -x \
 /var/qmail/control/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 \ 
| /var/qmail/bin/splogger smtpd 3 &  <--cat /etc/passwd |grep qmaildで確認して-u -gの値を設定
       /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup \
smtpd.test.jp /var/qmail/bin/checkpassword \ 
<-smtp.test.comは変更してください。またcheckpwの場合は、/var/qmail/bin/checkpasswordを/bin/selectcheckpwにします。
/bin/checkpwでPOP、また /bin/checkapoppwでAPOPのみです。
/var/qmail/bin/qmail-pop3d Maildir &
       touch /var/lock/qmail
       ;;
   stop)
       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
       rm -f /var/lock/qmail
       ;;
   *)
       echo "Usage: "$0" {start|stop}"
       exit 1
esac
exit 0

ついでにdaemontoolsも入れておきましょう。システムトラブルがあって止まった場合でも自動的に再起動してくれるといったすぐれもんです。 http://cr.yp.to/daemontools/install.htmlより
参考 http://www.emaillab.org/djb/daemontools/daemontools-howto.html
http://www.unixuser.org/~euske/doc/daemontools/myfaq/faq-3.html

wget http://tools.qmail.jp/daemontools/daemontools-0.76.tar.gz
tar zxvf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
./package/install

またエラーや。お約束のerror.hのextern int errno;の下に#include <errno.h>を追加です。 すると/commandにファイルが作成されているのですが、これはすべて展開したディレクトリにあるファイルのシンボリックリンクですので、気をつけましょう。/etc/inittabの最終行に

SV:123456:respawn:/command/svscanboot

という行が追加されてます。 ではログ管理ユーザを追加します。

useradd -g qmail -d /var/qmail -s /bin/false qmaillog
useradd -g qmail -d /var/qmail -s /bin/false smtplog
useradd -g qmail -d /var/qmail -s /bin/false pop3log

では自動起動するための設定用ディレクトリを作成します。

mkdir /var/qmail/services      <---設定関係のディレクトリ
mkdir /var/qmail/services/qmail   <---qmail用
chmod +t /var/qmail/services/qmail
mkdir /var/qmail/services/qmail/log <---log用
chown qmaillog:qmail /var/qmail/services/qmail/log

ここでログをとるためにスティッキービットがたっている必要があるので、設定しています。またdaemontoolsは/serviceの中にあるrunという名前のファイルです。 では/var/qmail/services/qmailにrunという名前のファイルを作ります。

#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail

次に/var/qmail/services/qmail/log/runは

#!/bin/sh
exec /usr/bin/env - PATH="/usr/local/bin" setuidgid qmaillog multilog t ./main

では権限を変更しておきましょう。

chown qmaillog:qmail /var/qmail/services/qmail/run
chmod 700 /var/qmail/services/qmail/run
chown qmaillog:qmail /var/qmail/services/qmail/log/run
chmod 700 /var/qmail/services/qmail/log/run

次は/serviceにシンボリックリンクを張って起動してみます。

ln -s /var/qmail/services/qmail/ /service/qmail
ps aux | grep qmail

立ち上がっていれば成功です。次はsmtpです。

mkdir /var/qmail/services/smtpd   <---smtpd用
chmod +t /var/qmail/services/smtpd
mkdir /var/qmail/services/smtpd/log <---log用
chown smtplog:qmail /var/qmail/services/smtpd/log

次に/var/qmail/services/smtpd/runは

#!/bin/sh
exec /usr/local/bin/tcpserver -v -u 503 -g 505 -x /var/qmail/control/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

保存後はちょっと/var/qmail/bin/qmail-smtpdで問題があるらしいので、修正します。リソースを使い切ってしまうらしいのです。
参考:http://www.monyo.com/technical/unix/solaris/qmail/column_1.html

mv qmail-smtpd qmail-smtpd2
touch qmail-smtpd
chown root qmail-smtpd
chgrp qmail qmail-smtpd
chmod 755 qmail-smtpd

qmail-smtpdの内容

#!/bin/sh
ulimit -d 1024
exec /var/qmail/bin/qmail-smtpd2 ${1+"$@"}

次はsmtp用のログです。/var/qmail/services/smtpd/log/runを作成します。

#!/bin/sh
exec /usr/bin/env - PATH="/usr/local/bin" setuidgid smtplog multilog t ./main

では所有権を変更しましょう。

chown smtplog:qmail /var/qmail/services/smtpd/run
chmod 700 /var/qmail/services/smtpd/run
chown smtplog:qmail /var/qmail/services/smtpd/log/run
chmod 700 /var/qmail/services/smtpd/log/run

次は/serviceにシンボリックリンクを張って起動してみます。

ln -s /var/qmail/services/smtpd/ /service/smtpd
ps aux | grep qmail

立ち上がっていれば成功です。次はpopです。

mkdir /var/qmail/services/pop3
chmod +t /var/qmail/services/pop3
mkdir /var/qmail/services/pop3/log  
chown pop3log:qmail /var/qmail/services/pop3/log

次に/var/qmail/services/pop3/runは

#!/bin/sh
exec /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup \
smtp.test.com /var/qmail/bin/checkpassword \  <-smtp.test.comは変更してください。またcheckpwのときは/bin/selectcheckpwです。
/var/qmail/bin/qmail-pop3d Maildir 2>&1

次はpop用のログです。/varqmail/services/pop3/log/runを作成します。

#!/bin/sh
exec /usr/bin/env - PATH="/usr/local/bin" setuidgid pop3log multilog t ./main

では所有権を変更しましょう。

chown pop3log:qmail /var/qmail/services/pop3/run
chmod 700 /var/qmail/services/pop3/run
chown pop3log:qmail /var/qmail/services/pop3/log/run
chmod 700 /var/qmail/services/pop3/log/run

次は/serviceにシンボリックリンクを張って起動してみます。

ln -s /var/qmail/services/pop3/ /service/pop3

なぜか一度

svc: warning: unable to control

といって怒られたことがあります。このときはリブートしたら起動しました。 ではnetstat -taで確認します。またsvstat /service/qmailとかでも確認できるのでみておいてください。設定が間違っているときは0か1secondsになっていますので、設定を見直しましょう。

svstat /service/qmail
svstat /service/qmail/log
svstat /service/smtpd
svstat /service/smtpd/log
svstat /service/pop3
svstat /service/pop3/log

もしくは

svstat /service/*

この場合は、さらに下の階層は確認できません。 ここで私の場合は、最初logはすべて0でした。どうも/command/multilogのシンボリックリンクの元の場所がわるかったようです。ですので、すべて実体を/commandに移動しました。 止める場合は、

svc -d /service/qmail
svc -d /service/qmail/log
svc -d /service/smtpd
svc -d /service/smtpd/log
svc -d /service/pop3
svc -d /service/pop3/log

サービスの開始は

svc -u /service/qmail
svc -u /service/qmail/log
svc -u /service/smtpd
svc -u /service/smtpd/log
svc -u /service/pop3
svc -u /service/pop3/log

めんどくさい場合は、svc -u /service/* 設定ファイルを変更した場合は

svc -h /service/qmail

です。 では早速送信してみましょう。

telnet localhost 25
HELO ドメイン名
MAIL FROM: 送信者のメールアドレス
RCPT TO: 受信者のメールアドレス
DATA
Subject:test
honnbun <--本文
. <-終わり
quit

POPの場合は、

telnet localhost 110
USER test
PASS test
STAT <--何通届いているかをみます。
LIST <--一覧を見る
RETR 1 <--内容をみる
TOP 1 100 <--100行のみ見る
quit

参考:POP3(Post Office Protocol version 3)
ここで-ERR authorization failed とかエラーが出る場合は、APOPの可能性があります。では、ホームディレクトリで、

/var/qmail/bin/maildirmake Maildir

とし、

cd Maildir
echo "hogepass" >  .password
chmod 600 .password

でパスワードファイルを作っておきましょう。 動くの確認できましたら、/var/qmail/services/smtpd/runを変更します。不正中継を許さないようにするためです。

#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
exec /usr/local/bin/tcpserver -R -H -v -u "$QMAILDUID" -g "$NOFILESGID" \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp rblsmtpd -r relays.ordb.org \
-r bl.spamcop.net /var/qmail/bin/qmail-smtpd 2>&1

tcpserverの引数で、-l0 (エルゼロ)を指定するとローカルホストの検索をしないので、遅い場合は試してみましょう。 最近めっきり送信が遅くなったので、調べてましたら、relays.ordb.orgが止まっているではないカー

http://itpro.nikkeibp.co.jp/article/NEWS/20061219/257299/?ST=virus 送信が遅いときには-Rや-Hとかよく見かけますが、まさかordbがサービスを停止していたとは思いもよらなかったです。
SpamAssasinとClamAVとqmail-scanner

netqmail

#netqmailインストール
wget http://qmail.org/netqmail-1.05.tar.gz
tar xvzf netqmail-1.05.tar.gz
cd netqmail-1.05/other-patches
wget http://www.alib.jp/files/qmail-date-localtime.patch
wget http://www.qmail.org/qmailqueue-patch
cd ..
./collate.sh
cd netqmail-1.05
patch -p1 < ../other-patches/qmail-date-localtime.patch
mkdir /var/qmail
groupadd qmail
groupadd nofiles
useradd -d /var/qmail -g nofiles -s /bin/true qmaild
useradd -d /var/qmail -g nofiles -s /bin/true qmaill
useradd -d /var/qmail -g nofiles -s /bin/true qmailp
useradd -d /var/qmail/alias -g nofiles -s /bin/true alias
useradd -d /var/qmail -g qmail -s /bin/true qmailq
useradd -d /var/qmail -g qmail -s /bin/ture qmailr
useradd -d /var/qmail -g qmail -s /bin/true qmails
make setup check
cp home /var/qmail/rc
./config-fast hoge.com
vi /var/qmail/control/tcp.smtp #編集
 192.168.1.:allow,RELAYCLIENT=""
 127.0.0.1:allow,RELAYCLIENT=""
 :allow
/usr/local/bin/tcprules /var/qmail/control/tcp.smtp.cdb /var/qmail/control/tcp.smtp.tmp < /var/qmail/control/tcp.smtp
#tcpserverインストール
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar xzvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.a_record.patch
patch -p1 < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.nodefaultrbl.patch
make
make setup check

#vpopインストール
http://downloads.sourceforge.net/vpopmail/vpopmail-5.4.17.tar.gz?modtime=1152720482&big_mirror=0
tar xzvf vpopmail-5.4.17.tar.gz
cd vpopmail-5.4.17
#vchkpw.cのソースを直す
# hmac_md5( challenge, strlen(challenge), password, strlen(password), digest); を hmac_md5( response, strlen(response), password, strlen(password), digest);
# return(strcmp(digascii,response)); を return(strcmp(digascii,challenge));
groupadd -g 1089 vchkpw
useradd -g vchkpw -u 1089 vpopmail
mkdir /home/vpopmail
chown vpopmail:vchkpw /home/vpopmail
mkdir /home/vpopmail/etc
vi /home/vpopmail/etc/tcp.smtp #編集
 127.:allow,RELAYCLIENT=""
 192.168.1.:allow,RELAYCLIENT=""
 :allow
chown -R vpopmail:vchkpw /home/vpopmail/etc
./configure --enable-roaming-users=y --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp --enable-relay-clear-minutes=30 --enable-logging=y
make
make install-strip

vpopmail

vpopmailを使って、複数ドメインに対応してましょう。またAPOPにも対応しております。http://www.inter7.com/index.php?page=vpopmailよりダウンロードして、とりあえず解凍します。http://www.inter7.com/vpopmail/vpopmail.htmlをよく読んでおきましょう。

cd /usr/local/src
tar xzvf vpopmail-5.4.8.tar.tar

グループとユーザを追加します。

groupadd -g 1089 vchkpw
useradd -g vchkpw -u 1089 vpopmail

ではコンパイルしましょう。POPBeforeSMTPで10分としてます。POPBeforeSMTPとは、メールを送信する前にいったん受信して、承認が受けれれば送信できるので、不正な送信ができなくなります。

./configure --enable-roaming-users=y --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp --enable-relay-clear-minutes=30 --enable-logging=y

enable-roaming-usersはPOPbeforeSMTPを有効にします。 enable-relay-clear-minutesはPOPbeforeSMTPでリレーを許可する時間です。

make
make install-strip

tcp.smtpがないとおこられる場合は、あとで作ってください。内容は、

127.:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""
:allow

です。/home/vpopmail/doc/doc_html/vpopmail.htmlを一読しておきましょう。/home/vpopmailを確認してください。また

tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
chown vpopmail:vchkpw  /home/vpopmail/etc/tcp.smtp.cdb

tcprulesでtcpserver が高速アクセスできるようなバイナリ形式でcdbに書き出しときます。参考:http://www.emaillab.org/djb/tools/ucspi-tcp/tcprules.html
では早速仮想ドメインを追加するコマンドがありますので、実行します。

/home/vpopmail/bin/vadddomain hidekazu.dhs1.sst.ne.jp

削除は

/home/vpopmail/bin/vdeldomain hidekazu.dhs1.sst.ne.jp

ちなみにユーザの追加は

/home/vpopmail/bin/vadduser hoge@hidekazu.dhs1.sst.ne.jp

削除は

/home/vpopmail/bin/vdeluser hoge@hidekazu.dhs1.sst.ne.jp

実行後/home/vpopmail/domains/に移動して追加したドメインのディレクトリができいているかどうか確認してみましょう。できておれば、/var/qmail/services/pop3にいってrunを編集します。

#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" /usr/local/bin/tcpserver \ 
-R -H -l0 -v 0 pop3 /var/qmail/bin/qmail-popup \ 
test.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

また/var/qmail/services/smtpd/runも修正します。

#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
exec /usr/local/bin/tcpserver -R -H -v -u "$QMAILDUID" -g "$NOFILESGID" \
-x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

これで

telnet localhost 25

としてたとき/var/log/messagesに

tcpserver: warning: dropping connection, unable to read /home/vpopmail/etc/tcp.smtp.cdb: access denied

と表示されている場合は、

chmod 755 /home/vpopmail

またオプションの-R -Hは指定してください。送受信が遅いと感じたときにはこの指定がない場合があります。 参考:http://tools.qmail.jp/tcpserver.html
http://www.emaillab.org/djb/tools/ucspi-tcp/tcpserver.html
http://www.asahi-net.or.jp/~wv7y-kmr/memo/tcpserver.html
ちなみに-Rは、identプロトコルで接続元ホスト情報を取得しないのですが、このidentプロトコルとは最初に クライアントがサーバに接続し、次にサーバが IDENT を使用してクライアント に接続し直し、クライアントが誰であるかを確認するらしいです。
ただし逆引きできないホストからのメールを遮断したい場合は、-H(リモートホスト名を調べない)をとって、-p(パラノイドモード:接続元ホスト名を調査してそのIPアドレスが接続元IPアドレスと一致するかどうか調べる)は好みでつけてます。その後、/var/qmail/bin/qmail-smtpdの前に-b -cもつけて

=:allow
:allow,RBLSMTPD="Access denied. bad reverse DNS"

qmail-scannerを使っている場合は、

=:allow,QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
:allow,RBLSMTPD="Access denied. bad reverse DNS"

とするらしいのですが、まだ調査中です。
ではメールアカウントを追加します。

/home/vpopmail/bin/vadduser test@goodservice.jp test2

test2がパスワードになります。削除は

/home/vpopmail/bin/vdeluser test@goodservice.jp

パスワード変更は、

/home/vpopmail/bin/vpasswd test@goodservice.jp

POPBeforeSMTPのごみは削除しておきます。

crontab -e
30 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null

一度/home/vpopmail/bin/clearopensmtpを実行しておきましょう。open-smtpのファイルに接続してきたユーザのIPが入っているはずなので、確認してみてください。 ログはチェックしましょう。

tail -f /var/log/maillog

移行する場合は、

/var/qmail/control/locals
/var/qmail/control/rcpthosts
/var/qmail/control/virtualdomains
/var/qmail/users/assign
/var/qmail/users/cdb

あたりのファイルを持ってきます
さてsmtp-authにするにはどうすればいいでしょうか?/var/qmail/services/smtpd/runを修正します。

exec /usr/local/bin/tcpserver -R -H -v -u "$QMAILDUID" -g "$NOFILESGID" -x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp \
/var/qmail/bin/qmail-smtpd hogehostname /home/vpopmail/bin/vchkpw /bin/true 2>&1

スパムメールの拒否する場合は、

exec /usr/local/bin/tcpserver -R -H -v -u "$QMAILDUID" -g "$NOFILESGID" -x /home/vpopmail /etc/tcp.smtp.cdb 0 smtp
rblsmtpd -r relays.ordb.org -r bl.spamcop.net /var/qmail/bin/qmail-smtpd hogehostname /home/vpopmail/bin/vchkpw /bin/true 2>&1

またvchkpwの権限を変更しておきます。

chown root:root ~vpopmail/bin/vchkpw
chmod 4755 ~vpopmail/bin/vchkpw

では、qmailを再起動して、メーラから送信して、/var/log/maillogを見ると

vchkpw-smtp: password fail
vchkpw-smtp: (PLAIN) login success

なんだ?このvchkpw-smtp: password failは?http://www.marronkun.net/linux/mail/qmail_8.htmlを参考にさせていただきながら、 vpopmail(5.4.10)のvchkpw.cの706行目あたりを

hmac_md5( challenge, strlen(challenge), password, strlen(password), digest); 

から

hmac_md5( response, strlen(response), password, strlen(password), digest);

へ、また723行目あたりを

return(strcmp(digascii,response));

から

return(strcmp(digascii,challenge));

に変更して、メールを送信すると

vchkpw-smtp: (CRAM-MD5) login success

と出力されるようになりました。とりあえず、メーラはOutLookExpress6(こいつのログはvchkpw-smtp: (PLAIN) login successとなっている),Becky! Ver.2,ThunderBird?で確認しました。つぎにSubmissionPort?に対応させます。

exec /usr/local/bin/tcpserver -R -H -v -u "$QMAILDUID" -g "$NOFILESGID" -x /home/vpopmail /etc/tcp.smtp.cdb 0 smtp
rblsmtpd -r relays.ordb.org -r bl.spamcop.net /var/qmail/bin/qmail-smtpd hogehostname /home/vpopmail/bin/vchkpw /bin/true 2>&1

のsmtpを587にしておきます。これで送り側はSubmissionPort?でsmtpAuthになりましたが、smtp(25)で受けていないので、送信はできるが受信ができない状態になってます。しょうがないので、/var/qmailを/var/qmail25でコピーして、そちらで

/var/qmail25/services/smtpd/run

を動かしました。またcontrolディレクトを2つ管理するのも面倒なので、シンボリックリンクをはってます。ではsmtp(25)のDomainKeys?の設定ですが、また今度
一度

vchkpw-submission: vpopmail user not found

このエラーが出たことがあります。

chmod u+s vchkpw

をすればいけたのですが、以前はセットアップしたやつはこんなエラーでなかったんですが、どこかで間違えたか?

リンク

http://www.maid.ne.jp/~yy/freebsd/qmail.html
http://members.elysium.pl/brush/qmail-smtpd-auth/
http://www.sera.desuyo.net/smtp-auth/~ SMTP-AUTH だけ許可するぞパッチ
★FCとも(゚∀゚)の会 qmailとvpopmailでsubmission(サブミッションポート)SMTP-AUTHをやってみる
BSDあれこれ ●qmailな環境にOutbound Port 25 Blocking対策
ninnin.net blog qmail + vpopmailな環境でサブミッションポートからの送信を行う
@IT qmailでsubmissionポートの設定

メッセージ

4番台:一時的エラー
Deferral(421)	指定ドメインのSMTPサービスが動作不能のためコネクションを切断
Deferral(450)	メールボックス利用不可のため失敗
Deferral(451)	ローカルサーバエラーのため、コマンドの実行に失敗
Deferral(452)	容量不足のため、リクエストされたメールの受信に失敗
5番台:エラー
Failure(501)	宛先が不正
Failure(511)	宛先メールボックスがない
Failure(550)	メールボックスが有効でない、ユーザが存在していない
Failure(551)	宛先が拒否
Failure(553)	PTRレコードが不正
Failure(554)	送信者が拒否、メールボックスが有効でない

ssl化

465(smtps),995(pop3s)です。http://www.nrg4u.com/よりhttp://www.nrg4u.com/qmail/ucspi-tcp-ssl-20050405.patch.gzをダウンロードさせていただきました。では、ucspi-tcpにパッチをあてます。ucspi-tcpを解凍したディレクトリで、

zcat ucspi-tcp-ssl-20050405.patch.gz | patch
make
cp tcpserver /usr/local/bin/tcpserverssl

では

PEM1=/tmp/openssl.`date +%s`.$$.1
PEM2=/tmp/openssl.`date +%s`.$$.2
openssl req -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2
cat $PEM1 >  cert.pem
echo ""   >> cert.pem
cat $PEM2 >> cert.pem
rm -f $PEM1 $PEM2
chmod 600 cert.pem

でcert.pemを作ります。make certでもいいそうです。http://www.kawaz.jp/pukiwiki/?POP%A4%C8SMTP%A4%F2SSL%B2%BD%A4%B9%A4%EBを大変参考にさせていただきました。では、/var/qmail/services/smtpd/runを修正します。tcpserverをtcpserversslに、-nでcert.pemを指定して、-sを追加して、

exec env - PATH="/var/qmail/bin:$PATH"  /usr/local/bin/softlimit -m 15000000 /usr/local 
/bin/tcpserverssl -R -H -v -s -u "$QMAILDUID" -g "$NOFILESGID" -x /home/vpopmail/etc/tcp.smtp.cdb -n /var/qmail/cert.pem 
0 465 rblsmtpd -r relays.ordb.org -r bl.spamcop.net /var/qmail/bin/qmail-smtpd 2>&1

セカンダリ

/var/qmail/control/smtproutesに

hoge.jp:hogehoge.hoge.jp

とするとhoge.jp宛てのメッセージをhogehoge.hoge.jpに転送します。

:hogehoge.hoge.jp

とするとすべてhogehoge.hoge.jpに転送しますが、localsとvirtualdomainsにそのドメインの設定があれば、そちらを優先しますので、確認しておきましょう。

http://www.toshikazu.org/archives/000080.html

qmail-vida

http://qmail-vida.sourceforge.jp/からダウンロードします。SMTP認証ができバーチャルドメインと仮想ユーザにも対応しています。vpopmailをつかっていればいりません。ではユーザを作りましょう

groupadd vida
useradd -g vida pop
useradd -g vida -s /bin/false authdb
useradd -g vida -s /bin/false qmailu

次にパッチをあてます。この場合、他のソースにはpatchを当てていない状態にしておいてください。

make patch
make copy

ではqmail,checkpassword,tcpserverをインストールします。 その後は、qmail-vida-0.53/src/vidaで

make
make setup check

終了後、authdbディレクトリを作成します。

/var/qmail/bin/vida-pwdbinit

リンク

http://qmail-vida.sourceforge.jp/
http://www.stackasterisk.jp/tech/systemConstruction/qmail02_01.jsp
http://omori.asama.net/qmail.html
http://www.asahi-net.or.jp/~aa4t-nngk/qmail7.html

QVAdmin

qmail + qmail-vidaの環境のアカウント設定ツールだそうです。 http://software.my-highway.net/cgi/pukiwiki/pukiwiki.php?QVAdmin
う~んダウンロードできん...

チェック

メールサーバを構築したら、必ずチェックしておきましょう。

queue-fix

/var/log/maillogに

warning: trouble opening remote

といったエラーが出力されている場合は、queueがおかしくなっている可能性があります。http://www.netmeridian.com/e-huss/queue-fix.tar.gzからqueue-fixをダウンロードしましょう。その後解凍して、makeします。エラーが出る場合は、error.hに#include <errno.h>です。qmailを停止して、そのディレクトリで

./queue-fix -i /var/qmail/queue

細かいことはREADMEを読みました。余談ですが、本格翻訳 4 Superで翻訳したのですが、いがいと翻訳できておりました。

Qmail-Scanner

メールを送受信する際にメールのウィルスをチェックしてくれるプログラムです。まず

perl -e 'use DB_File;'

として、エラーが出る場合は、http://www.cpan.org/modules/by-module/TimeからTime-HiRes?-1.65.tar.gzをダウンロードします。(1.72がありました。8/6)

perl  Makefile.PL
make
make install

またhttp://www.cpan.org/modules/by-module/DB_File/からDB_File-1.810.tar.gzをダウンロードします。

perl  Makefile.PL
make
make install

reformineをインストールします。これは振り分けを行います。ではhttp://prdownloads.sourceforge.net/courier/からmaildrop-1.7.0.tar.bz2をダウンロードしました。(2007/4/24 2.0.4)

bzip2 -d maildrop-1.8.1.tar.bz2
tar xvf maildrop-1.8.1.tar
cd maildrop-1.8.1
./configure

2.0.4の場合エラーがでました。configure: error: pcre.h not found - install PCRE from www.pcre.org
ではhttp://www.pcre.org/より

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.0.tar.gz
tar xzvf pcre-7.0.tar.gz
./configure
make
make install

ではつづき

make 
make install
cp ./rfc2045/reformime /usr/local/bin #インストールされているかも

maildropはhttp://www.softclub.co.jp/~zoro/woody/courier/maildrop.htmlや、http://www.is.titech.ac.jp/~yanagis0/text/maildrop.htmlを参考にしてみてください。 次に、TNEFをインストールします。これはms-tnef形式のメッセージをデコードするためのプログラムです。http://sourceforge.net/projects/tnefからTNEF v1.2.3.1をダウンロードしました。(2007/4/24 1.4.3)展開後、

./configure
make install

次はhttp://www.clamav.net/からclamav-0.85.tar.gzをダウンロードします。(0.91 07/7/13)GPLライセンスに従って利用することができるオープンソースのソフトウェアのアンチウィルスソフトです。

groupadd clamav
useradd -g clamav -s /bin/true clamav
./configure
make
make install

uninstallする場合は、

make uninstall

updateの場合は、

/etc/init.d/clamd restart

contrib/init/RedHat?にclamdがありますので、これを /etc/init.dにコピーして、

chkconfig --add clamd

ブート時に立ち上げるようにしておきます。clamdのオプションは{start|stop|status|reload|restart|condrestart}です。 またupdateの場合は、こちらを参照しましょう。http://wiki.clamav.net/index.php/UpgradeInstructions
clamd socket nameは以前は/tmp/clamdでしたが、0.91から/tmp/clamd.socketに変わりました。

clamav-0.83以上はzlibのバージョンが1.2.1以下だと怒られるので、1.2.2以上にあげておきましょう。clamd -Vでバージョンを確認しておkます。 /usr/local/etc/freshclam.confを開いて

  • expampleを#expampleに
  • DatabaseMirror? db.jp.clamav.netを追加
  • LogSyslog?の#をとる

次はclamdの設定です。/usr/local/etc/clamd.confを開いて、

  • expampleを#expampleに
  • LogSyslog?の#をとる
  • User clamav の#をとってclamavをqscandに(Qmail-Scannerdで使う時)
  • ScanArchive?の#をとる 圧縮ファイルも対象
  • Debugは、 動作確認が終われば、#に
  • ArchiveMaxFileSize?の#をとって10Mぐらいに。これ以上のファイルは走査しない。 0.93では違うんで注意!
  • ArchiveMaxRecursion?の#をとって10ぐらいに。 何多重までので圧縮をみるか 0.93では違うんで注意!
  • ArchiveMaxFiles?の#をとって1000ぐらいに。最大何ファイルまで走査するか。 0.93では違うんで注意!
  • FixStaleSocket?の#をとってyesに clamdが強制終了した場合の再起動不可になるのを防ぐ

http://clamav-jp.sourceforge.jp/jdoc/clamav.html

0.90にアップデートすると、

clamdを起動中: ERROR: Parse error at line 43: Option LogSyslog requires boolean argument.
ERROR: Can't open/parse the config file /usr/local/etc/clamd.conf

http://wiki.clamav.net/Main/UpgradeInstructionsを参考します。とりあえず、あまりclamd.confとfreshclam.confを変更していなかったので、

mv /usr/local/etc/freshclam.conf /usr/local/etc/freshclam.conf8
mv /usr/local/etc/clamd.conf /usr/local/etc/clamd.conf8

として移動してやった後、make installしました。その後でconfを同様に修正してます。 0.90.1にアップデートすると

clamdscan: corrupt or unknown clamd scanner error or memory/resource/perms problem - exit status 32512/127

と出てきました。んー READMEを読むと

** Important note **: please run 'ldconfig' after installing this version.

なんてことだ。READMEを読むのは基本なのに、ついつい忘れていた.. ということで、

ldconfig

変更後、

/usr/local/bin/freshclam -v 

でアップデートしておきます。またアップデートログ用のファイルを作成しておきます。 0.93にアップデートしてみました。おっとエラーがでたぞ?

clamd を起動中: ERROR: Parse error at line 285: Unknown option ArchiveMaxRecursion.
ERROR: Can't open/parse the config file /usr/local/etc/clamd.conf
clamd を起動中: ERROR: Parse error at line 290: Unknown option ArchiveMaxFiles.
ERROR: Can't open/parse the config file /usr/local/etc/clamd.conf
clamd を起動中: ERROR: Parse error at line 290: Unknown option ArchiveMaxFiles.
ERROR: Can't open/parse the config file /usr/local/etc/clamd.conf

READMEにも書いてありましたが変更されれてるので、書き換えるか、コメントに。

clamd を起動中: LibClamAV Error: cli_loaddb(): No supported database files found in /usr/local/share/clamav
ERROR: Not supported data format

dbを入れ変えるのを忘れてた。

/usr/local/bin/freshclam --quiet -l /var/log/clam-update.log

これで起動しました。
2004年5月27日の時点で約21,694種類のウイルスに対応しています。今どのくらいだろ。 さて続きです。

touch /var/log/clam-update.log
chmod 600 /var/log/clam-update.log
chown clamav /var/log/clam-update.log

としてやり、

/usr/local/bin/freshclam --quiet -l /var/log/clam-update.log

をcronに登録しておきます。

0 * * * *  /usr/local/bin/freshclam --quiet -l /var/log/clam-update.log

これで1時間ごとにアップデイトされます。

http://www.eicar.org/anti_virus_test_file.htmからテスト用にウィルスをダウンロードしてテストしてみましょう。また

clamscan --infected --remove --recursive パス

でチェックできます。 このユーザはQmail-Scannerをインストールするときにつくるユーザです。 あとqmailにパッチをあてておきましょう。http://www.qmail.org/qmailqueue-patch
当てようとしましたら、

Reversed (or previously applied) patch detected!

と出力された場合は、netqmailですでにパッチが当たっているからです。 当てたらコンパイルです。make setup checkだけでOKです。./config-fastはしないです。 ではQmail-Scannerのインストールを行います。http://prdownloads.sourceforge.net/qmail-scannerからqmail-scanner-1.24.gzをダウンロードします。(2006/4/24 2.01)展開後、

groupadd qscand 

またhttp://www.asahi-net.or.jp/~aa4t-nngk/qmail6.htmlを参考にさせていただいて(大変丁寧に解説していただいてます)、

tar xzvf qmail-scanner-1.25.tgz
cd qmail-scanner-1.25
patch -p1 < ../qmail-scanner-1.25_jp_lsndr.patch
useradd -c "Qmail-Scanner Account" -g qscand -s /bin/false qscand
./configure --lang ja_JP.EUC  --redundant yes --notify recips,lsndr,nmladm --scanners clamdscan --install

参考http://qmail-scanner.sourceforge.net/configure-options.php
うっ、langでエラーが.. しょうがないので、

cd locale
cp -a ja_JP.EUC ja_JP.eucJP

ではもう一度。おっまたエラーだ。

BEGIN failed--compilation aborted at /var/qmail/bin/qmail-scanner-queue.pl line 283.

Jcodeか....CPANを参考にいれましょう.... このnotifyは感染通知をだれに送信するかです。none,sender,recips,admin,mnladm,allがあります。senderはどうせ詐称しているアドレスなので、はずしました。 そのあとで、

setuidgid qmaild /var/qmail/bin/qmail-scanner-queue.pl -g

で動く確かめます。だめな場合は、perl-suidperlがインストールされていない可能性がありますので、

which suidperl

としてない場合は、http://rpmfind.net/linux/RPM/からでもインストールしておきましょう。いれたのにもかかわらず、

/usr/bin/perl: symbol lookup error: /usr/bin/perl: undefined symbol: PL_block_type

と出た場合は、たぶんバージョンがひくいかもしれません。yumとか使ってupdateしておきましょう。

yum install perl-suidperl
yum update perl-suidperl

また/var/qmail/bin/qmail-scanner-queue.plをエディタでひらいて、

my $qmailinject = '/var/qmail/bin/qmail-inject';

my $qmailinject = '/usr/bin/nkf -j |/var/qmail/bin/qmail-inject';

に変更して文字化けに対応しておきます。また他のオプションで

my $DEBUG='1';

となってますが、qmail-queue.logがどんどん大きくなるので、0にしておきましょう。 次に/var/spool/qmailscan/quarantine-attachments.txtを開いて、最後の方にある、

.vbs    0       VBS files not allowed per Company security policy

とかのコメントをとっておきます。 また適当に追加しておきましょう。

.lnk    0       LNK files not allowed per Company security policy
.scr    0       SCR files not allowed per Company security policy
.wsh    0       WSH files not allowed per Company security policy
.hta    0       HTA files not allowed per Company security policy
.pif    0       PIF files not allowed per Company security policy
.cpl    0       CPL files not allowed per Company security policy
.exe    0       EXE files not allowed per Company security policy
.cmd    0       CMD files not allowed per Company security policy
.dll    0       DLL files not allowed per Company security policy
.js     0       JS files not allowed per Company security policy
.reg    0       reg files not allowed per Company security policy
.wsf    0       WSF files not allowed per Company security policy
.wsc    0       WSC files not allowed per Company security policy
.bat    0       BAT files not allowed per Company security policy
.mdb    0       MDB files not allowed per Company security policy

この0の両端はタブです。追加したら、以下のコマンドを実行です。databaseを再構築です。

setuidgid qmaild /var/qmail/bin/qmail-scanner-queue.pl -g

また/var/spool/qmailscan/quarantine/にウィルスメールがたまってきますので、

find /var/spool/qmailscan/quarantine/ -type f -mtime +10 -exec rm -f '{}' ';'

でcronで消しておきましょう。 次はsmtpの起動スクリプトを修正します。/var/qmail/services/smtpdの先頭にでも、

QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE

を付け加え、

exec /usr/local/bin/softlimit -m 15000000 /usr/local/bin/tcpserver \ 
-R -H -v -u "$QMAILDUID" -g "$NOFILESGID" -x \ 
/home/vpopmail/etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

に修正します。参考:softlimithttp://www.emaillab.org/djb/tools/daemontools/softlimit.html
ではqmailを起動してみます。起動後、qmail-scanner-1.24/contribで

./test_installation.sh -doit
mail-inject: fatal: qq temporary problem (#4.3.0)

するとエラーがでました。これはperl-suidperlがなかったために出ているようでした。他にもclamdが動いてない場合とか...
ここでひっかかったウィルスは/var/qmail/bin/qmail-scanner-queue.plの$scandirに記述してあるディレクトリのquarantine/にあるので、適当にけしておきましょう。

Disallowed  characters found in MIME headers

と表示されまた場合は、/var/qmail/bin/qmail-scanner-queue.plの

my $BAD_MIME_CHECKS='1';

my $BAD_MIME_CHECKS='0';

と修正してみてください。これはポリシーの問題ですが。 あとは、my @local_domains_arrayにドメインを追加しておきましょう。これで通知されるはずです。

リンク

http://www.qmail.org/qmailqueue-patch
http://prdownloads.sourceforge.net/qmail-scanner/
アンチウィルス(大変お世話になりました)
メールサーバで行うウイルス対策
メールサーバでのウイルススキャン -qmail編-
ClamAVのページ
http://www.kuri3.net/pukiwiki/index.php?SecureMail#qmail_scanner
http://qmail-scanner.sourceforge.net/FAQ.php
http://www.fkimura.com/qmail0.html
ORDB FAQ

SpamAssassin?

まずhttp://www.procmail.org/よりprocmail version 3.22をダウンロードします。procmailはメールの振り分けを行うソフトです。maildropを使う場合はいりません。

tar xzvf procmail-3.22.tar.gz

MakefileのBASENAMEでインストール先を指定できます。

BASENAME = /usr/local

では続けます。

make
make install-suid

またいくつかPerlモジュールを入れておきます。

perl -MCPAN -e shell
install Digest::SHA1
install HTML::Tagset
install HTML::Parser
insall Storable
install Net::DNS
(参考 install HTML::Parser DB_File Net::DNS BerkeleyDB Net::SMTP Mail::SPF::Query IP::Country::Fast )

ではhttp://spamassassin.apache.org/より、3.0.4をダウンロードしました。(2006/4/26 3.1.8)

tar xzvf Mail-SpamAssassin-3.0.4.tar.gz
cd Mail-SpamAssassin-3.0.4
perl Makefile.PL PREFIX=/usr/local

check network rulesをyにしてそれ以外は、すべてリターンでいきました。

make
make install

うまくいっているかテストしてみましょう。

spamassassin -t < sample-nonspam.txt
spamassassin -t < sample-spam.txt

/usr/local/bin/にインストールされたspamdとspamcはバイナリでspamdがデーモンで常駐し、spamcが利用するということになります。

cp spamd/redhat-rc-script.sh /etc/init.d/spamd
chmod 700 /etc/rc.d/init.d/spamd
cd /etc/init.d/
chkconfig --add spamd

次にコピーしたspamdのSPAMDOPTIONSを

"-d -m5 -v -u vpopmail"

にしておきます。 vpopmailを使う為です。また

if [ -f /etc/sysconfig/spamassassin ] ; then
       . /etc/sysconfig/spamassassin
fi

をコメントにしておきました。また

daemon $NICELEVEL spamd $SPAMDOPTIONS -r $SPAMD_PID

daemon $NICELEVEL /usr/local/bin/spamd $SPAMDOPTIONS -r $SPAMD_PID

にしてます。テストしているときにとても遅いと思っていたのですが、古いバージョンが/usr/binにおり、そちらで動いていたので、フルパスにしてます。 spamdのオプションはhttp://spamassassin.apache.org/full/3.0.x/dist/doc/spamd.htmlを参照しましょう。 次に/etc/mail/spamassassin/local.cfをTLEC - 個人ユーザ用SPAM避けspamassassin のユーザ定義ファイル(SpamAssassin を fetchmail から利用する方法)で置き換えておきます。
スコアはlocal.cfの

required_score 13.0

で設定しておきます。
ではmaildropでの方法です。 /etc/mailfilterを作成します。

if ( $SIZE < 500000 )
{
  exception {
    xfilter "/usr/local/bin/spamc -f -u $EXT@$HOST"
  }
}
to "./Maildir/"

その後、権限の変更をします。

chown vpopmail:vchkpw /etc/mailfilter
chmod 600 /etc/mailfilter

では振り分けをしたいユーザのディレクトリ(/home/vpopmail/domain/hogedom/hogeuser)に.qmailファイルを作成します。

| /var/qmail/bin/preline /usr/local/bin/maildrop /etc/mailfilter

後はspamdを起動させて、確認しましょう。

/etc/init.d/spamd start

spamと判断されたメールを振り分けるには/home/vpopmail/domains/hogedom/hogeuser/Maildirに.spamをvpopmailユーザで作成しておきます。

cd /home/vpopmail/domains/hogedom/hogeuser
maildirmake -f spam ./Maildir

/etc/mailfilterを修正します。 うまくいかない... 調査中→どうも if (...) {って書いちゃだめで、{しかない行をつくらないといけないようでした。 参考:http://www.is.titech.ac.jp/~yanagis0/text/maildrop.html ありがとうございます。

if ( $SIZE < 500000 )
{
    exception {
      xfilter "/usr/local/bin/spamc -f -u $EXT@$HOST"
    }
}
if (/^X-Spam-Flag: *YES/)
{
  to "./Maildir/.spam/"
}
else
{
  to "./Maildir/"
}

procmailの場合は、 振り分けをしたいユーザのディレクトリ(/home/vpopmail/domain/hogedom/hogeuser)に.qmailファイルを作成します。

| /usr/bin/procmail -m ./.procmailrc

次に.procmailrcを作ります。

PATH=/usr/bin:/bin:/usr/local/bin
HOME=/home/vpopmail/domains/hogedom/hogeuser
MAILDIR=$HOME/Maildir
DEFAULT=$HOME/Maildir/
LOGFILE=/var/log/procmail/hogeuser.log
LOCKFILE=$MAILDIR/procmail.lock
:0fw:
* < 600000
| /usr/local/bin/spamc
:0:
* ^X-Spam-Status:.Yes
$HOME/Maildir/.spam/

LOCKFILEまではいいとして、:0 はひとつの判定条件の始まりを示します。次の:0もしくはEOFまででひとつの判定条件です。次の*は条件文になります。^は行頭と意味しますので、X-Spam-Status:.Yesがあれば、$HOME/Maildir/.spam/に移動しなさいという意味になります。 また$HOME/Maildir/.spam/を! hoge@hogehoge.jpとしておけば転送されますので、spam用のアカウントに飛ばしてもいいでしょう。

さてspam以外のメールを別のところに転送したい場合はどう書こうか...

PATH=/usr/bin:/bin:/usr/local/bin
HOME=/home/vpopmail/domains/hogedom/hogeuser
MAILDIR=$HOME/Maildir
DEFAULT=$HOME/Maildir/
LOGFILE=/var/log/procmail/spam.log
LOCKFILE=$MAILDIR/procmail.lock
:0fw:
* < 600000
| /usr/local/bin/spamc
:0:
* ^X-Spam-Status:.Yes
! spam@hoge.jp
:0c:
* ^X-Spam-Status:.No
! keitai@hoge.jp

としておけば、スパムと判定されたメールはspam@hoge.jpに飛び、判定されなかったやつはkeitai@hoge.jpに飛びます。 また:0cとしているので、コピーが残りますので、両方で受けれます。
ではテストしてみましょう

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

を含むメールをおくってみるとspamと判定されればOKです。 内容は、Tests Performedを参照しましょう。
sa-updateとすると

Can't locate Archive/Tar.pm in @INC (@INC contains:...

とでたので、

perl -MCPAN -e shell
Archive::Tar.pm

として入れておきました。/var/lib/spamassassin/3.002004にダウンロードされてます。
参考:http://spamassassin.jp/modules/xhnewbb/viewtopic.php?topic_id=14

では学習もさせましょう。いろいろとspamと判定されているものやすりぬけたものを仮に/home/hoge/Maildir/curに集めておいて、

/usr/bin/sa-learn --spam /home/hoge/Maildir/cur

とすると、学習してくれるのですが、

plugin: failed to parse plugin (from @INC): Can't locate Mail/SpamAssassin/Plugin/Check.pm in @INC
plugin: failed to parse plugin (from @INC): Can't locate Mail/SpamAssassin/Plugin/HTTPSMismatch.pm
plugin: failed to parse plugin (from @INC): Can't locate Mail/SpamAssassin/Plugin/URIDetail.pm

とかいろいろエラーがでちゃいましたので、

perl -MCPAN -e shell
install Mail::SpamAssassin::Plugin::Check

とかしていれてやりました。 spamと判断されたくない場合は、local.cfに

whitelist_from *hoge.co.jp
whitelist_from test@hoge.co.jp
whitelist_*@hoge.co.jp

とか追加しておきます。

実行すると、

netset: cannot include 127.0.0.1/8 as it has already been included

ってなメッセージがでました。 http://www.global-domination.org/forum/viewtopic.php?p=3528を参考にしてみよっと。

TVD_SPACE_RATIO

なんかこれでよくスコアが上がってる。文章にどの割合で空白文字が入っているかみたいなんだけど、日本語じゃないから そこまでシビアにみないでもいい気がする。てことで、 user_prefsに

score TVD_SPACE_RATIO 0

を追記した。

リンク

Procmail の紹介とレシピの書き方 大変わかりやすくレシピの書き方を紹介されてます。
PROCMAIL エラーメッセージ等大変参考になりました。
スパムアサシン(spamassassin)の設定メモ いい加減なメモとありましたが、大変助かりました。
SpamAssassin で spam メールの排除 procmailからSpamAssassin?まで丁寧に解説されておられます。spam メールのサンプルとかありました。
作業メモ spamassassin+vpopmail+procmailで自動振り分けの紹介です。
作業メモ spamassassin メモ
oheso.cfg SpamAssassin?のインストールについていかかれています。
http://search.cpan.org/src/FELICITY/Mail-SpamAssassin-2.62/spamd/README.spamd-vpopmail vpopmailでSpamAssassin?を使う方法が書かれています。
http://search.cpan.org/src/FELICITY/Mail-SpamAssassin-3.1.8/spamd/README.vpopmail こちらは3.18用です。 Debian GNU/Linux バーチャルドメインSPAM設定が大変ためになりました。
blogのようなもの 大変参考にさせていただいているサイトです。
サーバー構築 はまりメモ Courier Mail Server + maildrop + spamassassinがわかりやすく紹介されておられます。
SpamAssassin によるスパムメール対策 とても丁寧な解説があります。

vqadmin

vqadminはWebからドメイン管理を行うためのツールです。アカウントの追加等も可能です。ではhttp://www.inter7.com/index.php?page=vqadminからダウンロードします。 vqadmin-2.3.2.tar.gzを落としました。

tar xzvf vqadmin-2.3.2.tar.gz
./configure --enable-cgibindir=/usr/local/apache/cgi-bin
make
make install-strip

ではhttpd.confに

ScriptAlias /cgi-bin/vqadmin/ "/usr/local/apache/cgi-bin/vqadmin/"
<Directory "/usr/local/apache/cgi-bin/vqadmin">
   Deny from all
   Options ExecCGI
   AllowOverride AuthConfig
   Order deny,allow
</Directory>

としてやります。次に/usr/local/apache/cgi-bin/vqadminにある、.haccessを見てみます。これで、vqadmin.passwdとあるはずですので、パスワードファイルを作成します。

/usr/local/apache/bin/htpasswd -bc vqadmin.passwd admin passwd

では、http://www.test.com/cgi-bin/vqadmin/vqadmin.cgiで表示されればOKです。 ただし、このとき/cgi-bin以外に入れた場合は、/cgi-bin/vqadmin/htmlにあるhtmlを直しましょう。

SqWebMail?

Maildir形式に対応した、Webサーバ経由のメーラーです。ではhttp://www.tom.comm.waseda.ac.jp/~ichi/sqwebmail/japan/からsqwebmail-3.3.7-p1.japan.1.4.tar.gzをダウンロードします。

./configure --enable-mimecharset=iso-2022-jp --enable-cgibindir=/test/cgi-bin/ \ 
--enable-imagedir=/etc/images/sqwebmail \ 
--enable-imageurl=/images/sqwebmail --disable-authpwd --enable-authvchkpw
make
make install-strip
make install-configure
  • enable-mimecharset=iso-2022-jp 日本語
  • enable-cgibindir=/test/cgi-bin SqWebMailcgi?のインストール先
  • enable-imagedir=/etc/images/sqwebmail イメージのディレクトリを指定
  • enable-imageurl=/image/sqwebmail イメージのディレクトリのURL
  • disable-authpwd vpopmailを使っているので、/etc/passwd認証は使いません。
  • enable-authvchkpw vpopmailのvchkpw認証を使います。

/usr/local/share/sqwebmail/にインストールされてます。/usr/local/share/sqwebmail/authdaemonrcのauthmodulelistは

authmodulelist="authvchkpw"

にしておきます。 ではcronにキャッシュをクリアする設定を追加しておき、毎日5時にcacheを掃除します。

0 5 * * * /usr/local/share/sqwebmail/cleancache.pl

また承認用モジュールを起動します。

/usr/local/share/sqwebmail/libexec/authlib/authdaemond start

これは/etc/rc.d/rc.localにでも記述しておきましょう。 ではブラウザから起動してみましょう。http://www.test.com/cgi-bin/sqwebmail 送信できん........ いろいろと調べていると、/usr/local/share/sqwebmailにあるsendit.shの中に

exec /usr/sbin/sendmail -oi -t -f "$1"

とあったんですが、これを

exec /var/qmail/bin/qmail-inject -f "$1"

に変更しておきましょう。 /var/log/messagesをみていると

sqwebmail: maildircache: Cache create failure - unable to create /var/cache/sqwebmail/153390/so/xxx@yyy.zzz.authdaemon.sate

と出力していました。この場合、ls -laで/var/cache/の権限を確認してください。 添付ファイルが大きいとき

Attachment size exceeds limit set by system administrator

とエラーが表示されます。

--with-maxmsgsize=20000000
--with-maxformargsize=20000000
--with-maxargsize=20000000

とかコンパイル時に指定しないとだめっぽいです。2MがMAX?

http://qmailsolutions.com/webmailer/sqwebmail.html
http://www.tom.comm.waseda.ac.jp/~ichi/sqwebmail/

IlohaMail?

WebMail?です。http://blog.ilohamail.org/よりダウンロードしまいた。

wget http://download.ilohamail.org/files/IlohaMail-0.8.14-rc3.tar.gz

後はwebrootにコピーしたらOKです。もしくはaliasで。なぜか添付がうまくいかないー あれ?うまくいってる?なぜだ?しかしセットアップは楽です。別にMySQLを使わなくても動きますので、お手軽にはじめたいときはいいです。初期画面のデフォルトはIlohaMail?\conf\login.phpで変更します。あら?添付ファイルをつけたメッセージをIlohaMail?から送ってIlohaMail?で見てみると添付としてでなくて、そのままみれてしまいます。ん?メールヘッダを見てみると、Content-Typeが2つくっついてますね。

Content-Type:multipart/mixed; boundary=・・・・・・
Content-Type:text/plain;・・・・・・

どうもこの最後のContent-Type:text/plain;をみてテキストと判断しているようです。これは送信時に問題がありそうです。source/compose2.phpの605行目からみていきますと、

if (!empty($SMTP_SERVER)){

とありますが、この$SMTP_SERVERは、conf/conf.phpの$SMTP_SERVERの値です。ここに値が設定されているかどうかで、smtp_mailかmailのどちらかをつかうか変わります。こめんとにも

smtp_mail //send thru SMTP server using cusotm SMTP library
mail //send using PHP's mail() function

とありました。このmailがヘッダの最後にContent-Type:text/plainをつけているようでしたので、$SMTP_SERVERを設定してやるとちゃんと見れました。

ん?utf-8のメールが化けているな。lang/common.incのfunction LangDecodeMimeString?($str, $charset){ に

//return utf8ToUnicodeEntities($rest);
return mb_convert_encoding($rest,$charset,"AUTO");

とすると件名は化けなくなった。まだボディが化けてるな。 include/read_message_print.incの

/* run through character encoding engine */
echo "\n<!-- converting from $charset to $my_charset //-->\n";
$body=LangConvert($body, $my_charset, $charset);

echo "\n<!-- converting from $charset to $my_charset //-->\n";
$body=mb_convert_encoding($body,$my_charset,"AUTO");
//$body=LangConvert($body, $my_charset, $charset);

にして、

if (!$html_encoded){
    if ($is_unicode) $line = utf8ToUnicodeEntities($line);    
    else $line = encodeUTFSafeHTML($line);
}

if (!$html_encoded){
    if ($is_unicode) $line = encodeUTFSafeHTML($line);    //utf8ToUnicodeEntities($line);    
    else $line = encodeUTFSafeHTML($line);
}

にするととりあえず表示されましたが、かなり抜本的な解決ではないです。

http://fkimura.com/ilohamail0.html

qmHandle

qmHandleはqmail-qstat、qmail-qreadプラス、キューの削除も行えます。 http://qmhandle.sourceforge.net/からqmhandle 1.2.0 をダウンロードしました。

mkdir /var/qmail/qmHandle
cd /var/qmail/qmHandle
tar xvfz qmHandle*
ln -s /var/qmail/qmHandle/qmHandle /usr/bin/qmhandle

ではqmhandleを起動してます。オプションは以下のとおりです。

-a 再送
-l ローカル/リモートすべてのキューを表示 
-L ローカルキューを表示 
-R リモートキューを表示 
-s 統計情報の表示 
-mN Message-Id Nのメッセージを表示 
-dN Message-Id Nのキューを削除 
-D ローカル/リモートすべてのキューを削除 
-c 出力結果をカラー表示 
-N Message-Idを表示。ただし、-l、-L、-Rオプションと一緒に指定する必要がある 

またKawa.netxp queue-fast.pl - qmail のメールキューの閲覧・削除に 指定アドレス宛のキューの削除等公開されており、大変参考にさせていただいております。

qmailanalog

http://cr.yp.to/software/qmailanalog-0.70.tar.gzからダウンロードして、展開してコンパイルです。

tar xzvf qmailanalog-0.70.tar.gz
cd qmailanalog-0.70
make

エラーがでました。その場合は、error.hを修正します。extern int errno;の下に#include <errno.h>を追加して、

make
make setup check

これで/usr/local/qmailanalog/にインストールされてます。binにmatchupってあるとおもいますが、これが整形をしてくれます。またzやxで始まるスクリプトが解析をおこないます。では実行してみます。sploggerの場合です。

#!/bin/sh
#
PATH=/usr/local/qmailanalog/bin:/var/qmail/bin:$PATH
MAILLOG="/var/log/maillog"
QMAILLOG="/var/tmp/qmail.$$"
MAILTO=mailto@hoge
MAILFROM=mailfrom@hoge
/usr/bin/awk '{$1="";$2="";$3="";$4="";$5="";print}' < $MAILLOG | matchup > $QMAILLOG
(echo "To: $MAILTO"
echo "From: $MAILFROM"
echo "Subject: maillog"
echo ""
zoverall < $QMAILLOG
zfailures < $QMAILLOG
zdeferrals < $QMAILLOG
zrecipients < $QMAILLOG
zsenders < $QMAILLOG )| qmail-inject -f $MAILFROM
/bin/rm -f $QMAILLOG

これでメールがくればとりあえずOKです。よければcronに登録しておきましょう。ちなみに

zoverall <--基本的な統計 
zfailures <--失敗統計 
zdeferrals <--延期統計 
zrecipients <--受信者統計 
zsenders <--送信者統計 

http://www.atmarkit.co.jp/flinux/rensai/qmail10/qmail10a.html
http://www.emaillab.org/djb/qmailanalog/qmailanalog.html

メーリングリストmailman

mailmanというソフトをインストールします。http://www.list.org/download.htmlからmailman-2.1.5.gzをダウンロードしました。またhttp://mm.tkikuchi.net/からMailman-2.1.5 ジャンボ修正パッチもダウンロードしました。このmailmanはpython2.1以降が必要であるとのことなので、インストールされているか確かめましょう。またpythonにはhttp://www.python.jp/Zope/downloadからJapaneseCodecs?もいれておきましょう。 mailmanを解凍して、そのディレクトリで

patch -p0 < /work/mailman-2.1.5+patch.20040901.gz

としました。ではmailman用のユーザをつくります。

useradd -d /home/mailman mailman
groupadd mailman
chgrp mailman /home/mailman
chmod a+rx,g+ws /home/mailman

http://nav.bandersnatch.org/clues/qmail-vpopmail-mailman.html http://www.python.jp/Zope/download

メーリングリストfml

fmlというソフトを使います。http://www.fml.org/software/fml/index.htmlhttp://www.fml.org/software/fml/download.htmlから、fml-4.0-stable-20040215.zipをダウンロードしました。 http://www.fml.org/software/fml/INSTALL/index.htmlを参考にインストールしてきます。

groupadd fml
useradd -g fml fml
mkdir /usr/local/fml
chown fml:fml /usr/local/fml
su - fml
mkdir /home/fml/ml
perl makefml install

インストールが始まります。このとき

TOP LEVEL ML DIRECTORY    [/var/spool/ml] /home/fml/ml

以外はリターンでいきました。バーチャルドメインは、

DOMAIN NAME               virtualdomain.com
FQDN                      virtualdomain.com
EXEC FILES DIRECTORY      /home/vpopmail/domains/virtualdomain.com/fml
TOP LEVEL ML DIRECTORY    /home/vpopmail/domains/virtualdomain.com/ml

後はyでリターン

chown -R vpopmail.vchkpw /home/vpopmail/domains/virtualdomain.com/fml
chown -R vpopmail.vchkpw /home/vpopmail/domains/virtualdomain.com/ml

メーリングリストをつくります。makefmlでヘルプが出るので参考にしてください。

cd /home/vpopmail/domains/virtualdomain.com/fml
makefml newml test
cd /home/vpopmail/domains/virtualdomain.com
ln -s /home/vpopmail/domains/virtualdomain.com/ml/etc/qmail/alias/.qmail* /home/vpopmail/domains/virtualdomain.com

次に/home/vpopmail/domains/virtualdomain.com/ml/etc/qmail/alias/で.qmail-test-admin、.qmail-test-requestのアドレスを編集します。また/var/qmail/users/assignも編集します。

+virtualdomain.com-test:vpopmail:1089:1089:/home/vpopmail/domains/virtualdomain.com/ml/etc/qmail/alias:-:test:

編集後、qmail-newuでcdbを更新します。ユーザの追加は/home/vpopmail/domains/virtualdomain.com/fmlで

makefml add ML addr               add <addr> to <ML>

WEBで操作したい場合は、

makefml admin.cgi config

CGIの設定 /usr/local/fml/makefml admin.cgi config

/usr/local/fml/makefml newml test

リンク

http://www.kt.rim.or.jp/~atsato/ml/basic/software.html
http://www.hitsuji.gr.jp/yms/yuzo/linux/fml.html
http://www.omake-world.com/~fsting/inst_memo/fml.html
http://eshima.net/main/linux_tips.php?ttl=mailserver
http://ww7.tiki.ne.jp/~kusa/memo/fml.html
http://r286.com/arc/352
http://www.sapporo.iij.ad.jp/staff/fukachan/fml/menu.html

自動応答

自動応答のためのツールをインストールします。

wget http://www.inter7.com/devel/autorespond-2.0.5.tar.gz
tar xzvf autorespond-2.0.5.tar.gz
cd autorespond-2.0.5
make 
make install

日本語で応答したい場合は、 autorespond.cの265行目に

fprintf(fdm,"Content-Type: text/plain; charset=\"ISO-2022-JP\"\n" );  

です。通常は、.qmailに設定を書いておけばいいのですが、vpopmailを使用している場合は、

/home/vpopmail/domains/test.com/.qmail-hoge

というファイルを作成し、

| autorespond 1 10 hoge/autorespond.msg hoge/autorespond_log

といった行を追加しておきます。autorespond.msgはメッセージの中身です。autorespond_logはディレクトリです。実はこのファイルに|以下に実行ファイルを書いておけばそのファイルが実行されるのです。1は受付時間(単位:秒)で10は指定された時間以内に受け付けるメールの最大数です。

リンク

http://www-komo.ise.eng.osaka-u.ac.jp/~kaneta/unix/misc.html
http://www.system-act.com/mail/autorespond.html
http://www.atmarkit.co.jp/flinux/rensai/qmail07/qmail07b.html~

qmailadmin

WEB上からユーザアカウントが作成できるツールです。http://www.inter7.com/index.php?page=qmailadminからqmailadmin-1.2.0.tar.gzをダウンロードしましした。また必要なソフトもダウンロードしました。

autorespond -> http://www.inter7.com/index.php?page=developmentからautorespond-2.0.5.tar.gz
ezmlm or ezmlm-idx -> http://www.inter7.com/index.php?page=softwareからezmlm-0.53-idx-0.41.tar.gz

ではインストールです。

tar zxvf autorespond-2.0.5.tar.gz
cd autorespond-2.0.5
make 
make install

これで/usr/binにautorespondがあるはずです。そのまま実行すると、

autorespond: usage: time num message dir [ flag arsender]

と表示されます。

time:メッセージ(数秒の)を考慮する時間
num:時間セカンドの中で許すメッセージの最大値
message:送るメッセージのファイル名
dir:ログを作成するディレクトリ
flag(送信されてきたメッセージの扱い方)
 0:なにもしない。
 1:応答メッセージに添付(デフォルト指定)
arsender(応答メッセージ中の差出人)
 +:Fromを空にする
 $:送られてきたメッセージ中の「To:」を使用

次にezmlmです。

tar xzvf ezmlm-0.53-idx-0.41.tar.gz
cd ezmlm-0.53-idx-0.41
make
make man
cp -f ezmlmrc.jp ezmlmrc
make setup

これで/usr/local/bin/ezmlmにインストールされました。ではqmailadminです。

tar xzvf qmailadmin-1.2.0.tar.gz
./configure \
--enable-htmldir=/webroot/qmailadmin/html \
--enable-imagedir=/webroot/qmailadmin/html/images \
--enable-imageurl=/qmailadmin/html/images \
--with-htmllibdir=/usr/local/share \
--enable-cgibindir=/webroot/qmailadmin/cgi-bin \
--enable-cgipath=/qmailadmin/cgi-bin/qmailadmin \
--enable-autoresponder-bin=/usr/bin \
--enable-ezmlmdir=/usr/local/bin/ezmlm/ \
--enable-ezmlm-mysql=n
make
make install

ここで

--enable-modify-spam \
--enable-spam-command="|/var/qmail/bin/preline /usr/local/bin/maildrop /home/vpopmail/etc/mailfilter"

を追加し、mailfilterを以下の内容で作成しておけば、spamassassinが振り分けしてくれるようなのですが、検証はしてません。

SHELL="/bin/sh"
import EXT
import HOST
VPOP="| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox"
VHOME=`/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`
logfile "mailfilter.log"
if ( $VHOME eq "" )
{
  log "========"
  log "ERROR: VHOME isn't set!"
  to "$VPOP"
}
else
{
  if ( $SIZE < 262144 )
  {
     exception {
        xfilter "/usr/bin/spamc -f -u $EXT@$HOST"
     }
  }
  if (/^X-Spam-Flag: *YES/)
  {
     exception {
        include $VHOME/Maildir/.mailfilter
     }
     `test -d $VHOME/Maildir/.Spam`
     if( $RETURNCODE == 1)
     {
        `/usr/local/bin/maildirmake -f Spam $VHOME/Maildir`
     }
     exception {
        to "$VHOME/Maildir/.Spam/"
     }
  }
  exception {
     include $VHOME/Maildir/.mailfilter
  }
  # default delivery
  exception {
     to "$VHOME/Maildir/"
  }
}

spamassasinで

ではqmailadmin/cgi-binの.htaccessに

SetHandler cgi-script
Options +ExecCGI

として、http://hoge.com/qmailadmin/cgi-bin/qmailadminにアクセスしてみます。

リンク

http://qmailsolutions.com/webifs/qmailadmin.html#autorespond
http://www.atmarkit.co.jp/flinux/rensai/qmail07/qmail07b.html

Outbound Port25 Blocking

ISPの送信用メールサーバを利用しないメール送信を制限するものだそうです。こちらにわかりやすく書いてあります。http://bb.watch.impress.co.jp/cda/bbword/8764.html
とりあえず、qmail-smtpd-authを使って、submission port(587)に対応させていてる。あとは DomainKeys?の設定だ。SenderIDってのもある。 ネットワークセキュリティ Expert 2 Software Designの第3特集に概要があります。またオープンソースマガジン20062号にSPF,SenderID,DKIMの記事があります。 とりあえずの場合は、

iptables -A PREROUTING -p tcp -m tcp --dport 587 -j REDIRECT --to-ports 25

で587を25に転送しておいてもいいのですが、当然smtp authではありません。

SPF

DNSのTXTに

hoge.com.       IN TXT  "v=spf1 +ip4:1.2.3.4 ~all"

設定したら、check-auth@verifier.port25.comにメールを送って確認。passと返ってくればOK

Sender ID:送信者側の設定作業
Sender ID:受信者側の設定作業

spfのパッチを適用している場合は、

echo 1 > /var/qmail/control/spfbehavior
# 0: Never do SPF lookups, don t create Received-SPF headers
# 1: Only create Received-SPF headers, never block
# 2: Use temporary errors when you have DNS lookup problems
# 3: Reject mails when SPF resolves to fail (deny)
# 4: Reject mails when SPF resolves to softfail
# 5: Reject mails when SPF resolves to neutral
# 6: Reject mails when SPF does not resolve to pass

これは未調査

http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/
http://www.atmarkit.co.jp/fsecurity/special/82senderid/sender103.html
http://blog.livedoor.jp/dankogai/archives/50809900.html

TIPS

sendmailの入れ替え

mv /usr/sbin/sendmail /usr/sbin/sendmail.org
mv /usr/lib/sendmail /usr/lib/sendmail.org
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

メール受信後にコマンドを実行したい(dot-qmail)

.qmail-hogeファイルを作り、

| /hoge.sh 

届いたメールの料理の仕方 (1) ~qmail編~
届いたメールの料理の仕方 (2) ~qmail編~

Sorry, I couldn't find any host test.com. (#5.1.2)

ホストがみつからなかったときのメッセージです。またDNSのMXを確認してください。

ローカルのユーザに送れない。

localsにlocalhostだけが記述されており、自ホストの記述がない場合にでました。 Sorry._Although_I’m_listed_as_a_best_preference_MX_or_A_for_that_hostが出力されていたので調べたらこれが原因でした。

キューの状態を表示する。

/var/qmail/bin/qmail-qstat

たまっているメッセージキューのヘッダ情報を表示する

/var/qmail/bin/qmail-qread

キューにとどまる期間を指定したい

/var/qmail/control/にqueuelifetimeというファイルを作成して、その中に秒を指定すればいいそうです。 デフォルトでは60万4800秒(1週間)みたいです。 http://www.atmarkit.co.jp/flinux/rensai/qmail14/qmail14b.htmlを参照させていただきました。

受信メールサイズの制限

/var/qmail/control/にdatabytesというファイルを作成して、その中にサイズを指定すればいいそうです。

echo "31457280" > /var/qmail/control/databytes

で30Mbyte(30*1024*1024)に制限
参考:http://www.atmarkit.co.jp/flinux/rensai/qmail03/qmail03a.html

配送試行間隔について

メールサーバーってどういう感じで再試行をしているのかなを参考にさせていただきました。

メール転送

vpopmailの場合ですが、/home/vpopmail/domains/test.com/hogeというようにtest.comにhogeとユーザが作られているとします。この場合、

/home/vpopmail/domains/test.com/.qmail-hoge

といったファイルを作成し、

hoge2@tensou.com
/home/vpopmail/domain/test.com/hoge/Maildir/

とします。1行目が転送したいメールアドレス、2行目は元に残しておきたい場合に記述しておきます。

1ユーザで容量に制限をかけたい

http://www.pgregg.com/projects/qmail/mailquotacheck/にmailquotacheck.shというシェルスクリプトがあります。これを.qmail-hogeに

|mailquotacheck
./Maildir/

と記述します。またmailquotacheckにquota=3000とか設定されていますので、これを変更しましょう。これはByteです。

docomoからきたメールに返信するとUnknown userとなる

http://www.hatena.ne.jp/1090241991

特定のアドレスを拒否したい

/var/qmail/control/badmailfromに

spam@spam.com
@spam.com

とか書きます。

特定の相手からメールが届かない

よく原因はわかりませんが、MTUを見直してみましょう。

ping -f -l 1424 hoge.com

Packet needs to be fragmented but DF set.

が表示されないところでまで1424を下げていき、その値で、MTUはICMPヘッダ(8バイト)とIPヘッダ(20バイト)が含まれてますので、

ifconfig eth0 mtu 1452

セットします。

ダブルクォートがメールアドレスに付加される。

@の前にドットが有る場合、そのアドレスにダブルクォートが付加されるので、注意する。 http://sonic64.com/cat_qmail.html

clamdscan: corrupt or unknown clamd scanner error or memory/resource/perms problem - exit status 512/2

メールが送れないので、/var/log/maillogを参照すると、このようなエラーがでてました。こりゃ困ったと思いながら、 clamdを再起動しても、どうも動いていないようです。/var/log/messageを見ると

Apr  1 10:00:00 hoge clamd[7063]: Socket file /tmp/clamd exists. Either remove it, or configure a different one.
Apr  1 10:00:00 hoge clamd: clamd停止 failed

どうも、うまくclamが終了してなくて、/tmp/clamdファイルが残っていたようです。消して再起動すると、うまくいきました。

メールアドレスで使用できない文字

メールアドレスで使用できない文字の種類がわかるサイトを教えてください。

グリーティング・メッセージを変更したい

/var/qmail/control/smtpgreetingファイルを作成して、

ホスト名 メッセージ

とします。ですので、

host message

みたいにしておきます。
http://www.atmarkit.co.jp/flinux/rensai/qmail14/qmail14b.html

vpopmailでバウンスメールを出さない。(大量宛先不明エラーメール対策)

/home/vpopmail/domains/バーチャルドメイン名/.qmail-default

を開くとデフォルトでは、

/home/vpopmail/bin/vdelivermail ’’bounce-no-mailbox 

となっていますが、

/home/vpopmail/bin/vdelivermail ’’delete

にするか

/home/vpopmail/bin/vdelivermail ’’hoge@hoho.com

とかにして宛先を変更します。
vpopmailでのバウンスメールSPAM撃退

Sorry. Although I'm listed as a best-preference MX or A for that host,it isn't in my control/locals file, so I don't treat it as local. (#5.4.6)

はじめはDNS間違えたかな~とか思っていましたが、実は、バーチャルドメインにしてたのに、virtualdomainsを作ってなかったんですね。セカンダリにしてsmtproutesを作っていたりもしたんです。他のことが原因で出ることもありますが、ちょっと焦りました。

content rejected (in reply to end of DATA command)

んー エラーが帰ってきたんですが、eo.k-opti.ad.jpが特に多い。 http://miniminiadmin.jugem.jp/?day=20070523

quoted-printable

メーラを作っていたのですが、

=1B$B$

とかで本文が化けているやつがあり、なんじゃこりゃと思いながらヘッダーを調べていると、

Content-Transfer-Encoding: quoted-printable

となってました。 参考: [文字化けすると、こう見える!
http://yougo.ascii24.com/gh/32/003224.html

なんやねん。Winmail.datって

添付ファイル送ったけど、添付されないことがあるって聞いて調べていたら、送信者はOutlook 2007で、受信者はOutlookExpress?。 マイクロのメーラなんてつかわんでほしいなー
Outlook 2007 でメールを送信すると、受信者側に Winmail.dat というファイルが添付される

MEMO

smtproutes file

http://www.dbmail.org/

リンク

qmail * djbdns by D. J. Bernstein
実用qmailサーバ運用・管理術
SPAMメール徹底対策
ログメッセージ FAQ(qmail-1.03)
qmailsolutions.com
qmail+vpopmailメモ
http://www.qmail.jp/qmail.html
http://www.dpri.kyoto-u.ac.jp/~dptech/qm_memo/qm_memo.html
http://www.ryouto.jp/linux/linux_15.html#POS011
FAQ目次-Vpopmail
pukiwiki自宅サーバ構築メモ
http://www.ghost.jp/memo/freebsd/qmail.html
http://atmarkit-www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2364&forum=10&11
http://www.omake-world.com/~fsting/inst_memo/vpopmail.html
http://tenjin.coara.or.jp/~yano/computer/linux/qmail.html
http://www.fkimura.com/mailman0.html
http://mm.tkikuchi.net/pipermail/mmjp-users/2004-March/000779.html
メールアドレスによって自動応答の内容を変える
Stray Penguin 非常に丁寧な解説があります。
qmailに届いたメールを、PHPをつかってMySQLに格納したいと思っています。
メールヘッダーについての理解
telnetでのメール受信方法 POP3コマンド一覧
消えない queue の消し方
qmail にて SMTP 認証を行ってみる
qmailの設定方法
管理の小技集 メールフィルタの作り方等わかりやすく載ってます。
Linux Page (Server) セカンダリメールサーバー構築や、 SpamAssassin? で spam メールの排除が紹介していただいてます。
qmailメモ 大変丁寧な解説で参考にさせていただいております。
自作ソフトウエア qmail 用 .password を用いた smtp-auth/apop 対応パッチ仮想ユーザ対応版を公開されておられます。
http://www.wikiroom.com/qmail
qmailの設定方法 smtp-auth等丁寧な解説があります。
qmailでIPv6+TLS+SMTP-AUTH+POP3S+IMAPS 非常に参考になります。
qmail-1.03 制御ファイル qmailの制御ファイルの解説があります。 http://www.takemaru.com/microserver/
http://linux.fken.ise.osaka-sandai.ac.jp/lu094/94694
http://www.atmarkit.co.jp/fnetwork/rensai/netpro04/netpro01.html
sendmail を捨て,qmail に乗り換える
第6章 スーパー&セキュアなMailサーバー構築(qmail編)
丁寧で見やすいサイトです。
目指せ!メールの達人!
逆引きできないホストからのメールを遮断(qmail編)
第8章 SMTP-AUTH/STARTTLS & POP3 over SSL編
丁寧な説明があります。

参考書籍

コメント

  • #comment

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-06-16 (火) 02:15:00 (5448d)