SMTP 認証ありでの SMTP 伝送確認

ここまで、アカウント管理用の postfixadmin の設定、 SMTP の設定、 Dovecot の設定とやってきたが、このままだとセキュリティ上に問題があるので、ここから postfixSMTP 認証および SSL/TLS をつかえるように設定していく。

postfix の main.cf の設定

基本的な設定が終わったあとの main.cf に追記していく。

$ sudo vi /etc/postfix/main.cf

# SSLの証明書や鍵等
smtpd_tls_cert_file = /usr/local/etc/ssl/server/niboshi.kakitsubata-ayame.jp/server.crt
smtpd_tls_key_file = /usr/local/etc/ssl/server/niboshi.kakitsubata-ayame.jp/newkey.pem
smtpd_tls_CAfile = /usr/local/etc/ssl/demoCA/cacert.crt
smtpd_tls_CApath = /usr/local/etc/ssl/demoCA

# SASLによるAUTHを行う
smtpd_sasl_auth_enable = yes
# 匿名での接続を拒否する
smtpd_sasl_security_options = noanonymous
# OutlookExpress4用設定…うちでは使ってないので不要
##broken_sasl_auth_clients=yes

# SMTP認証にdovecot-saslを使う
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# $mynetworksと認証を通ったものを通す
smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination,

# TLSのログ設定
smtpd_tls_loglevel = 1
# TLSを使う
smtpd_use_tls = yes
# TLS使用時のみSMTP認証を使う→TLSを使わない場合外部に送れない
smtpd_tls_auth_only = yes
# TLSを促す
smtp_tls_note_starttls_offer = yes
# キャッシュと乱数の設定
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
tls_daemon_random_source = dev:/dev/urandom

postfix の master.cf の設定

これだけでは SMTPS のポート待受ができず送信できない (ちょっとハマった)。 master.cf も編集する。

$ sudo vi /etc/postfix/master.cf


#コメントアウトされているので外してやる
-#smtps     inet  n       -       n       -       -       smtpd
-#  -o smtpd_tls_wrappermode=yes
-#  -o smtpd_sasl_auth_enable=yes
+smtps     inet  n       -       n       -       -       smtpd
+  -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

postfix の再起動と送信テストを行う

再起動する。

$ sudo /etc/init.d/postfix restart
再起動

$ netstat -an --tcp

tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
ポート確認


送信テストはクライアント PC のメールソフトを使う。クライアント PC のファイアウォールを無効にして

  • Port25 で SMTP 認証有/無でプロバイダのメールアドレス宛に送ってみる
    • パスワードを間違えてみる
  • Port465 で SMTPS の接続確認
  • Port465 で SMTP 認証有/無でプロバイダのメールアドレス宛にに送ってみる
  • 各種ログ確認


等々行えばいいかなと思う。プロバイダの外 (ケータイ等) へはまだ送れないと思う。最終的には外部 (ケータイ) への転送をができることも目的としているので、次でいわゆる OP25B 対策も施しておく。

OP25B 対策

main.cf に外部 relay を行うように書けばプロバイダから外へメールを送ることが可能になる。

$ sudo vi /etc/postfix/main.cf

#--------------------------------
# * for OP25B *
#-------------------------------
relayhost = [vsmtp.xxxx.xxx.xxx.jp]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/isp_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = PLAIN, LOGIN

relayhost の項目には自分が使っているプロバイダの SMTP サーバの情報を記入する。


また、この relayhost で行う認証について smtp_sasl_password_maps で記載したファイルに記入する。

$ sudo vi /etc/postfix/isp_passwd
[vsmtp.xxxx.xxx.xxx.jp]:587 ユーザ名 パスワード


終わったら、ハッシュファイルにして、その後 postfix を再起動する。

$ sudo postmap /etc/postfix/isp_passwd
$ sudo /etc/init.d/postfix restart


生パスワードが書かれているので ips_passwd が外から見えないように権限を設定しておく。

$ sudo chgrp postfix isp_passwd*
$ sudo chmod 640 isp_passwd*
$ ls -la isp_passwd*
-rw-r----- 1 root postfix   163 Mar 29 23:01 isp_passwd
-rw-r----- 1 root postfix 12288 Mar 29 23:01 isp_passwd.db