タグ別アーカイブ: mail

eximで”temporarily rejected RCPT”というエラーに遭遇

メール送信、受信のSMTPサーバ、eximをテストしているときにエラーに遭遇した。


2013-05-08 00:36:05 H=mail.example.net [192.0.2.1] F=<[email protected]> temporarily rejected RCPT <[email protected]>: LDAP search: no results

どうやらメールを一時的に拒否している、というメッセージのようだ。
courier-mtaの時もそうだったが、存在しないアドレスに一定数送信するとエラーになる模様。
courier-mtaの頃にはbanリストの表示とbanリストからの削除コマンドがあったけれど、eximには無いらしい。

代わりにサービスを再起動するとリストはクリアされた。
送信試験などをしているときにこれにハマるとやっかいなのでメモメモ。


> sudo service exim restart

FreeBSDで不自然にcronメールが届いてた

FreeBSDを使っていたら不自然にcronの実行結果のメールが届いてた。


shell> more 80056.M80664P9205V005BI007FCAB0_0.aaaa.l2tp.org,S=1649:2,S
X-Spam-Checker-Version: SpamAssassin 3.3.0 (2010-01-18) on aaaa.l2tp.org
X-Spam-Level:
X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00,
TVD_SPACE_RATIO autolearn=ham version=3.3.0
Received: from bbbb.l2tp.org ([192.168.1.1])
(TLS: TLSv1/SSLv3,256bits,AES256-SHA)
by aaaa.l2tp.org with esmtp; Mon, 27 Feb 2012 03:14:12 +0900
id 00022ABF.4F4A7674.000023EF
Received: from bbbb.l2tp.org (localhost [127.0.0.1])
by host005.l3tp.org (8.14.4/8.14.4) with ESMTP id q1QIAPnh047625
for <[email protected]>; Mon, 27 Feb 2012 03:10:25 +0900 (JST)
(envelope-from <a href="mailto:[email protected]">[email protected]</a>)
Received: (from <a href="mailto:[email protected]">[email protected]</a>)
by bbbb.l2tp.org (8.14.4/8.14.4/Submit) id q2EIA47579;
Mon, 27 Feb 2012 03:10:05 +0900 (JST)
(envelope-from yousan)
Date: Mon, 27 Feb 2012 03:10:05 +0900 (JST)
Message-Id: <[email protected]>
From: <a href="mailto:[email protected]">[email protected]</a> (Cron Daemon)
To: <a href="mailto:[email protected]">[email protected]</a>
Subject: Cron <a href="mailto:[email protected]">[email protected]</a>  /usr/local/sbin/portversion -vL= > /home/yousan/var/portversion.`hostname`
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin>
X-Cron-Env: <HOME=/home/hogetan>
X-Cron-Env: <LOGNAME=hogetan>
X-Cron-Env: <USER=hogetan>

[Updating the portsdb <format:bdb_btree> in /var/tmp ... - 23289 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.. ..... done]

メールの内容は上記。見たところcronでの実行結果がメールで来ているようだ。でもこのメールはちょっと不審な点が。

というのも宛先のToになっている [email protected]” というアドレスは存在しないアドレスだ。それなのにメールが [email protected] 宛てに届いていた。bbbb.l2tp.org はMXレコードに登録されていない。まずは下記の点いついて調べてみた。

  1. ホスト “bbbb.l2tp.org” でcrontabの環境変数、MAILTOについて
  2. ホスト “bbbb.l2tp.org” で/etc/aliasesでのエイリアス状況
  3. “l2tp.org”ドメインのMXに割り当てられているホストでのaliases

上記について、すべての点において [email protected] [email protected][email protected][email protected]しき設定は無かった。

にもかかわらず [email protected] 宛てにメールが届いてしまう。

試しにテストメールを送ってみた。


bbbb.l2tp.org> sendmail <a href="mailto:[email protected]">[email protected]</a> < mail.txt

当初は単にメールが送れないだけだったんだけど、しばらくして mailer daemon から返答が。よく見るとその戻り先はToが [email protected]” となっていたけれど、このメールも [email protected]” に届いてしまった。なんかおかしい。

.cshrcとか.zshrcとかにMAILTOが設定されてそうな気がして改めてホームディレクトリをgrepを掛けてみた、ら、答えが出た。

.forwardファイルを設定してた。


shell> ls –lat .forward; more .forward

-rw-------  1 hogetan hogetan  16 Jan 26  2008 .forward
\[email protected]

しかも結構古い。コレが原因でした。

FreeBSDからメールの配送がうまくいってなかった

1. メールがこない!

現在、いくつかのホストでは監視用にメールを飛ばすようにしてる。これってsmtpでメールサーバを立てて・・・、って訳ではなく、各ホストのsendmailがmailコマンドでメールを投げてくる、という簡単なものだ。

先日メールサーバを移行したのだけれど、このタイミングであるホストからのメールが来なくなった。送りたいメールはローカルのドメイン宛てで、送りたいプログラムはcactiのアラートメール。phpのmailコマンドを呼んでいると思われるのでシステムのmailコマンドを利用しているような気がしてる。

まずはDNSでの名前解決を当たった。というのも、移行された旧メールサーバこそがこのメールが送れなくなったホストであり、ついでにDNSの機能まで積んでいたものだから、そこのMXレコードあたりの参照が出来なくなったんだろう、っていう予測を。

でもMXレコードでローカルのドメインを引いてもちゃんと引けてる。こまったなぁ。

続きを読む FreeBSDからメールの配送がうまくいってなかった

dovecot-sieveでメールフィルタ

ローカル用メールサーバにFreeBSDでExim+dovecotを使っているんだけど、ローカルメールの振り分けにdovecot-sieveを使ってみたのでメモ。
sieve自体はrfcに登録されてるんだけど、とにかくexampleばかりで言語仕様が探しにくかった。
今回やりたかったのは、Cronからのメールをホスト毎に別のディレクトリに振り分け。

で、出来たフィルタファイル

require "fileinto";

if allof(address :is :domain "From" "yubird.com",
         header :contains "Subject" "Cron") {
  fileinto "Cron.atlas";
} elsif allof(address :is :domain "From" "atlas.yubird.com",
         header :contains "Subject" "Cron") {
  fileinto "Cron.atlas";
} elsif allof(address :is :domain "From" "lain.yubird.com",
         header :contains "Subject" "Cron") {
  fileinto "Cron.lain";
} elsif allof(address :is :domain "From" "noel.yubird.com",
         header :contains "Subject" "Cron") {
  fileinto "Cron.noel";
} elsif allof(address :is :domain "From" "tessa.yubird.com",
         header :contains "Subject" "Cron") {
  fileinto "Cron.tessa";
} elsif allof(address :is :domain "From" "tristain.yubird.com",
         header :contains "Subject" "Cron") {
  fileinto "Cron.tristain";
} elsif allof(address :is :domain "From" "zeffiris.yubird.com",
         header :contains "Subject" "Cron") {
  fileinto "Cron.zeffiris";
} else {
  keep;
}

当然だけど、必要なメールディレクトリは作っておかないといけない。

CourierでSpamAssassinを利用してスパム対策

1. やっぱり面倒スパムメール

現在、メールサーバを運用しているのだけれど、やっぱりスパムメールがいっぱいくる。来るだけで害はない、はずなんだけれど、見通しが悪くなる点とかあって、できれば自動的にスパムを省いたりしたい。

で、導入されたのがSpamAssassin。

スパムメール対策としては結構有名なものらしく、解説してくれてるページもそれなりにあってインストールもお手軽。

そして実際、すでに運用されている。

今回はメールサーバを移転するに当たって、再度SpamAssassinを入れる事になった。

続きを読む CourierでSpamAssassinを利用してスパム対策

513 Relaying denied.

1. courierでメールのリレーが拒否された問題。

courier-mta宛てにメールを送信しようとしたらエラーが帰ってきてしまった。
試験をしていてこのエラーに当たったのだけれど、その環境はちょっと複雑だったりする。

