opendkim lua programming(2)
前回のエントリに引き続きopendkimにluaによるフックを仕掛ける。
前回はAUTH LOGINでログインしてきたユーザ名をluaの中で取得した。
今回はodkim.sign関数を使い、DKIMの署名をしてみる。
http://www.opendkim.org/opendkim-lua.3.html
ちなみにluaを使わなくても当然ながら、署名は可能である。
ただのテストである。(もちろんその先にはちゃんと目的がある)
前提知識
以下のように設定した場合、
example.comをメッセージボディーのFROMに指定すると署名が付与される。
/etc/opendkim.conf
KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable
/etc/opendkim/SigningTable
*@example.com default._domainkey.example.com
/etc/opendkim/KeyTable
default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private
秘密鍵を生成する
$ cd /etc/opendkim/keys/example.com $ sudo opendkim-genkey -t -s default -d example.com $ sudo chown opendkim:opendkim /etc/opendkim/keys/*
luaの中で署名を指定する。
設定等は前回のエントリを参考に。
前回のtest.luaに対して以下のように追記した。
test.lua
local author = odkim.get_mtasymbol(ctx, "{auth_authen}") print ("name" .. author ) odkim.log(ctx, "name" .. author ) odkim.sign(ctx, "notdefault._domainkey.example.com")
設定ファイルも変更
/etc/opendkim/KeyTable
notdefault._domainkey.example.com example.com:notdefault:/etc/opendkim/keys/example.com/notdefault.private
default→notdefault
/etc/opendkim/SigningTable
(空)
SigningTableを空にすることでFromを判定して自動的に署名できなくなる。
秘密鍵を生成する
$ cd /etc/opendkim/keys/example.com
$ sudo opendkim-genkey -t -s notdefault -d example.com
$ sudo chown opendkim:opendkim /etc/opendkim/keys/*
notdefaultに対応する秘密鍵を生成。
以上で準備が整った。
結果を確認する
telnetでメールを送る。
$ telnet localhost smtp Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 ESMTP Postfix AUTH LOGIN ****** ****** MAIL FROM: test@example.com RCPT TO: test@localhost DATA FROM: test@example.com Subject: hogehoge hogehoge . quit 334 VXNlcm5hbWU6 334 UGFzc3dvcmQ6 235 2.7.0 Authentication successful 250 2.1.0 Ok 250 2.1.5 Ok 354 End data with <CR><LF>.<CR><LF> 250 2.0.0 Ok: queued as 6260E161C6D 221 2.0.0 Bye Connection closed by foreign host.
メールの中身を確認する。
From test@example.com Wed Sep 18 14:38:20 2013 Return-Path: <test@example.com> X-Original-To: test@localhost Delivered-To: test@localhost Received: from localhost (localhost [127.0.0.1]) by localhost (Postfix) with SMTP id 6260E161C6D for <test@localhost>; Wed, 18 Sep 2013 14:38:20 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=notdefault; t=1379482700; bh=U84RQJxCYmPtDKg95URE0hTFEfcj3DCpcZm8uGc/KJg=; h=FROM:Subject:Date:From; b=jGAlfdVmSMU3hFd2M8K0blAcXOqHXeUkHKmAPKHbQoWyVTwFmeX39IWaeMHqN0jGx UHxsQL4UzWHbwMJ1079Yk7UxIhMdyFTSjGpOz2sAOeLdaWrRMjopvHnN2vg4LzXnKP UC/aLayB/GXBJ/DRG2BN9YT6cTH8Xu6F21A8pGeo= FROM: test@example.com Subject: hogehoge Message-Id: <20130918053820.6260E161C6D@localhost> Date: Wed, 18 Sep 2013 14:38:20 +0900 (JST) hogehoge
「s=notdefault」などの文字列から署名が実行されたことがわかる。
次回はAUTH LOGINでログインしてきたユーザ別に署名をつけられるようにtest.luaに実装をする予定。