greylistingforpostfix
迷惑メールは迷惑だ
OS X Serverには SpamAssassin が最初からインストールされており、学習データも 自動ダウンロードできるようだったので、迷惑メール対策に時間を取られることは ないだろう、と思っていたけれど、実際に運用をはじめてみると、 「メールが届かなくなった」というクレームが多く寄せられた。 仕方がないので、「スコア」を上げたら、今度は大量の迷惑メールが届くようになってしまった。
その他にも、メールサーバーの変更に伴って、「メールがどこか変だ」という声が聞かれるようになって、「別に放っておけばいいさ」という思いもある反面で、ちょっとした意地みたいなものもあって、結局、「本来ならばやらなくてもよかった」仕事を抱えこんでしまう結果になる。
メールやネットワークは、ちゃんと動いて当り前で、仕事やその他の何もかも、それに大きく依存しているくせに、それがどのような仕掛けになっていて、それを維持するのにどれくらいの手間が必要なのか、については、誰もほとんど気にしない。ネットがまだもの珍しかったころは、一部の(優秀な)物好き達が「ボランタリー」に管理をしていたし、そんな彼らに対して周囲はある種の敬意を払っていたけれど、そんなハッピーな時期は長くは続かない。「本来」の仕事をこなしながら、ネットの管理も趣味的に行っていけるほど、大学のゆとりは無くなってしまったし。
でもまあ、この歳になっても、計算機いじりはまだ嫌いではないし、「Mac OS X Serverの標準機能のみで手抜き管理」を決め込もうという当初のポリシーは捨てて、あちこちのサイトでも紹介されている postgrey をマニュアルインストールしてみることにした。
Postgreyを入れる
1. NetInfoマネージャーを開いて、postgreyというユーザーとグループを作成。uid, gidともに125にした。
2 http://postgrey.schweikert.ch/pub/ から postgrey 1.27 をダウンロードして展開。whitelistデータを /etc/postfix の中にコピー。postgrey (perlスクリプト)は /usr/local/sbin の中に入れた。さらに、ディレクトリ /var/spool/postfix/postgreyを作成し、オーナーとグループをpostgreyにしておく。
3 CPANを使って、perl に IO::Multiplex を追加インストール。Net::ServerとBerkeieyDBはOSに最初から入っているので、入れる必要なし(実はこの件でトラブルに遭遇→メールサーバーの設定)。
4 http://lingon.sourceforge.net/ を使って、User Daemonとして
/usr/local/sbin/postgrey --inet=10023 -d --user=postgrey --group=postgrey
を起動するように設定。plistを手で書かなくてもよいのでとても便利。Programの欄に"/usr/local/sbin/postgrey"を書いてはダメで、全てを引数の欄に記述する。
そうすると、/Library/LaunchDaemonsの中にplistファイルが追加されて、その中身は以下のよう:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>cmpt.postgrey</string> <key>ProgramArguments</key> <array> <string>/usr/local/sbin/postgrey</string> <string>--inet=10023</string> <string>-d</string> <string>--user=postgrey</string> <string>--group=postgrey</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceDescription</key> <string>Greylisging daemon for Postfix</string> </dict> </plist>
5. /etc/postfix/main.cf に
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination,check_policy_service inet:127.0.0.1:10023
を追加。
sudo postfix reload
MacPortsに入っている perl と db を使おうと思ったが、そちらではうまく動かなかった。
Keyword(s):
References: