So-net無料ブログ作成

Gmailさんでdkimが通らない!?(続報) [備忘録]

 rsa-sha256でGmailさんにdkim=passするよ!というつぶやきをもらったので、追加で調査してみたところ、どうもdkim-genkeyする段階で、/etc/mail/dkim-filter.confを記述してるかしてないかで変わってくる模様。

 というのも、わたしが試したときには、
 ① dkim-genkey を実行する
 ↓
 ② /etc/mail/dkim-filter.conf を書く
 ↓
 ③ /etc/rc.d/init.d/dkim-filter を書く

 という流れで実行し、dkim-filterの起動スクリプト内に必要な情報は書き並べたので、confの中に書くことといえば
On-Badsignature         accept
On-NoSignature          accept

 これくらいしか書いてなかった。(笑)この状態では、dkim-filterはrsa-sha256だと思って振舞うっぽい?
 実際、Gmailで確認できたメールのヘッダには「a=rsa-sha256」と記載があった。

 で、dkim-genkeyする前に、dkim-filter.confに
SignatureAlgorithm      rsa-sha256

 と記述してから、dkim-genkeyをしてみると、「a=rsa-sha256」でも「dkim=pass」と、なったことが確認できた。


 まとめると、「SignatureAlgorithm」を明示的に書かなかった場合、
  ・dkim-filter はデフォルトのアルゴリズムを rsa-sha256だと解釈する
  ・dkim-genkey はデフォルトのアルゴリズムをrsa-sha1だと解釈する

 ということに?????????
 これならこのあたりの挙動に説明は付くけども・・・・・


 と、すると、sendmail.netに投げて返ってきたテストメールの
Authentication System:       DomainKeys Identified Mail
   Result:                   DKIM signature confirmed GOOD
   Description:              Signature verified, message arrived intact
   Reporting host:           sendmail.net        
   More information:         http://mipassoc.org/dkim/
   Sendmail milter:          https://sourceforge.net/projects/dkim-milter/

 ↑コレはなにをもって「GOOD」と言っているのでしょうかねえ?????


 謎です。。。。。

Gmailさんでdkimが通らない!? [備忘録]

 これはメモ。

 postfix+dkim_milterでメールにDKIMの署名を付けてみて、Gmailさんにテストメールを送信してみると・・・

Authentication-Results: mx.google.com; spf=pass (google.com: domain of p791@mycompany.com designates 125.***.***.149 as permitted sender) smtp.mail=p791@mycompany.com; dkim=neutral (bad format) header.i=@mycompany.com

 と、なってしまう場合。
 sendmail.netのテストではちゃんと通るのに。。。。。
Authentication System:       DomainKeys Identified Mail
   Result:                   DKIM signature confirmed GOOD
   Description:              Signature verified, message arrived intact
   Reporting host:           sendmail.net        
   More information:         http://mipassoc.org/dkim/
   Sendmail milter:          https://sourceforge.net/projects/dkim-milter/

Authentication System:       Domain Keys         
   Result:                   (no result present) 
   Reporting host:                               
   More information:         http://antispam.yahoo.com/domainkeys
   Sendmail milter:          https://sourceforge.net/projects/domainkeys-milter/

Authentication System:       Sender ID           
   Result:                   SID data confirmed GOOD
   Description:              Sending host is authorized for sending domain
   Reporting host:           sendmail.net        
   More information:         http://www.microsoft.com/senderid
   Sendmail milter:          https://sourceforge.net/projects/sid-milter/

Authentication System:       Sender Permitted From (SPF)
   Result:                   SPF data confirmed GOOD
   Description:              Sending host is authorized for sending domain
   Reporting host:           sendmail.net        
   More information:         http://spf.pobox.com/


 さんざん悩んだ結果、dkim-milterの新しい目のバージョンではDKIMの署名に「rsa-sha256」を使う模様。実際、メールのヘッダをよーく見てみると、
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mycompany.com; s=sarah;
 と、なってる。
 confや起動オプションの指定は何も明示していないので、デフォルトがコレになっているようです。



 が、Gmailさんはコレが理解できないらしいです。

 dkim-filterの起動オプションに、「-S rsa-sha1」を付けて起動すると、アラ不思議!!

Authentication-Results: mx.google.com; spf=pass (google.com: domain of p791@mycompany.com designates 125.***.***.149 as permitted sender) smtp.mail=p791@mycompany.com; dkim=pass header.i=@mycompany.com
DKIM-Signature: v=1; a=rsa-sha1; c=simple/simple; d=mycompany.com; s=sarah;

 と、DKIMの判定がpassになりました。

 おそらく、dkim-filter.confに記述する方法でも良いと思うんですけどもね。

 延々と苦しんだぜ・・・

