読者です 読者をやめる 読者になる 読者になる

ppolicyがよく分からない

Python Twisted Postfix

Twistedを使って書かれたPostfixSMTPポリシー・サーバppolicyを試してみた。

Python Postfix Policy Server
http://bimbo.fjfi.cvut.cz/ppolicy/


SPFポリシーの検証に使いたかったのだが、結論から書くと、正しく動いているのかよく分からない。SPF関連のパッチをあてたPostfixやqmail、あるいはPostfix+Mail::SPF::Queryの組み合わせ等でメールを受信すると、メールのヘッダーに、

Received-SPF: spf-pass

のように、Received-SPFヘッダーが付与される。こうした動作を期待していたのだが、ppolicyでは同様の動作をしなかった。設定の問題なのだろうか?????


ちゃんと動いたならば詳しく書くつもりだったけれども、ちょっと怪しいので、メモ程度にしておく。

インストール

READMEに書いてあるように、以下のモジュールが必要。

yumで入れていってもいいが、今回は個別にダウンロード/インストールした。試した環境は、Cent OS 5/Python2.5.1。

python-twisted

Zope-Interface

$ sudo easy_install http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz

Twisted-2.5.0

$ sudo easy_install http://tmrc.mit.edu/mirror/twisted/Twisted/2.5/Twisted-2.5.0.tar.bz2
dnspython
$ sudo easy_install dsnpython
python-ldap
$ wget  "http://downloads.sourceforge.net/python-ldap/python-ldap-2.3.1.tar.gz?modtime=1185324615&big_mirror=0"
$ sudo easy_install python-ldap-2.3.1.tar.gz
python-GeoIP
$ wget http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.4.tar.gz
$ tar xzf GeoIP-1.4.4.tar.gz
$ cd GeoIP-1.4.4
$ ./configure
$ sudo make install
$ sudo easy_install http://www.maxmind.com/download/geoip/api/python/GeoIP-Python-1.2.1.tar.gz
ppolicy

安定版ではなく、SVN版をチェックアウトして使ってみた。

$ svn co https://bimbo.fjfi.cvut.cz/repos/ppolicy/trunk ppolicy
$ cd ppolicy
$ twistd -ny ppolicy

実際には起動前に、MySQLにデータベース・ユーザを設定することが必要。

mysql> create database ppolicy;
mysql> grant all on ppolicy.* to ppolicy@localhost identified by 'secret';

MySQLのデータベース名・アカウント・パスワードに関しては、適宜ppolicy.conf(標準のインストール場所は/etc/postfix/ppolicy.conf)を書き換える。
準備が整ったら、ppolicyサーバを起動。

$ twistd -ny ppolicy.tac

/etc/postfix/main.cfを書き換えて、ポリシーのチェックにこのサーバを使うようにする。

smtpd_recipient_restrictions =
  # 略
  reject_unauth_destination
  check_policy_service inet:127.0.0.1:10030

感想

ざっと確認してみた限り、SPFの実装はおかしくない気がする。おそらく、SPFの実装はここで公開されているPySPFから借用しているはずであるが、(Change Logを見る限り)PySPFよりも、このppolicyの方がメンテナンスされているように見える。

ただ、SPF以外にもいろいろチェックしている項目が多くてかえって使いにくい。(設定ファイルでオフにできるんだろうけど。)

DNSのtxtレコードを引く時にブロックされたくないなぁ」と思ってTwisted関連でモジュールを探していたけれど、このppolicyもTwistedを使っているとはいえ、SPFのところはPySPFに依存しているのでブロックされるみたい?(自信なし。)そうだとすると、あまりppolicyを使うメリットがないなぁ。