メールを受け取らないサーバでのexim4の設定

unixユーザアカウントが1つか2つ、メールを外部に送ることはあっても内部のローカルメールなんか見ないよという場合のexim4の設定。目新しくはないけど、よくやる設定なのでメモしておく。

今回の例では myhostname が設定するサーバのホスト名で、 myhostname.local がメールサーバのドメイン名、 tateisu がサーバ上のメインユーザのアカウント名とする。

/etc/exim4/update-exim4.conf.conf を編集

dc_eximconfig_configtype='satellite'
dc_other_hostnames='myhostname.local'
dc_local_interfaces='127.0.0.1'
dc_readhost='myhostname.local'
dc_relay_domains=''
dc_minimaldns='true'
dc_relay_nets=''
dc_smarthost='external.smtp.server::26'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

dc_smarthost の部分に外部のSMTPサーバのホスト名とポート番号を書く。ポート番号の区切りがコロン2つで間違えやすい。

dpkg-reconfigure exim4-config

編集が終わったら dpkg-reconfigure exim4-config する。
質問が出るので以下のように答える。

# メール設定の種別
General type of mail configuration: 
→ mail sent by smarthost; no local mail

# このメールサーバのドメイン名
System mail name: 
→ myhostname.local

# SMTP 待ち受けアドレス
IP-addresses to listen on for incoming SMTP connections: 
→ 127.0.0.1

# ほか、このメールサーバがSMTPで受け取るメールのドメイン名
Other destinations for which mail is accepted:
→ myhostname.local

# ローカルメールを外部に送信する際にメールアドレスに付与するドメイン名
Visible domain name for local users:
→ myhostname.local

# メールを外部に転送する先のSMTPサーバのホストとポート
IP address or host name of the outgoing smarthost:  
→ rings.juggler.jp::26

# なるべくDNSクエリを減らして、不要な自動ダイアルアップを抑制する?
Keep number of DNS-queries minimal (Dial-on-Demand)?
→ Yes

# 設定ファイルを分割する?
Split configuration into small files? 
→ No

最後の2つの質問は今回の設定には影響しない。好きな方を選んで構わない。

設定が終わると自動的にexim4が再起動される

/etc/email-addresses を編集

ローカルユーザ宛のメールをどこに転送するかを記述する…のだが、これを使う送信先のサーバでリレー失敗が出てしまう問題があった。

/etc/aliases を編集

1ユーザしか作っていない、ほとんど素のdebianだとこんな感じ

mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: tateisu
tateisu: tateisu@juggler.jp

最後の行だけを追加した。
編集が終わっても再起動は特に必要ない。

動作確認

# mail tateisu
Subject: test 5
hoge
(Ctrl-Dを押す)
Cc: 
(何も入れずにEnter)

これでメールが配送されればOK。
ダメなら /var/log/exim4/mainlog や 送信先SMTPサーバのログを確認する。

サーバ上のメインユーザ以外にもrootとpostmasterくらいは確認しておく。