「我が家のメールサーバ」を建ててみよう~その1・とりあえずインストール~ [Linux(Mail)]

 どうも最近、「自宅でLinuxサーバを・・・」というネタから遠く離れている気がしてならないのだが。(笑)まあ、このblogは私のメモでもあるのでいいといえばいいのかもしれないか。。。(笑)

 てなわけで、久々(?)の「自宅でLinuxサーバ」を活用するネタ。今回はメールサーバ編。

 判っていると思うが、メールサーバは特に第三者中継等でスパムメールばら撒き拠点として悪用されるリスクもあるので、そのあたりしっかり意識しておくよーに。

 「メールサーバ」と一口で言っても、準備しなければならない点はWebサーバよりも多くて複雑だ。まずはメールの送信と受信で準備すべく項目は別々に存在するし、サーバからみた観点だけでなくネットワーク的にも一定量の知識が欠かせない。

メールを送信するための準備:
 ①当然、MTAを準備しなければならない
 ②DNSへの登録 (Aレコード、PTRレコード)
 ③プロバイダや接続環境によってはサブミッションポートやSMTP認証といった設定も必要
 ④第三者中継等が行われないことをしっかり確認する(こうした確認を行うサービスを提供しているサイトがあるのでこれを活用する)

メールを受信するための準備:
 ①当然、MTAを準備する。他にPOP3/IMAP4を処理するものも用意する
 ②DNSへの登録 (Aレコード、MXレコード)
 ③プロバイダや接続環境によってはサブミッションポートの設定も必要になることも
 ④自宅のルータについて、ポート開放・転送・フィルタリング等設定を行う

 まず、MTAなどを用意する。
 MTAとは、メールを転送してくれるエージェントのこと。sendmailとかqmailとかpostfixとかそういう連中で、プロトコルとして「SMTP」を用いる。
 「手紙を書いた人間が、郵便ポストに手紙を投函する」 → SMTP
 「郵便局員が郵便ポストから手紙を回収し、郵便局に送り届ける」 → SMTP
 「集荷した郵便局から、配送先を管轄する郵便局へ郵便物を転送する」 → SMTP
 「配送先を管轄する郵便局が、あて先の家の郵便受けまで手紙を送り届ける」 → SMTP

 と、ここまでがSMTPの範疇。
 しかしこれだけではメールがまだ読めない。「郵便受けから手紙を取り出す」動作が無いためである。
 この動作については SMTP ではなく、POP3またはIMAP4といった別のプロトコルが管轄しているので、これはMTAではなくさらに別のエージェントを使用する。有名どころとしてはqpoperとか、dovecotとかだろうか。

 極めて個人的な理由ながら、私はqmailが大嫌いなので、qmail以外の選択肢でなおかつラクチンポンで使えるものを探すと・・・
[root@asagi postfix]# yum search mta
Loaded plugins: fastestmirror
Determining fastest mirrors
 * addons: ftp.iij.ad.jp
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
addons                                                                                        |  951 B     00:00
base                                                                                          | 2.1 kB     00:00
base/primary_db                                                                               | 2.2 MB     00:00
extras                                                                                        | 2.1 kB     00:00
extras/primary_db                                                                             | 241 kB     00:00
updates                                                                                       | 1.9 kB     00:00
updates/primary_db                                                                            | 446 kB     00:00
=================================================== Matched: mta ====================================================
postfix.x86_64 : メール転送エージェント
postfix-pflogsumm.x86_64 : Postfix MTA 用ログサマライザ/アナライザ
exim.x86_64 : The exim mail transfer agent
exim-doc.noarch : Documentation for the exim mail transfer agent
sendmail.x86_64 : 広く普及しているメール転送エージェント (MTA)
sendmail-doc.x86_64 : Sendmail メール転送エージェントプログラムに関するドキュメント
(以下略)

 sendmailは設定で軽く死んでしまうのでpostfixをチョイス。(予定通り!w)
 pop3/imap4のエージェントについては
[root@asagi postfix]# yum search pop3
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: ftp.iij.ad.jp
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
=================================================== Matched: pop3 ===================================================
cyrus-imapd.x86_64 : A high-performance mail server with IMAP, POP3, NNTP and SIEVE support
dovecot.x86_64 : Dovecot Secure imap サーバー
fetchmail.x86_64 : A remote mail retrieval and forwarding utility
imp-h3.noarch : The Internet Messaging Program: webmail access to IMAP/POP3 accounts.
perl-Mail-POP3Client.noarch : POP3 client module for perl5

 cyrus-imapdかdovecotかだけど、ひとまずdovecotをチョイス。よって、これらのインストールとしては・・・
yum install postfix dovecot

 ・・・ということになるね!


 さて、メールサーバの構築としては概ね以下の手順になるかな
手順①:必要なエージェント類をインストールする
手順②:postfixの設定ファイルを適切に記述する(かならず!!)
手順③:dovecotの設定ファイルを適切に記述する(必要な場合のみ)
手順④:サービスの自動起動設定
手順⑤:ルータのポート開放・転送等の設定を導入する

 メールサーバとしてはここまでだが、メールの送受信にはDNSとの連携が欠かせない。
 固定されたIPアドレスをもっている場合はいざじらず、ごく一般的なネット接続サービスを利用している限りはインターネットに接続されるポイントのIPアドレスは固定されていないのが常なので、DDNSサービスを利用しなければならないことが一般的だろう。
 この場合に、DDNSを自動更新したりするギミックを用意する必要が生じる。DDNSの更新ツールとして有名かつ秀逸なものには、「DiCE」だろうか。残念ながらyumではインストールできないので、コレのLinux版をビルドしてインストールすることとなる。

