ページへ戻る

− Links

 印刷 

XMail Server の SPF(Sender Policy Framework) 対応 のソース :: XOOPS マニア

UsersWiki:nao-pon/blog/2008-04-09のソース

« Prev[3]  
#navi

#boxdate
** XMail Server の SPF(Sender Policy Framework) 対応 [#gb5fff4d]
RIGHT:&tag(自宅サーバー,SPF,メールサーバー,プログラミング);

xpWiki のプラグイン moblog では、メールによってページを作成することができますが、認証判断は送信元メールアドレスのみで行っています。

できるだけ簡単に投稿できるようにしたかったので、敢えて Subject や本文にパスワードを入れたりする仕様にしなかったのですが、他人の成りすましによる偽投稿が可能なので、なんとか防がなければいけません。

その、動作検証するのに SPF 環境が必要なので、自宅サーバーの XMail Server (Win32) に SPF フィルターを導入しました。

調べてみると、XMail の Web サイトに、xm-spf.pl という perl のフィルターがありましたので、導入してみましたが上手く動きません。早速、ソースを眺めてみましたが、久々の perl なので、結構手間取りましたが、数箇所おかしなところがあったので、修正し、Mail Header に "Received-SPF:" を付け加えるフィルターも書いてみました。

Mail::SPF::Query のレスポンスが "fail" だった場合、XMail に終了コード(4)を返しますので、問答無用で受け取り拒否します。 

** Mail::SPF::Query が必要です [#pb34a3f6]

サーバー機のコマンドプロンプトで

 >cpan
 >install Mail::SPF::Query

として、インストールして置いてください。

** フィルター定義 [#y0e6d6f9]

- SMTP RCPT 後処理 フィルター (Mail::SPF::Query を使用して判定します)
-- &ref(spf_rcpt.pl);
-- フィルター定義
|起動コマンド                |最初の引数            |その他の引数                      |h
|C:\Perl\bin\perl.exe        |[絶対パス]/spf_rcpt.pl|--file $(FILE) --tmp c:/winnt/temp|
|C:\Perl\bin は環境に合わせる|                      |--tmp の引数は、システムのテンポラリディレクトリ|
- SMTPセッション終了後処理 (Mail Header に "Received-SPF: [判定結果]" を書き加えます。)
-- &ref(spf_in.pl);
-- フィルター定義
|送信者アドレス|あて先アドレス|リモートIP|ローカルIP|起動ファイル|起動コマンドと引数|h
|*             |*             |0.0.0.0/0 |0.0.0.0/0 |spf_in.tab  |"C:\Perl\bin\perl.exe" "[絶対パス]/spf_in.pl" "$(FILE)" "c:/winnt/temp"|
|              |              |          |          |            |C:\Perl\bin は環境に合わせる&br;c:/winnt/temp は SMTP RCPT 後処理 フィルターと合わせる|
-- SpamAssassin を利用しているなら、spf_in.tab を SpamAssassin の定義の前に持ってくると、SpamAssassin で Header 判定できるようになります。

*** プログラムソース [#m9d3a0dd]

#code(spf_rcpt.pl)

#code(spf_in.pl)

#navi

« Prev[3]