前回は本当にさわりだけだったので、今回は実際に役に立つ機能を加えたいと思います。実際にどんな機能を実装しようかと考えたのですが、以前qmailでMTAを運用しているときに独自に追加したGeoIP関連の処理を追加することにしました。
GeoIPとは
GeoIPはMaxMind社が提供しているサービス及びデータベースの事で、IPアドレスから国や地域を調べることが出来ます。基本有料のサービスなのですが、精度が少し低くて更新が自動で出来ないバージョンは無料で利用出来ますので、今回はこれを利用します。
GeoIPデータベースを使うと国や地域だけでなく都市名なども分かるのですが、今回は国名と座標をメールヘッダーに追加します。
GeoIPライブラリのインストール
GeoIPを利用するためにまずライブラリのインストールを行います。MaxMindの開発者向けページを見るとGeoIP2というのも出てきていますが、これから実装する機能にはLegacy版で十分ですので、Debianにあるパッケージを使ってちゃっちゃとインストールします。他のディストリビューションやOSをお使いの方は先ほどのページを参考に頑張って下さい。
これで開発の準備は完了です。
local_scanの作成(geoip-exim.c)
さっそくソースコード見て下さい。前回の説明した最小限の構成と比べるとlocal_scan関数に少しばかりコードが増えていますが、やっていることは簡単で以下のような事を行っています。
- データベースをオープン
- メール送信者のIPアドレスを元にデータベースを検索
- 検索結果を元にX-Geoip-CountryとX-Geoip-Coordinatesヘッダーを追加
- 検索結果の後始末
- データベースをクローズ
コンパイルして配置します。
Eximに設定を追加して再起動します。
届いたメールにX-Geoip-*
から始まるヘッダーが二つ追加されていれば問題無く動作しています。local_scanがクラッシュしてもExim本体側で絵エラーハンドリングされるはずですが、テストもしないでいきなり本番サーバーで実行したりなど無謀な事はしないで下さい。何が起こっても当局は一切関知しません。