メールサーバ構築その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システム開発・ネットワーク構築会社 コネクティボへ