メールサーバ構築その4(SMTP_AUTH SMTPS STARTTLS編)

2013.06.20 Author: 443

どうもです。443 です。

**独り事**
さて、メルセデスとピレリの秘密裏のタイヤテスト問題
本日、国際FIA裁判が行なわれています。

なんと、メルセデス側に、FIAのレース・ディレクターで安全代表である、
チャーリー・ホワイティングから、タイヤテストの承認メールがあるとのこと。
さて、そのメールは、本物のメールなのでしょうか。

本連載中のどこかで、
メールが正当なメールサーバから送信されているかを精査する仕組みとして、
送信ドメイン認証のアーキテクチャである、DKIMとSPFの機能を実装します。

メールの送信時に、自分側のどの送信サーバから送付するかをDNSサーバに登録し、
受信側のメールサーバに対して検査を受ける機能と、
メールの受信時には送信してきたメールサーバについて検査を行い、
正しいメールサーバから送付されてきたかをチェックする機能です。
**独り事**

さて、今回はpostfixに対して、以下の設定を行います。
・Dovecotを利用した、SMTP_AUTH
・PostfixAdminを想定したMaildir形式による、バーチャルメールボックス
・SMTP Submissionポート587/tcpの有効化
・SMTPS (465/tcp) STARTTLS(587/tcp)の有効化

■ /etc/postfix/main.cf を変更する

# cp -p /etc/postfix/main.cf /etc/postfix/main.cf.orig
# vi /etc/postfix/main.cf

---75行目 "myhostname = mail.example.com" を変更---
myhostname = mail.example.com
-----------------------------------------
---83行目 "mydomain = example.com" に変更---
mydomain = example.com
-----------------------------------------
---99行目 "myorigin = $mydomain" に変更---
myorigin = $mydomain
-----------------------------------------
---113行目 "inet_interfaces = all" に変更---
inet_interfaces = all
----------------------------------------
---263行目 "mynetworks = 127.0.0.0/8" を追加---
mynetworks = 127.0.0.0/8
-----------------------------------------
---293行目 "relay_domains = $mydestination" に変更---
relay_domains = $mydestination
-----------------------------------------
---383行目 "alias_maps = hash:/etc/aliases" に変更---
alias_maps = hash:/etc/aliases
-----------------------------------------
---416行目 "home_mailbox = Maildir/" に変更---
home_mailbox = Maildir/
-----------------------------------------
---659-672行目を追加 バーチャルメールボックス用---
		
# Virtual Host Setting
local_transport = virtual
virtual_transport = virtual
virtual_mailbox_base = /var/vmail
virtual_mailbox_limit = 0
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
-----------------------------------------
--673-675行目 を追加 一旦はメール送受信を無制限にする---

# Maildir Size Unlimit
mailbox_size_limit = 0
message_size_limit = 0
-----------------------------------------

---676-683行目 を追加 VRFYコマンド禁止 接続要求の可否---

# Connextion Settings
disable_vrfy_command = yes
smtpd_banner = $myhostname ESMTP
smtpd_helo_required = yes
smtpd_client_restrictions =
permit_mynetworks,
permit
-----------------------------------------

---684-695行目 追加 転送要求の可否---

# SMTP AUTH Relay Settings
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
permit_auth_destination,
reject
-----------------------

■ /etc/postfix/master.cf の編集

# cp -p /etc/postfix/master.cf /etc/postfix/master.cf.orig
# vi /etc/postfix/master.cf

---16-17k行" を変更----------------------------------------
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
-----------------------------------------------------------
---19-20行" を変更----------------------------------------
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
---------------------------------------------------------------

■ mysql_virtual_alias_maps.cf の作成
リンク の回で作成した、MySQLのPostfix用のユーザ、パスワード、データベース名を指定します。

# vi /etc/postfix/mysql_virtual_alias_maps.cf
-------------------------------------------
user = postfix
password = MySQL_postfixユーザのパスワード
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
-------------------------------------------

■ mysql_virtual_alias_maps.cf のファイルオーナ、パーミッションの変更

# chmod 640 /etc/postfix/mysql_virtual_alias_maps.cf
# chown root:postfix /etc/postfix/mysql_virtual_alias_maps.cf

■ mysql_virtual_domains_maps.cf の作成

# vi /etc/postfix/mysql_virtual_domains_maps.cf
-------------------------------------------
user = postfix
password = MySQL_postfixユーザのパスワード
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'
-------------------------------------------

■ mysql_virtual_domains_maps.cf のファイルオーナ、パーミッションの変更

# chmod 640 /etc/postfix/mysql_virtual_domains_maps.cf
# chown root:postfix /etc/postfix/mysql_virtual_domains_maps.cf

■ /etc/postfix/mysql_virtual_mailbox_maps.cf の作成

# vi /etc/postfix/mysql_virtual_mailbox_maps.cf
-------------------------------------------
user = postfix
password = MySQL_postfixユーザのパスワード
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active='1'
-------------------------------------------

■ /etc/postfix/mysql_virtual_mailbox_maps.cf のファイルオーナ、パーミッションの変更

# chmod 640 /etc/postfix/mysql_virtual_mailbox_maps.cf
# chown root:postfix /etc/postfix/mysql_virtual_mailbox_maps.cf

■ Postfixの起動プロセスを確認

# chkconfig --list | grep postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off

■ Postfixの起動

