ubuntuでSMTPサーバの構築(SMTP-AUTHの設定)

devocotを用いてSMTP-AUTHの設定を行ったのでメモ

参考ページはこちら
http://www.asahi-net.or.jp/~aa4t-nngk/postfix-389ds5.html#cyruspostfixconf
各設定の意味まで細かに説明してあったため大変わかりやすかったです。

設定はこちら
/etc/postfix/main.cf

# SMTP-AUTHの有効化
smtpd_sasl_auth_enable = yes
# ドメイン名なしで認証を求めてきた場合に補完するドメイン名
smtpd_sasl_local_domain = $mydomain
# dovecotによってsaslの機能を提供
smtpd_sasl_type = dovecot
# ソケットファイルのパス(postfixのスプールディレクトリの基底からの相対パス)
smtpd_sasl_path = private/auth
# EHLO時に’AUTH=’を返答するための設定(古いメールクライアント用)
broken_sasl_auth_clients = yes
# saslの制限事項の設定
smtpd_sasl_security_options = noanonymous
# RCPT TOを受け取った時点で適用される規制を設定
smtpd_recipient_restrictions = check_client_access cidr:/etc/postfix/authclients,
 permit_sasl_authenticated,
 reject_unauth_destination

ここで注意なのでsmtpdとすること。クライアント用の設定としてsmtpという接頭辞から始まるものもあるためそちらを書いてしまうと当然サーバ用の設定としては機能しない。自分はそれで一度ハマった。

/etc/postfix/authclientsに以下を書いて保存

127.0.0.0/8    permit

.dbファイルへ変換

$ postmap /etc/postfix/authclients

ここで行っていることは、自ホストのみSMTP-AUTHの認証なしで外部へメールを送れるようにするということ。

また、dovecotの設定を書く
/etc/dovecot/conf.d/10-auth.conf

auth-mechanisms = plain

auth default {
  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

この設定で/var/spool/postfix/private/authとしてsaslの認証ソケットを提供できる

以上を設定したらサービスの再起動

$ sudo service postfix restart
$ sudo service dovecot restart

動作確認はtelnetを用いる
認証にはハッシュ化したdovecot用のユーザのパスワードが必要なので以下をコピっておく
dovecotの設定にかんしては以前メモした
http://jsapachehtml.hatenablog.com/entry/2014/01/23/230029

# user名がhoge、passwardがfugaのとき
$ perl -MMIME::Base64 -e 'print encode_base64("hoge\0hoge\0fuga");'
aG9nZQBob2dlAGZ1Z2E=

telnetにて認証確認

$ telnet localhost 25
EHLO localhost

出力の中にAUTHが含まれていれば認証の機能自体は設定されている

250-AUTH PLAIN 

ちなみにbroken_sasl_auth_clients = yesを設定している場合は250-AUTH=PLAINも出力されているはず

そのままtelnet上で以下を打って正しく認証されるか確認

AUTH PLAIN aG9nZQBob2dlAGZ1Z2E=

以下のように出力されれば認証成功

235 2.7.0 Authentication successful

プロのための Linuxシステム構築・運用技術 (Software Design plus)

プロのための Linuxシステム構築・運用技術 (Software Design plus)