Tag Archives: dovecot

procmailかませるとmbox形式になってしまう

 レンタルサーバの移行作業してます。

 ちょっと躓いた事があったのでメモ。

 postfix + dovecotという構成で、久しぶりにメールサーバを新規構築。
 procmail使うので、.forwardでprocmail咬ませた途端にメールが到着しなくなった。

 maillog見てみると、何故か/var/mail/にmbox形式のファイルを作ろうとしている。

1
2
can't create user output file.
Command output: procmail: Couldn'
t create "/var/mail/xxx"

 postfix的には、Maildir形式で、保存先は~/Maildirになっているのに。

 .forwardを無効にすると、~/Maildirに到着する事から、procmailを通過した後、mbox形式で保存しようとしているようだ。

 色々と検索してみる。

「困ってます。メールが届きません。Couldn’t create…」

同じ症状かもしれない人がいた。
途中、親切な人が「procmailにSetUIDしてみて」と教えていて、

「試したらエラーにならなくなったけど、メーラで受信しても受信しない。.forwardで携帯に転送するのは成功しているのに」

とある。
ああ、これは、メーラでの受信は~/Maildirを参照しているのに対し、実際のメールは/var/mailにmbox形式で保存されているからだ。同じ症状だね。

 そのスレッドの結末は、.procmailrcにMAILDIRとDEFAULTを定義する事で解決していた。

 移行元のサーバでは、/etc/procmailrcにMAILDIRとDEFAULTが定義されていた。
 移行先のサーバでは、/etc/procmailrcそのものがない(yum installで作られなかったのかな?)。

/etc/procmailrcを生成し、以下を記述して解決。

1
2
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR

Kyle D. Dent/菅野 良二
オライリージャパン (2004/08)

未読メール2万3千通をなんとかする『spamassassin』

 放っておいたらメールボックスに未読メールが2万3千通入ってた。
 現状1日に500~700通ほどのspamを受信している。10年程度使用しているアドレスだけど、これは少ない方かもしれない。
 メールの利用度が昔ほど高くないので、何の対策もせず、たまーにクライアントでフィルタリングして必要なメールだけ読んでいるのでそれほど不自由していないが、spamassassinを試してみることにする。
 spamassassinとprocmailを用い、spamと判断したメールはis_spamフォルダに振り分けることとした。なお、メールの環境はIMAPを利用していて(dovecot)、メールが保存されるディレクトリはユーザフォルダに存在する。
 備忘録としてクイックセッティングを記す。もちろんprocmailとspammassassinはインストール済みである。
 procmailのレシピ。
 X-Spamヘッダのないメールをspammassassinに渡し、spamと判断されstatusがYesとなったメールをis_spamフォルダへ振り分けるレシピである。
~/.procmailrc

:0fw
*!^X-Spam.*
|/usr/bin/spamc

:0:
* ^X-Spam-Status: Yes
/home/piyo/Maildir/.is_spam/

 .forwardファイルは以下。”piyo”の部分はアカウントである。
~/.forward

“|IFS=’ ‘ && exec /usr/bin/procmail -f- || exit 75 #piyo”

 spamassassinのログを別途吐き出すよう設定。
/etc/sysconfig/spamassassin

#vi /etc/sysconfig/spamassassin

SPAMDOPTIONS=”-d -c -m5 -H”
上記を以下に変更
SPAMDOPTIONS=”-d -c -m5 -H -s /var/log/spamd.log”

 spamassassinの自動起動設定。

# chkconfig spamassassin on

 local.cfの編集。

# vi /etc/mail/spamassassin/local.cf
以下を追加
allow_user_rules 1 

 ユーザ定義ファイルuser_prefsの取得と編集(日本語メール対応版)

$ cd ~/.spamassassin/
$ wget http://tlec.linux.or.jp/docs/user_prefs
$ vi user_prefs
以下追加
report_safe 0 # spamを添付メールとしない

