opendkim lua programming

opendkimのluaによるプログラミングについて備忘ログを残す。

luaプログラミング?

DKIM署名(検証)時の処理にluaで記述された処理をフックできる。

フックできる箇所は4箇所
http://www.opendkim.org/opendkim-lua.3.html

  • setup opendkimの本処理が始まる前
  • screen 検証コンテキストが始動した直後(直訳)
  • statistics 全DKIM処理が終了したが、最終的なメッセージハンドリングがおおなわれる前
  • final 全部終わった後

フックの方法
http://manpages.ubuntu.com/manpages/lucid/man5/opendkim.conf.5.html

  • FinalPolicyScript (string)
  • ScreenPolicyScript (string)
  • SetupPolicyScript (string)
  • Statisticsは無い??

目的

postfixがAUTH LOGINで受け付けたユーザのIDをopendkimで利用できるか」ということを調べる。

以下のようにmta macroを利用するとpostfixの持っている情報の一部を利用できると説明されている。
http://www.postfix.org/MILTER_README.html

設定

setupにフックしたい場合は以下のようにする。

# /etc/opendkim.conf
SetupPolicyScript /home/user/lua/test.lua

SMTP認証で認証済みのユーザ名を取得するためにauth_authenマクロを利用する。
auth_authenをログに出力してみる。

-- /home/user/lua/test.lua
local author = odkim.get_mtasymbol(ctx, "{auth_authen}")
odkim.log(ctx, "name " .. author )


Telnetで上記のスクリプトが動くか試してみる。

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ochimina ESMTP Postfix (Ubuntu)
AUTH LOGIN
334 VXNlcm5hbWU6   
YXV0aGVu                   ☆ユーザのIDはauthen
334 ************
************
235 2.7.0 Authentication successful
MAIL FROM: ******@********
250 2.1.0 Ok
RCPT TO: ******@********
250 2.1.5 Ok
DATA 
354 End data with <CR><LF>.<CR><LF>
TITLE: test
FROM: test
data

postfixのログ(/var/log/syslog)を確認する。

# /var/log/syslog
Sep 14 03:32:23 ochimina opendkim[23645]: name authen@localhost

authen@localhostがユーザ名として出力されていることがわかる。
以上で動作確認完了。

luaプログラミングは簡単そうだ。