fetchmailを使ってGmailのメールをダウンロードする

自前で運用していたメールサーバを、Google Appsに移行しようと検討中。移行後は、リスク分散のためメールデータをGoogleのみに置くのではなく、手元にダウンロードしておくことにする。リモートのPOP/IMAPアカウントからメールをダウンロードするには、fetchmailを使うことにした。

fetchmailのインストール

FreeBSDならportsになっている。ports/mail/fetchmailを使えば簡単にインストール可能。

fetchmailの設定

~/.fetchmailrcという名前で設定ファイルを用意する。このファイルにはパスワードを記述するため、permissionは600にしておくこと。

> touch ~/.fetchmailrc
> chmod 600 ~/.fetchmailrc

設定ファイルの内容は、Gmail向けだと以下の通り。直接MDAであるprocmailに渡す設定にしている。いまどきprocmailはないよね、ということならmaildropなんかがおすすめ。

# POPを使う場合
poll pop.gmail.com proto POP3
  username "GmailまたはGoogle Appsのユーザ名"
  password "パスワード"
  ssl
  mda "/usr/local/bin/procmail"

# IMAPを使う場合
poll imap.gmail.com proto IMAP
  username "GmailまたはGoogle Appsのユーザ名"
  password "パスワード"
  ssl
  mda "/usr/local/bin/procmail"

SSLサーバ証明書の検証

GmailPOP3でもIMAPでも、SSLを使用してアクセスする必要がある。fetchmailSSLサーバ証明書の検証が失敗した場合でも、エラーメッセージを出すだけでアクセスは可能だけど、セキュリティ確保のためにはサーバ証明書を検証することが必須。証明書を検証しないと、偽のサーバに接続したときに検出できない。

fetchmail: Server certificate verification error: unable to get local issuer certificate
fetchmail: Server certificate verification error: certificate not trusted

サーバ証明書の検証をするには、まず証明書のRootCAがどこかを探す必要がある。RootCAは証明書を見ればわかるので、まずはGmailで使われている証明書をOpenSSLを使って確認する。

> openssl s_client -connect pop.gmail.com:995 -showcerts
省略
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority
省略
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

Intermediate CAがGoogle Internet Authority、RootCAがEquifax Secure Certificate Authorityということが分かる。というわけで、Equifax Secure Certificate AuthorityのRootCA証明書を取り寄せよう。GeoTrustからダウンロードできる。ページ中の、Root 1 - Equifax Secure Certificate AuthorityをダウンロードすればOK。ダウンロードの際は、ブラウザを使いSSLサーバ証明書の検証に成功していることを確認すること。GeotrustはEV SSL対応なので、Firefoxならアドレスバー左側が緑になり、中にGeotrust, Inc(US)が表示されるはず。
証明書ファイルをダウンロードしたら、適当なディレクトリにコピーする。拡張子は.pemにすること。その後、OpenSSLのc_rehashを実行する。c_rehashは通常ではインストールされないので、source treeがあればそこから実行するか、CVSwebからダウンロードする。

# cp Equifax_Secure_Certificate_Authority.cer /some/where/Equifax_Secure_Certificate_Authority.pem
# perl /usr/src/crypto/openssl/tools/c_rehash /some/where

最後に.fetchmailrcに設定を追加すれば完了。

# POPを使う場合
poll pop.gmail.com proto POP3
  username "GmailまたはGoogle Appsのユーザ名"
  password "パスワード"
  ssl
  sslcertck
  sslcertpath '/some/where'
  mda "/usr/local/bin/procmail"

# IMAPを使う場合
poll imap.gmail.com proto IMAP
  username "GmailまたはGoogle Appsのユーザ名"
  password "パスワード"
  ssl
  sslcertck
  sslcertpath '/some/where'
  mda "/usr/local/bin/procmail"

fetchmailを実行すれば、サーバ証明書の検証が成功しているはず。

> fetchmail -v
fetchmail: 6.3.13 querying pop.gmail.com (protocol POP3) at Mon Nov 16 00:00:10 2009: poll started
Trying to connect to 74.125.127.109/995...connected.
fetchmail: Issuer Organization: Google Inc
fetchmail: Issuer CommonName: Google Internet Authority
fetchmail: Server CommonName: pop.gmail.com
fetchmail: pop.gmail.com key fingerprint: 92:73:17:4C:34:4B:68:F7:B2:17:71:42:0D:7F:9F:33