どうも、('A`)です。最近左腕が動かせなくなりました。
キョンシーの様に腕を前に伸ばすのはできるのですが、万歳ができません。
そしてキリスト様のように腕を横に伸ばす事もできなくなりました。
伸ばそうとすると左腕の外側の筋肉とか腕の付け根に痛みが走ります。
かれこれ3週間この状態です。
で、病院に行って診てもらったら「四十肩(肩関節周囲炎)、ですね」と言われまして・・・
放っておいても自然と治るそうなのですが、週一回ペースでリハビリに通っています。
えーと、先週は前回の日記でも書いた通りroot弟(´・ω・`)からリクエストを
受けましてqmailをいじってました。どんなリクエストかって言うと・・・
('A`):「えーと、何を作ればいいの?」
(´・ω・`):「T-Bananaとかに入っているqmailで、Domainkeysというのを使える様に
してほしいのです。」
('A`):「えーと、それって何?」
(´・ω・`):「簡単に言うと、メールの送信元を認証する仕組みです。ちゃんとした
ところからメールが送られているかを確かめる技術です。」
('A`):「へー、そんなのがあるんだ。でも、何で急に?」
(´・ω・`):「えーと、自宅に置いてあるサーバから、yahoo宛てにメールが届かない、
という事がありまして・・・どうもyahooはDomainkeysで送信元が確かな
ところか見ている様なのです。」
('A`):「面倒くさい事しているんだね・・・」
(´・ω・`):「判らないでもないです。スパムメールとか結構やってくるでしょうから。」
('A`):「まあ、試しにやってみるよ・・・」
(´・ω・`):「お願いします。」
|
えーと、やり方としては、googleとかで検索すると、色々な人が挑戦していますので、
いまさら感が漂いますが、ちょっと書いてみます。
まず、まっさらなサーバは必要ありません。既にqmailとかインストールされているなら、
インストール時につかったqmailのソースとかを用意するといいです。
手順は以下の通りです。
[前準備]
1) qmailを予め停止して下さい。
2) gmakeが入っていない場合にはgmakeをインストールしておいて下さい。
3) OpenSSLがインストールされていない場合には、合わせてインストールしておいて下さい。
4) Doaminkeysで使う公開鍵・秘密鍵を作ります。
Domainkeysは送信元のドメインに対して公開鍵をDNSのtxtレコードで公開し、
メールに埋め込まれた署名とDNSで公開されている公開鍵情報を使って、メールの
署名(秘密鍵情報)が正しいか判定します。
鍵の作り方はこんな方法で行います。
openssl md5 ~/* > /etc/random.txt
openssl genrsa -rand /etc/random.txt -out /etc/private.key 512
openssl rsa -in /etc/private.key -out /etc/public.key -pubout -outform PEM
mkdir -p /etc/domainkeys
cp /etc/private.key /etc/domainkeys/default
/etc/domainkeysに鍵情報を入れる事になります。
このディレクトリはこの後sendmailのラッパを作る際に指定する事になるので、
誤りの無い様に注意して下さい。
で、DNSに公開するのは /etc/public.key の内容です。
ここで、DJBDNSを使っている人はtxtレコードの記述に注意して下さい。
(先週('A`)はここでハマってしまいました・・・)
(例)
cat /etc/public.key
----------------------------------------------------------------
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALJ1VpYPTt3ISpucIW+nStTQmIsKZDGo
+LQKeH1aDhTuGeaG6Bf34PvgDPxjBhZhJtmCfekIPIxENFXno5FyXQECAwEAAQ==
----------------------------------------------------------------
登録する場合、+はそのままでは記述できません。エスケープシーケンスで、
記述する事になります。
(+は\053に書き換えます。ちなみにdjbdnsではセミコロン(;)も書き換える
必要があります。;は\073になります。)
(例)
書き換え後のキー
----------------------------------------------------------------
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALJ1VpYPTt3ISpucIW\053nStTQmIsKZDGo
\053LQKeH1aDhTuGeaG6Bf34PvgDPxjBhZhJtmCfekIPIxENFXno5FyXQECAwEAAQ==
----------------------------------------------------------------
で、txtレコードのフォーマットは以下の通りです。
'default._domainkey.[ドメイン名].:k=rsa\073 p=[/etc/public.keyの内容]
ここで、ドメイン名をw44.maido3.ccとすると、こんな感じになります。
'default._domainkey.w44.maido3.cc.:k=rsa\073 t=y\073 o=~\073
p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALJ1VpYPTt3ISpucIW\053nStTQmIsKZDGo
\053LQKeH1aDhTuGeaG6Bf34PvgDPxjBhZhJtmCfekIPIxENFXno5FyXQECAwEAAQ==
4) qmail-dkをインストールします。
qmail-dkとはDomainkeysに対応したqmailのプログラムです。
で、まずインストール時につかったqmailのソース(tarファイル)を持ってきます。
以下では qmail-1.03.tar.gz を使っていると仮定して書きます。
あと必要なものはDomainkeysのライブラリであるlibdomainkeysです。
(例)
cd /tmp
fetch http://summersoft.fay.ar.us/pub/qmail/qmail-1.03/qmail-1.03.tar.gz
fetch http://nchc.dl.sourceforge.net/sourceforge/domainkeys/libdomainkeys-0.68.tar.gz
まず、ライブラリを解凍して、makeします。
tar -xzpf libdomainkeys-0.68.tar.gz
cd libdomainkeys-0.68
gmake
cp *.h libdomainkeys.a ../
cd ../
次にqmailのソースを解凍し、そのソースにdomainkeys用のパッチファイルを
適用します。
tar -xzpf qmail-1.03
cd qmail-1.03
fetch http://www.qmail.org/qmail-1.03-dk-0.54.patch
patch -p1 qmail-1.03-dk-0.54.patch
で、makeの為の準備をして、プログラム(qmail-dk)のみをmakeします。
echo 'gcc -O2 -include /usr/include/errno.h' > ./qmail-1.03/conf-cc
make qmail-dk
で、作ったプロブラム(qmail-dk)をqmailのライブラリに移します。
移す際に所有者とパーミッションに注意して下さい。
cp qmail-dk /var/qmail/bin/
chown qmailq /var/qmail/bin/qmail-dk
chmod 4711 /var/qmail/bin/qmail-dk
5) sendmailをdomainkeysに対応させる為、ラッパーを作ります。
T-Bananaを例にしますと、sendmailは /var/qmail/bin/sendmail
というのを用意して、それに対して/usr/sbinの中でスタティックリンクを貼ってます。
lrwxr-xr-x 1 root wheel 23 Feb 9 20:03 sendmail -> /var/qmail/bin/sendmail
明確に判る様に /var/qmail/bin/qmail-dk.wrapper という名称で
エディタとかで作ります。
内容は以下の通り。
#! /bin/sh
export QMAILQUEUE=/var/qmail/bin/qmail-dk
export DKSIGN=/etc/domainkeys/default
export RELAYCLIENT=
exec /var/qmail/bin/sendmail "$@"
太字で記述した/etc/domainkeys/defaultが鍵情報の在りかに
なります。qmail-dkはここにある鍵情報を署名という形でメールに
埋め込む事になります。
で、ラッパを作ったら、所有者&パーミッションを変更します。
chown qmailq:qmail /var/qmail/bin/qmail-dk.wrapper
chmod 755 /var/qmail/bin/qmail-dk.wrapper
で、リンクを貼り直します。
リンクの貼り直し先とかは、みなさんのサーバのセッティングによって変わりますので
予め確認したうえで作業して下さいね。
cd /usr/sbin/
rm sendmail
ln -s /var/qmail/bin/qmail-dk.wrapper sendmail
6) vpopmailもインストールしている場合には、vpopmailをqmail-dkに対応させる
様に修正します。
以降は、ソースからインストールしている事を前提に記述します。
まずはソースを持ってきて、解凍します。
cd /tmp
fetch http://www.shupp.org/software/vpopmail-5.4.13.tar.gz
tar -xzpf vpopmail-5.4.13.tar.gz
cd vpopmail-5.4.13/
次にエディターでvpopmail.cを修正します。
修正箇所は以下の通りです。だいたい2500〜2600行目の間にあります。
fprintf( fs_tmp_file, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\"\t%d\n",
を↓に変更
fprintf( fs_tmp_file, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\",
DKSIGN=\"/etc/domainkeys/default\",QMAILQUEUE=\"bin/qmail-dk\"\t%d\n",ipaddr, (int)mytime);
で、修正が完了したら修正版をインストールします。
make
make install
7) 修正したvpopmailをインストールしたら、smtpdの設定ファイルを
エディタで修正します。
127.0.0.1:allow,RELAYCLIENT=""
を↓に変更
127.0.0.1:allow,RELAYCLIENT="",DKSIGN="/etc/domainkeys/default",QMAILQUEUE="bin/qmail-dk"
で、cdbファイルを使っているので、上記設定を有効化する為、下記のコマンドで
再生成します。
tcprules /var/vpopmail/etc/tcp.smtp.cdb /var/vpopmail/etc/tcp.smtp.tmp < /var/vpopmail/etc/tcp.smtp
で、ここまで実行すると、25番ポートからのメール送信ではDomainkeysが
うまく動く事を確認したのですが、、、587番ポートでは動かなかったです。
root弟(´・ω・`)も色々試しているのですが、うまくいきません。
(´・ω・`):「うーん、どうして動かないんだろう。もしかして、587番ポートに対応して
いないのかなあ・・・」
('A`):「送れないのかい?」
(´・ω・`):「ええ、ここまでうまくいってるのになあ・・・
('A`):「力技してみようか?」
(´・ω・`):「え???
('A`):「はい、どうでしょう?」
(´・ω・`):「あー、送信できている。何をしたんですか?」
('A`):「ん、ちょっと小手先を・・・」
(´・ω・`):「???」
('A`):「いやあ、587番に来たのをipnatで25番に転送してみた・・・」
(´・ω・`):「うへっ!本当に小手先やったんですね・・・」
('A`):「まあ、不格好だけど、送信できたんだから、結果オーライ、という事で。」
|
587番を25番に転送する方法は参考までに以下の通りです。
まず、カーネルモジュールをローディングします。
kldload ipl.ko
次に /boot/loader.confに以下のパラメータを追加します。
ipl_load="YES"
次に/etc/rc.confに以下のパラメータを2つ追加します。
ipnat_enable="YES"
ipnat_rules="/etc/ipnat.rules"
で、/etc/ipnat.rulesに以下の様な記述を入れます。
map [NICの装置記号名] 192.168.0.0/24 -> [サーバのIPアドレス]/32 portmap tcp/udp auto
map [NICの装置記号名] 192.168.0.0/24 -> [サーバのIPアドレス]/32
rdr [NICの装置記号名] [サーバのIPアドレス]/32 port 587 -> [サーバのIPアドレス] port 25 tcp
で、最後にipnatを以下のコマンドで起動します。
ipnat -CF -f /etc/ipnat.rules
ちょっとね、7.3の方も手掛けているのと、本当に何で587番から送れないのか
判らないもので・・・root弟(´・ω・`)には悪いけど、力技で切り抜けました。
ごめんね、root弟(´・ω・`)
ちなみに、Domainkeysで送ったメールはyahooメールでどの様に認識されるか、
と言いますとこんな風に表示されます。
yahooメールで届いたメールの詳細ヘッダーを見ると判ります。
From jw44@w44.maido3.cc Wed Feb 10 14:57:49 2010
X-Apparently-To: ('A`)@yahoo.co.jp via 124.83.200.72; Wed, 10 Feb 2010 14:58:19 +0900
X-Originating-IP: [114.160.23.44]
Return-Path:
Received-SPF: pass (w44.maido3.cc: domain of jw44@w44.maido3.cc designates 114.160.23.44
as permitted sender) receiver=w44.maido3.cc; client-ip=114.160.23.44;
envelope-from=jw44@w44.maido3.cc;
Authentication-Results: mta159.mail.kcd.yahoo.co.jp from=w44.maido3.cc; domainkeys=pass (ok)
Received: from 114.160.23.44 (HELO w44.maido3.cc) (114.160.23.44)
by mta159.mail.kcd.yahoo.co.jp with SMTP; Wed, 10 Feb 2010 14:58:19 +0900
Received: (qmail 1056 invoked from network); 10 Feb 2010 05:57:53 -0000
Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;s=default; d=w44.maido3.cc;
b=u5YcNI6B4pYDVbbve8n2luAys8RAQyzhC/Qm+IFXUAy8FtOQg7xBI7GGKcV5BXp
+ocJnnPt183cHP1M+tq202g== ;
Received: from unknown (HELO nishiPC) (192.168.0.2)by 0 with SMTP;
10 Feb 2010 05:57:53 -0000
Message-ID:
From: jw44@w44.maido3.cc アドレスブックに追加
DomainKeys は、このメールが w44.maido3.cc から送信されたことを確認しました。
To: ('A`)@yahoo.co.jp
Subject: テストメール
Date: Wed, 10 Feb 2010 14:57:49 +0900
MIME-Version: 1.0
Content-Type: text/plain;charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Windows Mail 6.0.6002.18005
X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6002.18005
Content-Length: 13
Domainkeysがちゃんと動いていたら、「DomainKey-Signature」という項目が表示され、
「DomainKeys は、このメールが w44.maido3.cc から送信されたことを確認しました。 」
というメッセージが出ます。
まあ、このDomainkeysに対応したからと言って、yahooメールに全件送信できる様になる、
とは言えない様です。
(どうもyahoo側で何らかのリストでメールの受信・受信拒否とかをコントロールしている
様です。Domainkeysに対応したメールサーバから送信してもyahoo側に届かない人も
いる様です。何だかなあ・・・)
で、先週末に7.3のRC1が出ました。大急ぎで社内サーバにインストールしてます。
これからベンチを回しますね。
それでは、また。
【追記 16:30】
さっそく7.3でunixbench5.1.2を動かしてみました。
えーと、、、過去に日記128日目でi386版のunixbenchを公開していましたが、Maakefileの
一部が修正前の状態になっていたので、今回修正して上げておきました。
すんません。。。
で、結果としては、まあ他のバージョンとそれほど違わない、と。
(いつもの社内サーバで実行したので・・・)
【FreeBSD 7.3-RC1 i386】
===================================================================================
BYTE UNIX Benchmarks (Version 5.1.2)
System: w44.maido3.cc: FreeBSD
OS: FreeBSD -- 7.3-RC1 -- FreeBSD 7.3-RC1 #0: Wed Feb 10 08:23:03 UTC 2010
root@walker.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
Machine: i386 (GENERIC)
Language: en_US.utf8 (charmap=, collate=)
CPU: no details available
5:16AM up 3:01, 1 user, load averages: 0.12, 0.03, 0.01; runlevel
------------------------------------------------------------------------
Benchmark Run: Mon Feb 15 2010 05:16:34 - 05:44:57
unknown CPUs in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 8016792.1 lps (10.0 s, 7 samples)
Double-Precision Whetstone 1620.7 MWIPS (10.1 s, 7 samples)
Execl Throughput 2018.1 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 134727.9 KBps (30.3 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 47886.0 KBps (30.2 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 66202.5 KBps (31.1 s, 2 samples)
Pipe Throughput 576264.0 lps (10.0 s, 7 samples)
Pipe-based Context Switching 131596.0 lps (10.0 s, 7 samples)
Process Creation 7135.9 lps (30.1 s, 2 samples)
Shell Scripts (1 concurrent) 4587.2 lpm (60.8 s, 2 samples)
Shell Scripts (8 concurrent) 951.3 lpm (60.4 s, 2 samples)
System Call Overhead 410325.6 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 8016792.1 687.0
Double-Precision Whetstone 55.0 1620.7 294.7
Execl Throughput 43.0 2018.1 469.3
File Copy 1024 bufsize 2000 maxblocks 3960.0 134727.9 340.2
File Copy 256 bufsize 500 maxblocks 1655.0 47886.0 289.3
File Copy 4096 bufsize 8000 maxblocks 5800.0 66202.5 114.1
Pipe Throughput 12440.0 576264.0 463.2
Pipe-based Context Switching 4000.0 131596.0 329.0
Process Creation 126.0 7135.9 566.3
Shell Scripts (1 concurrent) 42.4 4587.2 1081.9
Shell Scripts (8 concurrent) 6.0 951.3 1585.4
System Call Overhead 15000.0 410325.6 273.6
========
System Benchmarks Index Score 432.8
===================================================================================
【FreeBSD 7.3-RC1 amd64】
===================================================================================
BYTE UNIX Benchmarks (Version 5.1.2)
System: w44.maido3.cc: FreeBSD
OS: FreeBSD -- 7.3-RC1 -- FreeBSD 7.3-RC1 #0: Wed Feb 10 07:47:42 UTC 2010
root@driscoll.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
Machine: amd64 (GENERIC)
Language: en_US.utf8 (charmap=, collate=)
CPU: no details available
6:13AM up 3 mins, 1 user, load averages: 0.20, 0.27, 0.13; runlevel
------------------------------------------------------------------------
Benchmark Run: Mon Feb 15 2010 06:13:09 - 06:41:23
unknown CPUs in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 10696939.3 lps (10.0 s, 7 samples)
Double-Precision Whetstone 2310.3 MWIPS (10.0 s, 7 samples)
Execl Throughput 1850.1 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 139099.4 KBps (30.4 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 63312.2 KBps (30.1 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 66005.5 KBps (31.1 s, 2 samples)
Pipe Throughput 783161.5 lps (10.0 s, 7 samples)
Pipe-based Context Switching 135081.8 lps (10.0 s, 7 samples)
Process Creation 6524.9 lps (30.1 s, 2 samples)
Shell Scripts (1 concurrent) 4332.9 lpm (60.6 s, 2 samples)
Shell Scripts (8 concurrent) 876.4 lpm (60.2 s, 2 samples)
System Call Overhead 609354.8 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 10696939.3 916.6
Double-Precision Whetstone 55.0 2310.3 420.1
Execl Throughput 43.0 1850.1 430.2
File Copy 1024 bufsize 2000 maxblocks 3960.0 139099.4 351.3
File Copy 256 bufsize 500 maxblocks 1655.0 63312.2 382.6
File Copy 4096 bufsize 8000 maxblocks 5800.0 66005.5 113.8
Pipe Throughput 12440.0 783161.5 629.6
Pipe-based Context Switching 4000.0 135081.8 337.7
Process Creation 126.0 6524.9 517.9
Shell Scripts (1 concurrent) 42.4 4332.9 1021.9
Shell Scripts (8 concurrent) 6.0 876.4 1460.7
System Call Overhead 15000.0 609354.8 406.2
========
System Benchmarks Index Score 484.9
===================================================================================
|