qmail + qmail-scanner + spamassassin + clamav

qmailを利用したメールゲートウェイをテスト構築した時のメモ。
その内、ちゃんとした記事を書きますが、今回ハマったqmail-scannerの設定を書いときます。
spamassassinとclamavの導入、設定は他の構築サイトを参照してください。
[事象]
qmail-scannerのインストール時に、–notify recips と指定しているのに、受信先にメール通知が届かない。
[対応策]
今回の場合、外部SMTPサーバに上記設定をしました。
ドメインのMXレコードは外部SMTPサーバに向いていますが、外部SMTPでメールは受け取らずに、smtproutesで内部のSMTPサーバにリレーさせています。
外部SMTPではドメイン宛のメールは受け取らない(リレーするだけ) = /var/control/localsの中身もlocalhostのままでした。
qmail-scannerは、デフォルトで自身のドメイン宛のユーザーを処理するので–notify recips としても、元のメールの宛先@localhost宛てのメールとなり、内部SMTPサーバのユーザーに届かない。と言った事でした。
これを解決するには./configure時に、–local-domains 処理するドメイン名を指定する。
ちなみに、qmail-scannerの標準では「2byte文字(全角)」が含まれるメールを、通知メールとして処理すると文字化けしてしまうので、email_senderとemail_recipsにnkfを挟んでJISに変換する必要がある。
vi /var/qmail/bin/qmail-scanner-queue.pl
変更前
sub email_sender {
#Don’t e-mail bounced mail messages/etc!
return if (&is_unreplyable_email(‘sender’));
my($addr_type)=@_;
my ($HDR,$hdr,$tmpsndrs,$tmpsubj,$polstring)=”;
my ($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
$polstring=’policy’ if (&notify_addr(‘nmlvadm’));
open(SM,”|$qmailinject -h -f ””)||~~
sub email_recips {
my($recip)=@_;
return if ($recip eq “”);
#Don’t notify precips if this is NOT a “Policy block”
if (&notify_addr(‘precips’)) {
return if ($quarantine_event !~ /^(policy|perlscan)/i);
} else {
#From now on precips is the same as recips
$NOTIFY_ADDRS=~s/precips/recips/;
}
return if (!&notify_addr(‘recips’));
my($HDR,$hdr,$tmprecips,$tmpsubj)=”;
my($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
open(SM,”|/usr/bin/nkf -j|$qmailinject -h -f ””)||~~
変更後
sub email_sender {
#Don’t e-mail bounced mail messages/etc!
return if (&is_unreplyable_email(‘sender’));
my($addr_type)=@_;
my ($HDR,$hdr,$tmpsndrs,$tmpsubj,$polstring)=”;
my ($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
$polstring=’policy’ if (&notify_addr(‘nmlvadm’));
open(SM,”|/usr/bin/nkf -j|$qmailinject -h -f ””)||~~   ←「|/usr/bin/nkf -j」を追加
sub email_recips {
my($recip)=@_;
return if ($recip eq “”);
#Don’t notify precips if this is NOT a “Policy block”
if (&notify_addr(‘precips’)) {
return if ($quarantine_event !~ /^(policy|perlscan)/i);
} else {
#From now on precips is the same as recips
$NOTIFY_ADDRS=~s/precips/recips/;
}
return if (!&notify_addr(‘recips’));
my($HDR,$hdr,$tmprecips,$tmpsubj)=”;
my($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
open(SM,”|/usr/bin/nkf -j|$qmailinject -h -f ””)||~~   ←「|/usr/bin/nkf -j」を追加
2008/11/21 追記
qmail-scannerのconfigureのオプションを忘れたので、メモ”c⌒っo,,゚Д゚ )φ”
./configure –install –scanners clamdscan,verbose_spamassassin –local-do
mains 処理するドメイン –notify recips

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です