そんな訳で、
手順⑥:適切なDDNSサービスに登録する
  ※重要:MXレコードへの登録に対応しているサービスを選択すること
  ※重要:さらに、DiCEに対応しているサービスを選択すること
手順⑦:DiCEをダウンロード・ビルド・インストール
手順⑧:DiCEを適切に設定する



 というわけで、postfixとdovecotはyumでインストール。DiCEについてはソースからビルドしてインストールということにする。

手順①:必要なエージェント類をインストールする

 すでに示したとおり、yum install postfix dovecotで終了。

手順②:postfixの設定ファイルを適切に記述する(かならず!!)

 インストールが終わったら、今度はpostfixの設定ファイルを編集する。
 重要なファイルとしては、
    /etc/postfix/master.cf
    /etc/postfix/main.cf
 の2個だが、ごく標準的なメールサーバの構築であれば、「/etc/postfix/main.cf」のみの編集で用は足りるはず。で、このファイルをviで開くと英語でコメントたっぷりに記述されていて、もう何から手を付けたらよいものか皆目検討もつかないのだが、重要で最低限必要な設定内容というと↓こんな具合。
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix

myhostname = asagi.myhome.ddns-service.com
mydomain = myhome.ddns-service.com
myorigin = $mydomain

mynetworks = 192.168.0.1/24 127.0.0.0/8
inet_interfaces = all

mydestination = $myhostname, $mydomain
unknown_local_recipient_reject_code = 550

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
home_mailbox = Maildir/
mailbox_delivery_lock = fcntl, dotlock

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no

 たったこれだけ。重要なポイントだけかいつまんで説明すると・・・

 「mail_owner = postfix」・・・postfixを動作させるLinuxユーザアカウント名。rootやnobodyは使用すべきではない。セキュリティホールのリスクを少しでも回避させるため。(完全には防げないけどな!)
 「myhostname = asagi.myhome.ddns-service.com」・・・メールサーバのホスト名。「asagi」は自由につけたサーバの名前。「myhome.ddns-service.com」はDDNSサービスを申し込んだ際に発行されるはずのドメイン名。DDNSサービスによって変わるので、適切な名称を記述するように。
 「mydomain = myhome.ddns-service.com」・・・このメールサーバが扱うべきメールのドメイン名。
 「myorigin = $mydomain」・・・このメールサーバから送信され、ドメイン名が明示されないメールに付与されるドメイン名。変数「mydomain」と同じですよ・・・ということを指定している。
 「mynetworks = 192.168.0.1/24 127.0.0.0/8」・・・このメールサーバから見て、『内側』のネットワークと見なされるネットワークアドレスの情報。『内側』のネットワークからは、自由にメールが送信できるが、これ以外(要するに『外側』)のネットワークからは、このメールサーバが管轄しているドメインにだけメールが送信できるという振る舞いになる。
 「mydestination = $myhostname, $mydomain」・・・そしてこれが、このメールサーバが管轄しているメールアドレスのドメイン。繰り返しになるが、『外側』のネットワークから送信時に指定できるドメイン名はここに書いてあるものだけになる。

 このように、「メールサーバの名前」「メールのドメイン名」「『内側』のネットワークアドレス」に関わる設定だけきちんとやっておけばよいということになる。

手順③:dovecotの設定ファイルを適切に記述する(必要な場合のみ)

 編集すべきファイルは、/etc/dovecot.confである。が、こちらは標準のままでも問題ない。もし気になるようであれば、「listen = 」の項目にアドレスを記述しておくとかそれくらいか?


 一端アーティクルを分ける。

apache2で--with-mpm=worker付けてコンパイルできないとお嘆きのアナタ [Linux(Apache)]

 やらかす人が結構いるようですが。。。

 apache2をビルドしていて、MPMオプションを付けないで(または--with-mpm=preforkを付けて)configureしてmakeした後で--with-mpm=workerオプションを付けて再度ビルドしようとすると、環境によっては
/usr/local/src/httpd-2.2.17/server/mpm/worker/worker.c:1203: undefined reference to `ap_thread_stacksize'
collect2: ld returned 1 exit status
make[1]: *** [httpd] エラー 1
make[1]: ディレクトリ `/usr/local/src/httpd-2.2.17' から出ます
make: *** [all-recursive] エラー 1

 こんなことになることが。

 こんなエラーにお嘆きのアナタ!

 make clean

 で驚きの白さに!!(チガウ
 一挙解決!この後にconfigureしてmakeしてmake installしてやってください。







 というか、ビルドしなおすときにmake cleanするのは基本だよー。(笑)
 某SIerから来ている人がコレに延々と悩んでいて萎えた。
メッセージを送る