# service postfix start
Starting postfix: [ OK ]


■ Postfixの起動を確認

# service postfix status
master (pid 1238) is running...
# netstat -anp | grep "master" | grep "0.0.0.0"
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1238/master

■ PostfixへSMTP(25/tcp)接続実施

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.example.com ESMTP
quit
221 2.0.0 Bye
Connection closed by foreign host.

■ Postfix SMTP Submission SMTP_AUTH有効化のため、/etc/postfix/main.cf の変更

# vi /etc/postfix/master.cf
---16-17行目 変更------------------------------------------------
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-----------------------------------------------------------------

---19-20行目 変更------------------------------------------------
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
-----------------------------------------------------------------

■ Postfix SMTP Submission有効化のため、Postfixの再起動

# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]

■ Postfix SMTP Submission SMTP_AUTH有効化のため、Postfixの起動を確認

# service postfix status
master (pid 1366) is running...
# netstat -anp | grep "master" | grep "0.0.0.0"
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 1366/master
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1366/master

■ PostfixへSMTP Submission(587/tcp)接続実施

# telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.example.com ESMTP
ehlo localhost
250-mail.example.com
250-PIPELINING
250-SIZE
250-ETRN
250-AUTH PLAIN LOGIN <--存在すればOK
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

■ Postfix SMTPS STARTTLS化のため、/etc/postfix/main.cf の変更

# vi /etc/postfix/main.cf
---696-701行目 追加-----------------------------------------------

# STARTTLS Settings
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/mail.example.com.cert
smtpd_tls_key_file = /etc/postfix/mail.example.com.key
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
------------------------------------------------------------------

■ Postfix SMTPS STARTTLS化のため、/etc/postfix/master.cf の変更

# vi /etc/postfix/master.cf
---18行目 変更-------------------------------------------------
-o smtpd_tls_security_level=encrypt
---------------------------------------------------------------

---22-26行目 変更----------------------------------------------
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
---------------------------------------------------------------

■ postfix SMTPS STARTTLS化のため、サーバ用秘密鍵作成

# cd /root/
# openssl genrsa -des3 2048 > mail.example.com.key
Generating RSA private key, 2048 bit long modulus
..........................+++
.......+++
e is 65537 (0x10001)
Enter pass phrase: 12345678
Verifying - Enter pass phrase: 12345678

■ Postfix SMTPS STARTTLS有効化のため、サーバ用秘密鍵からパスフレーズを削除

# openssl rsa -in mail.example.com.key -out mail.example.com.key
Enter pass phrase for mail.example.com.key: 12345678
writing RSA key

■ Postfix SMTPS STARTTLS有効化のため、サーバ証明書を作成

# openssl req -new -days 3650 -x509 -key mail.example.com.key -out mail.example.com.cert
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Aichi
Locality Name (eg, city) [Default City]:Nagoya
Organization Name (eg, company) [Default Company Ltd]:Example Company Ltd.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mail.example.com
Email Address []:postmaster@example.com

■ Postfix SMTPS STARTTLS有効化のため、サーバ証明書の有効期限を確認

# openssl x509 -text -noout < mail.example.com.cert
------------------------------------------------------------
Not Before: Jun 20 13:36:54 2013 GMT
Not After : Jun 18 13:36:54 2023 GMT <--10年間利用可能であることを確認する
------------------------------------------------------------

■ Postfix SMTPS STARTTLS有効化のため、サーバ証明書 とサーバ秘密鍵を移動

# mv mail.example.com.cert /etc/postfix/
# chmod 444 /etc/postfix/mail.example.com.cert
# mv mail.example.com.key /etc/postfix/
# chmod 400 /etc/postfix/mail.example.com.key

■ Postfix SMTPS STARTTLS有効化のため、Postfixの再起動

# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]

■ Postfixの起動を確認

# service postfix status
master (pid 1798) is running...
# netstat -anp | grep "master" | grep "0.0.0.0"
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 1798/master
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 1798/master
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1798/master

■ PostfixへSMTPS(465/tcp)接続実施

# telnet localhost 465
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

■ PostfixへのSMTPS(465/tcp) 接続ログを確認

# tail /var/log/maillog
Jun 20 22:43:49 testserver postfix/smtps/smtpd[1821]: connect from localhost.localdomain[127.0.0.1]
Jun 20 22:44:01 testserver postfix/smtps/smtpd[1821]: SSL_accept error from localhost.localdomain[127.0.0.1]: lost connection
Jun 20 22:44:01 testserver postfix/smtps/smtpd[1821]: lost connection after CONNECT from localhost.localdomain[127.0.0.1]
Jun 20 22:44:01 testserver postfix/smtps/smtpd[1821]: disconnect from localhost.localdomain[127.0.0.1]

■ PostfixへSTARTTLS(587/tcp)接続実施

# telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.example.com ESMTP
ehlo localhost
250-mail.example.com
250-PIPELINING
250-SIZE
250-ETRN
250-STARTTLS <--STARTTLSがあることを確認
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

以上でPostfixの設定が一旦は完了しました。
まだまだ、Postfixの設定はQuota DKIM SPF Postgrey tarpittingとありますが、
今回はここまでにしておきます。

次回は、Apache2.2系のVirtualHost FastCGI SuEXEC環境構築を行おうかと思います。

それでは、失礼します。

名古屋のWebシステム開発・ネットワーク構築会社 コネクティボへ