迷惑メール対策に負けない,exim4 の正しい設定方法

ラズパイやPC Linuxで構築したサーバ機では, ログの監視結果などをメール送信できると格段に使い勝手が向上します.

しかし今のインターネットは迷惑メール対策がしっかりしています.例えば

  • プロバイダのOutbound Port 25 Blocking
  • SPFによる送信ドメイン認証(SPF

などの迷惑メール対策があり,これらの対策を突破しないとメールは相手に届きません.

迷惑メール対策に負けない Linux の設定

と言うわけで,これら迷惑メール対策に負けない設定として, exim4を使う方法を説明します.

ポイントは三つあります.

  1. exim4を使います
    • 軽量です
    • ラズパイのような組み込みシステム,利用形態で問題なく利用できます.
  2. 外部のメールサーバ(SMTPサーバー)経由で送信します
    • 外部のSMTPサーバーとして,以下のサーバーを使ってメールを送信します.
    • SPF対策済みのSMTPサーバーを使用するので,メールがSPAMと誤判定されにくくなります.
  3. SSL使います
    • SMTP authを使うので,SSLでユーザ名,パスワードを保護します.

exim4の基本設定

基本的な設定は dpkg-reconfigure で行うのが楽です.

$ sudo dpkg-reconfigure exim4-config

慣れている人は /etc/exim4/update-exim4.conf.conf を直接編集してもOKです.


設定で大事なのは smarthost の設定です.smarthost で中継先のSMTPサーバを指定します.書式は

SMTPサーバ名::ポート番号

です.区切りは":"ではなくて "::" とコロンを2回連続で書くことに注意してください.

googleSMTPを使うなら

smarthost = "smtp.gmail.com::465"

となります

SMTP-authのパスワード設定

/etc/exim4/passwd.client にパスワードを記入します

*:アカウント名:パスワード

"*"の部分はSMTPサーバーの名前です.今回の設定方法では,SMTPサーバーは一つしか設定しないので,"*"と書いておきましょう.

パスワードは平文で記入します.

心配な人は /etc/exim4/passwd.client のパーミッションを確認しましょう.デフォルトでroot以外はファイルの中身を閲覧できないようなっているはずです(一般ユーザでpasswd.clientの中身が読めたらセキュリティホールです.開発者にバグレポートを出しましょう)

exim4の設定ファイルの更新

/etc/exim4/exim4.conf.localmacros の末尾に以下の行を追加します

    MAIN_TLS_ENABLE = 1 
    REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = *
        TLS_ON_CONNECT_PORTS = 465 
    REQUIRE_PROTOCOL = smtps 

続けて /etc/exim4/exim4.conf.template の .ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS ... .endif の部分に以下の行を追加します

    .ifdef REQUIRE_PROTOCOL
        protocol = REQUIRE_PROTOCOL 
    .endif 

さらに下記3行を /etc/exim4/exim4.conf.template の .ifdef MAIN_TLS_ENABLE の次の行に追加します.

    .ifdef TLS_ON_CONNECT_PORTS
        tls_on_connect_ports = TLS_ON_CONNECT_PORTS 
    .endif 

設定の反映と exim4 の再起動

$ sudo  /usr/sbin/update-exim4.conf
$ sudo  /etc/init.d/exim4 restart

動作確認

配信経路確認

/usr/sbin/exim4 を使うと,メールの配信経路を確認できます.

$ /usr/sbin/exim4 -bt  hogehoge@example.com
R: smarthost for hogehoge@example.com
hogehoge@example.com
  router = smarthost, transport = remote_smtp_smarthost
  host 外部SMTPサーバ名 [IPアドレス] port=465
  • smarthostの設定で,外部SMTPサーバーに中継されていること
  • 465ポートに送信していること

が確認できます

送信テスト

mailコマンドでメールを送信してみましょう

$ echo "hogehoge" | mail -s test   hogehoge@example.com

トラブルシューティング

ログ

エラーなどはすべてログファイルに出力されます.うまく行くときも,うまく行かないときも,ログファイルを見るのが基本です.

$ sudo tail -f /var/log/exim4/maillog
メールキューを全削除
$ sudo -s
 exim -bp | exiqgrep -i | xargs exim -Mrm