# 他ユーザと共有する学習ファイルのセッティング
bayes_path /etc/mail/spamassassin/bayes/bayes
bayes_file_mode 0666
auto_whitelist_path /etc/mail/spamassassin/bayes/auto-whitelist
auto_whitelist_file_mode 0666

# データベースの肥大化対策
bayes_expiry_max_db_size 1000000

    # データベースがこの値の75%に達するとエクスポートが必要と判断される
bayes_auto_expire 0

    # エクスポートはcronによって行うため、自動エクスポート機能を無効化しておく

 共有フォルダを作成してspamassassinを再起動

# mkdir -p /etc/mail/spamassassin/bayes
# chmod 777 /etc/mail/spamassassin/bayes
# /etc/rc.d/init.d/spamassassin restart

 データベースのエクスポート処理をcronでスケジューリング

0 5 * * * /usr/bin/sa-learn –sync –force-expire > /dev/null 2>&1

 手動による学習。ご認識されたメールを手動で学習させる方法。
 ハムなのかスパムなのかを学習させるために、メールボックス内でlearn-hamとlearn-spamというフォルダを作成。
「これはハムです」

$ sa-learn –ham ~/Maildir/.learn-ham
$ sa-learn –sync

「これはスパムです」

$ sa-learn –spam ~/Maildir/.learn-spam
$ sa-learn –sync

スパム対策(「Procmail」+「SpamAssassin」)
http://www.crimson-snow.net/hmsvr/centos/maild/procmail.html

ntpdateなんて使ってるんじゃあるまいね

 今朝起きて、メールチェックしようとしたらサーバに接続に失敗する。
 サーバのエラーログを確認したら以下の通り。

Time just moved backwards by 116 seconds. This might cause a lot of problems, so I’ll just kill myself now. http://wiki.dovecot.org/TimeMovedBackwards
(時間が116秒戻った。ヤバいからオレは死ぬぜ。dovecot)

 dovecotが死に際に残してくれたURLにアクセスすると、

大変な事になるから時間を戻してはいけないよ。もしかしてntpdateなんて使ってるんじゃあるまいね。ntpd使えよな。

なんて書いてある。図星だ。

 ウチのサーバはntpdを動かさず、cronで明け方にntpdateで時刻調整を行っている(ntpサーバにするつもりはないのでntpデーモンを動かす気がなかった)。
そして実は、昨日事情あって夕刻にサーバをリブートしていた。それで大幅な時刻誤差が生じて明け方のntpdateでdovecotが死亡ようだ。

 「再起動後の大幅な時刻誤差」には心当たりがある。ハードウェアクロックだ。
 以前のサーバではntpdateにあわせてhwclockでハードウェアクロックの調整も行っていたのだけど、今はそれを怠っていた。

 ハードウェアクロックとカーネルクロックを確認してみる。

Manpage of HWCLOCK

# hwclock –show;date
Wed Feb 13 07:19:07 2008  -0.692619 seconds
Wed Feb 13 07:16:56 JST 2008

 ハードウェアクロックの方が2分ほど進んでいる。つまりこれが116秒の時差。
 とりあえず、ハードウェアクロックをカーネルクロックに合わせておく。

# hwclock –systohc

 次に、ntpdateで行っていた時刻調整をntpdで行うようにする。
 以下のコンテンツを参考にさせて頂いたところ、-qオプションが便利なようだ。このオプションは時刻調整が済み次第ntpdを終了するというもの。つまりこれは、ntpdをデーモンとして動かさずに利用できる事になる。知らなかった。

Stray Penguin – Linux Memo (ntpd)

 一応記載しておくと、ntpdateとntpdの実質的な違いは、前者は強制的に時刻調整するのに対し、後者は1秒の長さを実際よりも長くしたり短くしたりして正確な時刻に近づけていくという点。

 cronの設定を変更し、-qオプションによりntpdで時刻調整の後、hwclockでカーネルクロックとハードウェアクロックの時刻を同期させるよう変更した。これでOK。