Exim

Exim は MTA(message transfer agent)と呼ばれるもののひとつです。 メインサイトは http://www.exim.org です。最近は sendmail 以外の MTA を採用するディストリビューションをよく見かけるようになりました。

最近インストールしたDebianでは 標準のMTAにEximを採用しています。ここでは Debian を例に Exim の設定を紹介します。

メール関連のプログラムは三つの種類に分けられます。

fetchmail で複数のPOPサーバからメールを取り出して mutt で読むというのが 私のこだわりです。これらのプログラムを使うには MTA の設定が必要です。

設定のポイントは以下のものです。

  1. 組織内メールは直接配送する。
  2. 外部宛のメールはすべてプロバイダの MTA にまかせる、すなわちスマートホストを設定する。
  3. Fromアドレスを書き換える。
eximを設定する前に以下のファイルを確認しておきます。
/etc/hostname
/etc/hosts
/etc/bind/
0.168.192.in-addr.arpa.zone db.127 db.local named.conf rndc.key
db.0 db.255 db.root kome.zone
/etc/resolv.conf
Debian では bind(Berkley Internet Name Domain) の設定ファイルは /etc/bind/ 以下に置きます。MTA はメールの配送に DNS の MXレコードを参照します。
debian@sasanishiki:~$ dig sasanishiki.kome MX

;; QUESTION SECTION:
; sasanishiki.kome.                     IN      MX

;; ANSWER SECTION:
sasanishiki.kome.       86400   IN      MX     10 sasanishiki.kome.

;; AUTHORITY SECTION:
kome.                   86400   IN      NS     sasanishiki.kome.

;; ADDITIONAL SECTION:
sasanishiki.kome.       86400   IN      A      192.168.0.5

;; Query time: 6 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Sep 27 15:10:27 2003
;; MSG SIZE  rcvd: 78

このように dig を使って MXレコードの名前がちゃんと引けるかテストをしておきます。

debian@sasanishiki:~$ /usr/sbin/exim -bV
Exim version 3.35 #1 built 04-Mar-2002 23:05:40
Copyright (c) University of Cambridge 2001
2003-06-05 20:03:23 Failed to open configuration file /etc/exim/exim.conf

設定ファイルの場所は /etc/exim/exim.conf であることがわかります。 http://www.exim.org によるとカレントバージョンは 4.24 になっています。3 はもうサポートされないとの ことです。4 と 3 では設定が違うので注意してください。exim に関する文書は /usr/share/doc/exim/ 以下にあります。spec.txt.gz が参考になります。

debian@sasanishiki:~$ su
Password:
sasanishiki:/home/debian# cp /usr/share/doc/exim/example.conf.gz /etc/exim
sasanishiki:/home/debian# cd /etc/exim
sasanishiki:/etc/exim# cp example.conf.gz exim.conf.gz
sasanishiki:/etc/exim# gunzip exim.conf.gz
sasanishiki:/etc/exim# vi exim.conf

# ローカルドメインズを明示する。
local_domains = localhost:\
                sasanishiki.kome

# 外部へ relay を許可するホストを明示する。
host_accept_relay = 127.0.0.1 : 192.168.0.0/24

# 内部へ relay してもよいドメインズを明示する。
relay_domains = localhost : *.kome

# ドメイン kome 宛のメールは外部に出さずに直接配送する。
# domains = *.komeを追加
lookuphost:
  driver = lookuphost
  transport = remote_smtp
  ignore_target_hosts = 127.0.0.0/8
  domains = *.kome

# 外部に出すメールはプロバイダの MTA に託す。言い替えるとスマートなホストを
# 設定する。mb.scatv.ne.jp は私が契約しているプロバイダのメールサーバです。
# 参考 28. The domainlist router(version 3.20)
smart_route:
  driver = domainlist
  transport = remote_smtp
  route_list = *  mb.scatv.ne.jp bydns_a

# 外部にメールを出す時、ここでの例では From アドレスが debian@sasanishiki.kome
# という架空のドメインになっています。これではプロバイダのメールサーバに relay
# または受け取りを拒否されますので実際のアドレスに書き換える必要があります。
# ここで言う From アドレスとは MTU(Mail User Agent)で設定する Fromアドレスでは
# なく exim がプロバイダの MTA(Mail Transfare Agent)とやりとりに使う From 
# アドレスです。
# REWRITE CONFIGURATION と言うセクションに書きます。
# ここではフラグに "F" を立てています。フラグの意味は以下の通り
# E       rewrite all envelope fields
# F       rewrite the envelope From field
# T       rewrite the envelope To field
# b       rewrite the "Bcc:" header
# c       rewrite the "Cc:" header
# f       rewrite the "From:" header
# h       rewrite all headers
# r       rewrite the "Reply-To:" header
# s       rewrite the "Sender:" header
# t       rewrite the "To:" header
# 参考 34.5 Rewriting flags(version3.20)
debian@sasanishiki.kome   manabe@mb.scatv.ne.jp     F

