fetchmailを使ってGmailのメールをダウンロードする
自前で運用していたメールサーバを、Google Appsに移行しようと検討中。移行後は、リスク分散のためメールデータをGoogleのみに置くのではなく、手元にダウンロードしておくことにする。リモートのPOP/IMAPアカウントからメールをダウンロードするには、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サーバ証明書の検証
GmailはPOP3でもIMAPでも、SSLを使用してアクセスする必要がある。fetchmailはSSLサーバ証明書の検証が失敗した場合でも、エラーメッセージを出すだけでアクセスは可能だけど、セキュリティ確保のためにはサーバ証明書を検証することが必須。証明書を検証しないと、偽のサーバに接続したときに検出できない。
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