Postfix on Ubuntu 12.04 TLS

  • 投稿日:
  • by

Ubuntu 12.04 TLSに拡張アドレスに対応したMTAサービスがほしい。
今時なので、SSL/TLSで経路暗号化とSMTP AUTHも必要。
ということで、Postfix 2.9.1-5 と libsasl2 2.1.25 をsetupした。

拡張アドレスとは、xxx@foobar.com というアドレスのほか、xxx-forspam@foobar.com というように、「-」などで区切ったメイルアドレスも使えるようにする機能。
Postfixは、デフォルトの区切り文字が「+」なので、「-」に変更した。

1. SMTP AUTH認証用に sasl2をinstall

ubuntuなので、apt-get でOK。
% sudo apt-get install sasl2-bin libsasl2-modules

2. Postfix の設定

/etc/postfix/main.cf で SSL/TLS と、SMTP AUTH、Maildir、拡張アドレスの拡張文字列「-」を設定。
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
home_mailbox = Maildir/
recipient_delimiter = -
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

/etc/postfix/master.cf で、submission(port:587)とsmtps(port:465)を設定。
chrootは、なし。

# service type  private unpriv  chroot  wakeup  maxproc command + args
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

/etc/postfix/sasl/smtpd.conf で、SMTPの認証を設定。

pwcheck_method: saslauthd
mech_list: plain login

3. 拡張アドレスの設定

qmailの時は、「$HOME/.qmal-拡張suffix文字列」というファイルに内容「./Maildir」だった。 Postfixは「$HOME/.forward-拡張suffix文字列」に変更。

4. SMTP のテスト

通常のSMTP(port:25)は、telnet で試す。 下記の例は、メールサーバを「mail.foobar.com」としたもの。
% telnet mail.foobar.com 25
Trying XXX.XXX.XX.XX ...
Connected to foorbar.com.
Escape character is '^]'.
220 foobar.com ESMTP Postfix (Ubuntu)
HELO foobar.com
250 mail.foobar.com
MAIL FROM: user01@foobar.com
250 2.1.0 Ok
RCPT TO: user01@gmail.com
554 5.7.1 : Relay access denied
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

ちゃんとつながって、不正中継を防ぐところまで確認。

smtps は、openssl で試す。
そのために、SMTP AUTHのPLAIN認証用文字列を先に作っておく。

% perl': ^Crl -MMIME::Base64 -e 'print encode_base64("ユーザ名\0ユーザ名\0パスワード")

ユーザ名「TEST」、パスワード「TEST_PASS」なら、以下のように表示される。

VEVTVABURVNUAFRFU1RfUEFTUw==

これが後で、SMTP AUTHの認証用文字列となる。

% openssl s_client -connect xxxx.jp:465
.... たくさんのダンプ
220 foobar.com ESMTP Postfix (Ubuntu)
HELO foobar.com
250 mail.foobar.com
AUTH PLAIN    
334 
VEVTVABURVNUAFRFU1RfUEFTUw==
235 2.7.0 Authentication successful
QUIT

「AUTH PLAIN」と認証用文字列の入力後、「Authentication successful」と表示されると、SMTP AUTH成功。
外部へのメイル送信も、「Relay access denied(不正中継)」といわれずに、成功できるようになる。

ここまでできれば、submission もきっと大丈夫。

5. クライアントのメイルソフトの設定

SMTP AUTH(over SSL)
 接続の保護「SSL/TLS」。認証方式「通常のパスワード」。
 ポート番号465。

SMTP AUTH(submission STARTTLS)。
 接続の保護「STARTTLS」。認証方式「通常のパスワード」。
 ポート番号587。