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 のエラーメールを返す設定になる).