蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

sendmailでUser unknownを返さないようにする

d:id:xnissy:20070213#1171379988でBackscatterがspamメールとして判定され,うちのメールサーバがspamメールのblacklistに登録されてしまった話を書いたが,これはその続きである.

根本的な対策は relay MTA で行うべきだと思うのだが,まずは mailbox 側でできることをやってみた.それは mailbox で User unknown なメールを baunce せずに破棄してしまう方法だ.(spamだけでなく,まともなメールのエラーも返さなくなるという副作用は覚悟の上で……)

そのためには,mc ファイルに以下を記述する.

dnl # The following will route all mis-addressed mail to xxxxbad
dnl # account and NOT return a user unknown msg.
define(`LUSER_RELAY',`local:xxxxbad')

これによって,ユーザが存在しない場合にはエラーを返さず,xxxxbad というアカウントでメールを受け取ることになる.

xxxxbad というアカウントを作っておくことをお忘れなく.(アカウント名は好きなものに変えてください)

そして sendmail.cf を作成して,sendmail を再起動すれば設定が有効になる.

あとはこのメールボックスにどんどん User unknown なメールが貯まっていくので,定期的に消去すればよいだろう.あるいはいきなり /dev/null に突っ込むのもアリかもしれない.

例外的に User unknown を返したいアドレスがある場合には,/etc/mail/access

foo@example.com     ERROR:550 User unknown

とでも書いて,makemap hash access < access すればよいだろう.

なお,Postfixについては苦笑いのSE User Unknown ~BackScatter対策などを参照.

Mac OS X Server 10.4の場合はhttp://docs.info.apple.com/article.html?path=ServerAdmin/10.4/jp/c2ms26.htmlを参照,と言いたいところだがこれは内容が不十分なようだ.上のPostfixについての場合と同様,

local_recipient_maps = 

という指定が必要である.また,この指定を行うとサーバ管理のメールの設定の「一般」タブを開いたときに,「配信できない受信メールをコピーする」にチェックが入るが,ここを触ってはいけない.チェックを入れ直したりするとmain.cfが書き換えられ,転送ではなくコピーになってしまう(=User unknown のエラーメールを返す設定になる).