2017.04

Debian SMTP IMAP over SSL/TLS [MailServerⅣ]

メールサーバー暗号化通信を設定する

### First,please visit -----------
Introduction & INDEX コチラから
------------------------------ ###

オフィスにLAN専用のメールサーバーを立てます。
今回は、SMTP,IMAPにoverSSL/TLSを設定します。
前章Ⅳでサーバー証明書がすでに用意されていることを前提にしています。

■ INDEX
Postfixで送信[SMTP]サーバー : MailServer-Ⅰ
Dovecotで受信[IMAP]サーバー : MailServer-Ⅱ
Mailユーザー作成登録とクライアント側のメーラー設定: MailServer-Ⅲ
プライベート認証局によるサーバー証明書発行: MailServer-Ⅳ
SMTP/IMAP OverSSL/TLSで暗号化通信: MailServer-Ⅴ
ClamSMTP Mailをリアルタイムウィルススキャン: MailServer-Ⅵ
S/MIMEでセキュアなメール環境: MailServer-Ⅶ

< 環境 >
MAIL_LAN

■ 設定手順
   1.Postfix 編集
   2.Dovecot 編集
   3.クライアントメーラー設定

[ 1 ] Postfix 編集

○ ファイル: main.cf
$ sudo vi /etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

#smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_banner = $myhostname ESMTP
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

myhostname = miyagi.lan.mail
mydomain = lan.mail
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, 192.168.1.0/24
home_mailbox = Maildir/
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mailbox_size_limit = 50000000
message_size_limit = 3000000

smtpd_recipient_limit = 30
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_auth_enable = yes
smtpd_client_restrictions = permit_mynetworks,reject
smtpd_helo_restrictions = reject_unknown_client
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination,reject

relayhost = $mydomain
relay_domains = $mydestination
default_transport = error
relay_transport = error

## ssl/tls parameters 以下を追記する
smtpd_tls_cert_file = /etc/ssl/CA/certs/miyagi.lan.mail.pem
smtpd_tls_key_file = /etc/ssl/CA/private/miyagi.lan.mail.key
smtpd_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

▼ パラメータ解説を展開

○ ファイル: master.cf
$ sudo vi /etc/postfix/master.cf

submission   inet   n   -   -   -   -   smtpd
# -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 -o milter_macro_daemon_name_OPIGINATING
smtps        inet   n   -   -   -   -   smtpd
# -o syslog_name_postfix_smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 -o milter_macro_daemon_name_OPIGINATING

[ 2 ] Dovecot 編集

○ ファイル: 10-ssl.conf
$ sudo vi /etc/dovecot/conf.d/10-ssl.conf

##
## SSL settings
##

# SSL/TLS support: yes, no required.
#ssl = no
#ssl = required
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
## 前章で発行した証明書を指定する
ssl_cert = </etc/ssl/CA/certs/miyagi.lan.mail.pem
ssl_key = </etc/ssl/CA/private/miyagi.lan.mail.key

## 以下略

○ ファイル: 10-auth.conf
$ sudo vi /etc/dovecot/conf.d/10-auth.conf

##
## Authentication processes
##

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# maches the local IP (ie. you're connecting from the samne computer), the
# connection is considered secure and plaintext authentication is allowed.
## SSL/TLSが使われていない限りLOGINコマンドと他の全てのPlainText認証を無効にする
# See slso ssl=required setting.
#disable_plaintext_auth = no
disable_plaintext_auth = yes

○ ファイル: 10-master.conf
$ sudo vi /etc/dovecot/conf.d/10-master.conf

## 冒頭略 17行目辺りから
service imap-login {
  inet_listener imap {
   #iport = 143
  }
  inet_listener imaps {
   port = 993
   ssl = yes
  }

## 中略 95行目辺りから
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

## 以下省略

再起動し編集内容を反映させる。
$ sudo systemctl postfix.service dovecot.service saslauthd.service

IPTABLES(ファイアーウォール)の許可
$ sudo iptables -A INPUT -s 192.168.1.31 -p tcp --dport 465 -j ACCEPT
$ sudo iptables -A INPUT -s 192.168.1.31 -p tcp --dport 993 -j ACCEPT
---SSL/TLS通信に限定し平文(Plain text)認証リスクを除くには、Port: 143,587を取り消す
---OUTPUTも適切に
$ sudo iptables -D INPUT -s 192.168.1.31 -p tcp --dport 143 -j ACCEPT
$ sudo iptables -D INPUT -s 192.168.1.31 -p tcp --dport 587 -j ACCEPT

[ 3 ] クライアントのメーラー設定

受信[IMAP]
  ポート: 993
  ssl/tls 通常のパスワード設定
送信[smtp]
  ポート: 465
  ssl/tls 通常のパスワード設定

自分宛にテストメールを送受信すると、セキュリティ例外の追加の画面が表示される。
サーバー URL: 192.168.1.101:465(993)
"不明な証明書です"とある。正式なCA署名入りのサーバー証明書ではなく自己署名のため。
次回以降にもこの例外を有効にする--->チェック
セキュリティ例外を承認--->クリック
初回は接続をはねられるが、再起動の後、次回以降は接続できる。

接続がうまくできない場合は、サーバー側でログを調べる。
imap: /var/log/dovecot/dovecot.log
smtp: /var/log/mail*


■ まとめ
 本章-V-までの設定で、メールを安全に受送信するためのSSL/TLS暗号化通信の基礎ができました。 通信自体を暗号化するため、クライアントメーラーで認証方式が[通常(Plain text)のパスワード設定]でも問題はないとされます。 とは言っても、メールを違った相手に誤って送ってしまった場合には、メール本文や添付ファイルを 見られてしまうということがあります。メールの内容そのものを暗号化している訳ではないからです。
 その点を踏まえて第Ⅶ章では、よりセキュアなS/MIME環境を試みます。


■ おまけ   (少しクドいです。読み飛ばしてもらっても。。。)
< 困ったケース >
Q: "disable_plaintext_aut = " と "ssl = yes no required"の関係ってどーなっての?
    Web情報拾っても、よく解かんね〜し。。。
A: BAD HOW TOもあるようですね。"Dovwcot WiKi"から意訳ですが。。。

▼ 読んでいただげるならクリックをどうぞ

*Dovecot SSL configurationより(典拠 https://wiki.dovecot.org)

Copyright(C) green-pen miyagi