まず、メールを受信したい、coueir-mtaなホストがある。 courier.l2tp.org (192.168.1.1) ってホストだ。
このホストへテストメール送信専用のホストが別にある。 test.example.org (192.168.2.1) ってホストだ。
このとき、テストメールを送ったら以下のようなエラーが帰ってきた。

まずは戻されたメール本文に

 xxx.xxx [xxx.xxx.xxx.xxx]:
 >>> RCPT TO:
 <<< 513 Relaying denied.

/var/log/maillogにはこんなエラーが。

Jun 25 08:50:06 ml115 courieresmtpd: error,relay=xxx.xxx.xxx.xxx,from=,to=: 513 Relaying denied.

2. 単純にコレを解決することもできたり

この、 “513 Relaying denied.”がエラーとして出るのには二つの原因がある。
その問題はメールの配送の仕組みに関わってて、ちょっとややこしい。

まず一つは、送られたメールがインターネット上のどこかのメールアドレス宛で、このメールをあなたのメールサーバを踏み台にして送らせてくださいね、っていうパターン。ぶっちゃけスパムとかこの方法で踏み台にしてくる。
もう一つは正常なパターン。この送っているメールはあなた宛てのメールですよ。だからあなたに送っています、受け取ってください、というメール

まず前提の考え方として、一般的には他のメールサーバへの転送は拒否するのが普通だ。コレを無条件に許可しているとスパムの踏み台になっちゃう。
そしてそれを決めているのは smtpaccess/default のファイルで決めてたりする。
( /usr/local/etc/courier/smtpaccess/default を変更。)
参考: makesmtpaccess, makesmtpaccess-msa | courier-mta.org

このファイルに転送を許可するホストを書いておけば良い。
仮にスパムではなく、信頼されたメールサーバからのメールを転送してあげたいときにはここにアドレスを列挙すれば良い。
そして編集が終わった場合には makesmtpaccess を実行して、smtpaccessディレクトリをもとに作成される、couerierが読み込むバイナリ形式のsmtpaccess.datを更新してやる。

また後者のケース、courier.l2tp.org が受け取るべきメールだった場合にちゃんと受け取るようにさせてあげたい。
このときにいじるのは esmtppercentrelay.dir/default のファイル。ここに受け止めるべきドメインを列挙しておけば良い。
そして編集が終わったらこちらもバイナリファイルを作成しておく。バイナリを作成するコマンドは makeacceptmailfor。さっきと違って編集するファイルと実行ファイルの名前がちょっと違うので注意。
参考: makeacceptmailfor | courier-mta.org

以上二つのケースにおいては、それぞれBDB形式のバイナリを作成した場合、courierの再起動は不要。

3. まとめ

513 Relaying denied.が出ちゃった場合には、courier側でアクセス制限してはじいてる。なのでそれに風穴を開けてやる必要がある。
その方法は二つ。ひとつはIPアドレスで無条件に通してやる。もう一つはesmtppercentrelay.dirへ記述してやる。そしてどちらの場合もmakeしてやることを忘れないこと。

courierのブラックリストに入れられてしまった場合の対処

1. Courierのブラックリスト

Courierにはブラックリスト機能が備わっている。存在しないメールアドレスに何度もメールを送ったり、ループしたり、maildropの設定をミスっていたりすると、当該メールアドレスへのメールをしばらくの間ブロックしてしまうらしい。
courierでメールの配送テスト中などに、User Unknownとかでメールの配送ミスが連発してしまい、コネクションを確立して宛先を伝えた瞬間にService unavailableとか言われてしまう。コネクションを確立して宛先を、というのは、手動でsmtpをやりとりした際、RCPT TOを入れた後に拒否されてしまう。

shell> grep 456 /var/log/maillog
Oct 27 15:39:20 mailhost courieresmtpd: error,relay=192.168.1.1,from=,to=: 456 Address temporarily unavailable.

ちなみに、この”Address temporarily unavailable.”というエラーメッセージに対するエラーコード、456なんだけれど、smtp over SSLのデフォルトポート番号465と混同してしまいそう。 続きを読む courierのブラックリストに入れられてしまった場合の対処