# /etc/exim/exim.conf 終り

参考リンク http://exim.stupendous.net/(Japan) より Documentation and FAQs をクリックしお使いのバージョンに合ったものを選択します。

exim のテストは以下のように行います。 4.15 Testing(version3.20)

# /etc/init.d/exim reload
# exim -bV
Exim version 3.35 #1 built 04-Mar-2002 23:05:40
Copyright (c) University of Cambridge 2001
# exim -bt debian@localhost
debian@localhost
  deliver to debian in domain localhost
  director = localuser, transport = local_delivery
# exim -bt debian@sasanishiki.kome
debian@sasanishiki.kome
  deliver to debian in domain sasanishiki.kome
  director = localuser, transport = local_delivery

登録をしていないユーザの場合
# exim -bt manabe@localhost
manabe@localhost is undeliverable:
  unknown local-part "manabe" in domain "localhost"

別のマシン名のユーザ
# exim -bt redhat@koshihikari.kome
redhat@koshihikari.kome
  deriver to redhat@koshihikari.kome
  router = lookuphost, transport = remote_smtp
  host koshihikari.kome [192.168.0.10] MX=10

外部へ
# exim -bt manabe@mb.scatv.ne.jp
manabe@mb.scatv.ne.jp
  deliver to manabe@mb.scatv.ne.jp
  router = smart_route, transport = remote_smtp
  host mb.scatv.ne.jp [210.157.235.70]

存在しないドメインは拒否される。
# exim -v manabe@mb.scatv.ne.jp<Return>
From: manabe@mb.scatv.ne.jp<Return>
To: manabe@mb.scatv.ne.jp<Return>
Subject: Testing Exim<Return>
<Return>
This is a test message.<Return>
<Ctr+D>
LOG: 0 MAIN
  <= root@sasanishiki.kome U=root P=local S=331
Exim version 3.35 debug level 1 uid=8 gid=8
Berkeley DB: Sleepycat Software: Berkeley DB 2.7.7: (08/20/99)
delivering message 1A3T4X-0000Pt-00
Connecting to mb.scatv.ne.jp [210.157.235.70.25] ... connected
  SMTP<< 220 cb.scatv.ne.jp ESMTP Sendmail 8.9.3/8.9.3; Sun, 28 Sep 2003 13:24:24 +0900
  SMTP>> EHLO sasanishiki.kome
  SMTP<< 250-cb.scatv.ne.jp Hello hidden-user@cm.scatv.ne.jp [192.168.1.100], pleased to meet you
         250-8BITMIME
         250-SIZE 5242880
         250-DSN
         250-ONEX
         250-XUSR
         250 HELP
  SMTP>> MAIL FROM:<root@sasanishiki.kome> SIZE=1364
  SMTP<< 501 <root@sasanishiki.kome>... Sender domain must exist
  SMTP>> QUIT

rootは From の書き換えの設定をしていないので外部のMTAに配送を拒否される。
ちなみに rootは never_users = root でメールを受け取ることはできない。

メールが配送された例
$ /usr/sbin/exim -v manabe@mb.scatv.ne.jp<Return>
From: debian@sasanishiki.kome<Return>
To: manabe@mb.scatv.ne.jp<Return>
Subject: Testing Exim<Return>
<Return>
This is a test message.<Return>
<Ctr+D>
LOG: 0 MAIN
  <= manabe@mb.scatv.ne.jp U=debian P=local S=333
Exim version 3.35 debug level 1 uid=8 gid=8
Berkeley DB: Sleepycat Software: Berkeley DB 2.7.7: (08/20/99)
delivering message 1A3XaO-0000UY-00
Connecting to mb.scatv.ne.jp [210.157.235.70.25] ... connected
  SMTP<< 220 cb.scatv.ne.jp ESMTP Sendmail 8.9.3/8.9.3; Sun, 28 Sep 2003 18:14:48 +0900
  SMTP>> EHLO sasanishiki.kome
  SMTP<< 250-cb.scatv.ne.jp Hello hidden-user@cm.scatv.ne.jp [192.168.1.100], pleased to meet you
         250-8BITMIME
         250-SIZE 5242880
         250-DSN
         250-ONEX
         250-XUSR
         250 HELP
  SMTP>> MAIL FROM:<manabe@mb.scatv.ne.jp> SIZE=1366
  SMTP<< 250 <manabe@mb.scatv.ne.jp>... Sender ok
  SMTP>> RCPT TO:<manabe@mb.scatv.ne.jp>
  SMTP<< 250 <manabe@mb.scatv.ne.jp>... Recipient ok
  SMTP>> DATA
  SMTP<< 354 Enter mail, end with "." on a line by itself
  SMTP>> writing message and terminating "."
  SMTP<< 250 SAA08245 Message accepted for delivery
  SMTP>> QUIT
LOG: 0 MAIN
  => manabe@mb.scatv.ne.jp R=smart_route T=remote_smtp H=mb.scatv.ne.jp [210.157.235.70]
LOG: 0 MAIN
  Completed