postfix-policyd-spf-pythonでハマった話 - Ubuntu 16.04 LTS
Ubuntuのサーバー環境を作っています。最新の16.04 LTSです。
お題のSPF以外にもdovecotのメジャーバージョンが上がっていたため、設定方法がガラリと変わってて泣きそうになりました。
公開メールサーバーの設定はやっぱり時間取られます。何かあったら多方面に迷惑かかるので。
Postfixの認証周りですが、てっきりsaslauthd使うもんだと勘違いしてたんですがSASL認証する時は使う必要ないんですね。どうして動いているのか分からなくなって後追いで調べて時間取られました。
スパム対策としては、とりあえずtargreyとspf対応を行いました。amavisd-newを噛ませたspamassassinとかウィルスチェックは後々対応しようと思っています。
targreyで使うpostgreyは、公開されてるパッチの対象バージョンより新しかったため手動でマージしましたが、多分手順通りパッチ当てちゃえば問題なかったように思えます。(未検証)
postgreyのpidファイルのデフォルトパスは/var/run直下ですが、問題出るのでディレクトリ掘って対応しました。
さて、本題です。
spf対応でpostfix-policyd-spf-pythonを入れたんですがなぜか落ちる。下記を直接叩くと、インポートするモジュールが見つからずに終了してしまいます。
# /usr/bin/python /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf
apt-getで入れてるから、こういう問題は普通起きないし、以前のバージョンのUbuntuでは問題なかったと思うんだけど、と不思議に思いつつ足りないモジュールのソースをいくつか落として手動でインストールしましたが埒が明きません。さすがにおかしいので、インポート対象のモジュールを探したところ、
/usr/lib/python3/
あたりが怪しそう。が、同じ階層にpython2.7、python3.5もある。あれ・・・?
# python --version
Python 2.7.11+
あー・・・
# python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29)
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
ということは・・・
# python3
Python 3.5.1+ (default, Mar 30 2016, 22:46:26)
[GCC 5.3.1 20160330] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
と、いうことで、master.cfはこうなりました。
policyd-spf unix - n n - 0 spawn
user=nobody argv=/usr/bin/python3 /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf
そのうち/usr/bin/pythonのリンク先がpython3.5に変わる日が来るのかなぁ。