MAILサーバ設定

メールサーバ構築メモ【CentOS6?.5+Postfix+Dovecot TLS/SSL】

https://blog.apar.jp/linux/678/

サーバー用秘密鍵・自己証明書の作成(TLS/SSL用)

Postfix Dovecot 共通で使うサーバ証明書を作成します。今回は自己証明書を使って設定しますが、正規の認証局から取得するのが望ましいです。

・作成用ディレクトリに移動します cd /etc/pki/tls/certs/

・オリジナルのMakeファイルをバックアップします cp -ip Makefile Makefile.org

・サーバー用証明書有効期限を1年から10年に変更します sed -i 's/365/3650/g' Makefile

・サーバー用秘密鍵・自己証明書の作成 make mail.apar.jp.crt

---(以下を入力)--------------------------- Enter pass phrase:1234(←表示されません) Verifying – Enter pass phrase:1234(←表示されません) Enter pass phrase for server.key:1234(←表示されません) Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:<空エンター> Locality Name (eg, city) [Newbury]:<空エンター> Organization Name (eg, company) [My Company Ltd]:<空エンター> Organizational Unit Name (eg, section) []:<空エンター> Common Name (eg, your name or your server’s hostname) []:mail.apar.jp Email Address []:<空エンター> 1 2 3 4 5 6 7 8 9 10 11 ---(以下を入力)--------------------------- Enter pass phrase:1234(←表示されません) Verifying – Enter pass phrase:1234(←表示されません) Enter pass phrase for server.key:1234(←表示されません) Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:<空エンター> Locality Name (eg, city) [Newbury]:<空エンター> Organization Name (eg, company) [My Company Ltd]:<空エンター> Organizational Unit Name (eg, section) []:<空エンター> Common Name (eg, your name or your server’s hostname) []:mail.apar.jp Email Address []:<空エンター> ・サーバー用秘密鍵からパスワード削除 openssl rsa -in mail.apar.jp.key -out mail.apar.jp.key

---(以下を入力)--------------------------- Enter pass phrase for server.key:1234(←表示されません) 1 2 ---(以下を入力)--------------------------- Enter pass phrase for server.key:1234(←表示されません) ・サーバー用秘密鍵の場所を変更 mv /etc/pki/tls/certs/mail.apar.jp.key /etc/pki/tls/private/

postconf コマンド

Postfixを設定するにあたって、postconf コマンドでパラメータを確認しながら進めていくのがよいでしょう。

Postfixの設定パラメータは main.cf に記述されている以外にも多数あります。全ての設定パラメータを確認するには postconf コマンドを実行します。

  1. postconf

2bounce_notice_recipient = postmaster access_map_defer_code = 450 access_map_reject_code = 554 address_verify_default_transport = $default_transport address_verify_local_transport = $local_transport address_verify_map = (以下省略) 1 2 3 4 5 6 7 8

  1. postconf

2bounce_notice_recipient = postmaster access_map_defer_code = 450 access_map_reject_code = 554 address_verify_default_transport = $default_transport address_verify_local_transport = $local_transport address_verify_map = (以下省略) postconf <パラメータ名> とすれば特定の設定のみを表示できます。

  1. postconf readme_directory

readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES 1 2

  1. postconf readme_directory

readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES また、postconfに「-d」オプションをつけるデフォルト値が表示され、「-n」オプションをつけるとデフォルト値と異なるパラメータだけが表示されます。

  1. postconf -d readme_directory

readme_directory = no

  1. postconf -n

alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases command_directory = /usr/sbin (以下省略) 1 2 3 4 5 6 7 8

  1. postconf -d readme_directory

readme_directory = no


  1. postconf -n

alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases command_directory = /usr/sbin (以下省略) Postfix の設定

Postfixで SMTP-Authを設定するには、SASLライブラリが必要になります。デフォルトでインストールされている Cyrus-SASL を使うことが多いのですが、今回は Dovecot SASLライブラリを使います。この Dovecot SASLライブラリを使うことで、受信アカウントのパスワードとSMTP-Authのパスワードが一元管理できます。

・念のため、元の設定ファイルをキープしておきます. cp -ip /etc/postfix/main.cf /etc/postfix/main.cf.org

・Postfixの設定ファイルを編集(なかなか沢山あります) vi /etc/postfix/main.cf

Shell

  1. このメールサーバのホスト名(FQDN)を指定
  2. myhostname = host.domain.tld

 ↓ myhostname = mail.apar.jp

  1. このメールサーバのドメイン名を指定
  2. mydomain = domain.tld

 ↓ mydomain = apar.jp

  1. メールアドレスを「ユーザ名@ドメイン名」の形式にする
  2. myorigin = $mydomain

 ↓ myorigin = $mydomain

  1. 全てのホストからメールを受信する

inet_interfaces = localhost  ↓ inet_interfaces = all

  1. ipv6を無効にする

inet_protocols = all  ↓ inet_protocols = ipv4

  1. mydomain = で指定したドメイン宛のメールを受信する

mydestination = $myhostname, localhost.$mydomain, localhost  ↓ mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

  1. 存在しないメールアドレス(ユーザ)宛のメールの受信を拒否する
  2. local_recipient_maps = proxy:unix:passwd.byname $alias_maps

 ↓ local_recipient_maps = proxy:unix:passwd.byname $alias_maps

  1. 中継を許可する宛先ドメインを指定
  2. relay_domains = $mydestination

 ↓ relay_domains = $mydestination

  1. 転送サーバを使わない
  2. relayhost = [an.ip.add.ress]

 ↓ relayhost =

  1. メールの格納フォーマットの指定
  2. home_mailbox = Maildir/

 ↓ home_mailbox = Maildir/

  1. 不要な情報を公開しない
  2. smtpd_banner = $myhostname ESMTP $mail_name

 ↓ smtpd_banner = $myhostname ESMTP

---(下記を最終行に追加)---------------------------

  1. VRFYコマンドの使用を禁止する

disable_vrfy_command = yes

  1. MailBoxの最大サイズの指定
  2. メールボックスがMaildir形式のためこの設定は無視されますが「message_size_limit」との兼ね合いのため設定しておきます

mailbox_size_limit = 204800000

  1. 受信メールサイズの制限「mailbox_size_limit」より少ない値を設定してください

message_size_limit = 5120000

  1. 接続元の制限(スパムメール対策)

smtpd_client_restrictions =

   check_client_access hash:/etc/postfix/access
   reject_rbl_client zen.spamhaus.org
   reject_rbl_client all.rbl.jp
   reject_non_fqdn_sender
   reject_unknown_sender_domain
  1. エンベロープアドレス(MAIL FROM)による制限(スパムメール対策)

smtpd_sender_restrictions =

reject_rhsbl_sender zen.spamhaus.org
reject_unknown_sender_domain
                    1. SMTP-Auth関連 ##########
  1. SASL認証を有効化

smtpd_sasl_auth_enable = yes

  1. Dovecot SASL ライブラリを指定

smtpd_sasl_type = dovecot

  1. Dovecot SASL ライブラリの認証ソケットファイル /var/spool/postfix/ からの相対パスで記述

smtpd_sasl_path = private/auth

  1. 古いバージョンの AUTH コマンド (RFC 2554) を実装した SMTP クライアントとの相互運用性を有効にする

broken_sasl_auth_clients = yes

                    1. TLS/SSL関連 ##########
  1. TLSを有効化

smtpd_use_tls = yes

  1. サーバ証明書と秘密鍵を指定

smtpd_tls_cert_file = /etc/pki/tls/certs/mail.apar.jp.crt smtpd_tls_key_file = /etc/pki/tls/private/mail.apar.jp.key

  1. TLSログレベルの設定
  2. 0:出力しない 1:TLSハンドシェイクと証明書情報 2:TLSネゴシエーションの全て

smtpd_tls_loglevel = 1

  1. 接続キャッシュファイルの指定

smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

  1. キャッシュの保持時間の指定

smtpd_tls_session_cache_timeout = 3600s

  1. 認証を通過したものはリレーを許可する(permit_sasl_authenticated)

smtpd_recipient_restrictions =

   permit_mynetworks
   permit_sasl_authenticated
   reject_unauth_destination

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

  1. このメールサーバのホスト名(FQDN)を指定
  2. myhostname = host.domain.tld

 ↓ myhostname = mail.apar.jp


  1. このメールサーバのドメイン名を指定
  2. mydomain = domain.tld

 ↓ mydomain = apar.jp


  1. メールアドレスを「ユーザ名@ドメイン名」の形式にする
  2. myorigin = $mydomain

 ↓ myorigin = $mydomain


  1. 全てのホストからメールを受信する

inet_interfaces = localhost  ↓ inet_interfaces = all


  1. ipv6を無効にする

inet_protocols = all  ↓ inet_protocols = ipv4


  1. mydomain = で指定したドメイン宛のメールを受信する

mydestination = $myhostname, localhost.$mydomain, localhost  ↓ mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain


  1. 存在しないメールアドレス(ユーザ)宛のメールの受信を拒否する
  2. local_recipient_maps = proxy:unix:passwd.byname $alias_maps

 ↓ local_recipient_maps = proxy:unix:passwd.byname $alias_maps


  1. 中継を許可する宛先ドメインを指定
  2. relay_domains = $mydestination

 ↓ relay_domains = $mydestination


  1. 転送サーバを使わない
  2. relayhost = [an.ip.add.ress]

 ↓ relayhost =


  1. メールの格納フォーマットの指定
  2. home_mailbox = Maildir/

 ↓ home_mailbox = Maildir/


  1. 不要な情報を公開しない
  2. smtpd_banner = $myhostname ESMTP $mail_name

 ↓ smtpd_banner = $myhostname ESMTP


---(下記を最終行に追加)---------------------------

  1. VRFYコマンドの使用を禁止する

disable_vrfy_command = yes


  1. MailBoxの最大サイズの指定
  2. メールボックスがMaildir形式のためこの設定は無視されますが「message_size_limit」との兼ね合いのため設定しておきます

mailbox_size_limit = 204800000


  1. 受信メールサイズの制限「mailbox_size_limit」より少ない値を設定してください

message_size_limit = 5120000


  1. 接続元の制限(スパムメール対策)

smtpd_client_restrictions =

   check_client_access hash:/etc/postfix/access
   reject_rbl_client zen.spamhaus.org
   reject_rbl_client all.rbl.jp
   reject_non_fqdn_sender
   reject_unknown_sender_domain
  1. エンベロープアドレス(MAIL FROM)による制限(スパムメール対策)

smtpd_sender_restrictions =

reject_rhsbl_sender zen.spamhaus.org
reject_unknown_sender_domain

                    1. SMTP-Auth関連 ##########
  1. SASL認証を有効化

smtpd_sasl_auth_enable = yes


  1. Dovecot SASL ライブラリを指定

smtpd_sasl_type = dovecot


  1. Dovecot SASL ライブラリの認証ソケットファイル /var/spool/postfix/ からの相対パスで記述

smtpd_sasl_path = private/auth


  1. 古いバージョンの AUTH コマンド (RFC 2554) を実装した SMTP クライアントとの相互運用性を有効にする

broken_sasl_auth_clients = yes


                    1. TLS/SSL関連 ##########
  1. TLSを有効化

smtpd_use_tls = yes


  1. サーバ証明書と秘密鍵を指定

smtpd_tls_cert_file = /etc/pki/tls/certs/mail.apar.jp.crt smtpd_tls_key_file = /etc/pki/tls/private/mail.apar.jp.key


  1. TLSログレベルの設定
  2. 0:出力しない 1:TLSハンドシェイクと証明書情報 2:TLSネゴシエーションの全て

smtpd_tls_loglevel = 1


  1. 接続キャッシュファイルの指定

smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache


  1. キャッシュの保持時間の指定

smtpd_tls_session_cache_timeout = 3600s


  1. 認証を通過したものはリレーを許可する(permit_sasl_authenticated)

smtpd_recipient_restrictions =

   permit_mynetworks
   permit_sasl_authenticated
   reject_unauth_destination

・smtps(SMTP-Auth over SSL)を有効化 vi /etc/postfix/master.cf

Shell

---(下記を変更)---------------------------

  1. smtps inet n - n - - smtpd
  2. -o smtpd_tls_wrappermode=yes
  3. -o smtpd_sasl_auth_enable=yes
  4. -o smtpd_client_restrictions=permit_sasl_authenticated,reject

 ↓ smtps inet n - n - - smtpd

 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject

1 2 3 4 5 6 7 8 9 10 ---(下記を変更)---------------------------

  1. smtps inet n - n - - smtpd
  2. -o smtpd_tls_wrappermode=yes
  3. -o smtpd_sasl_auth_enable=yes
  4. -o smtpd_client_restrictions=permit_sasl_authenticated,reject

 ↓ smtps inet n - n - - smtpd

 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject

・ルックアップテーブルの作成 postmap /etc/postfix/access

・設定に誤りがないかチェック(なにも表示されなければOKです) postfix check

・Postfixを再起動 service postfix restart

・自動起動の設定 chkconfig postfix on

Dovecot(Version2)の設定

バージョン1では設定ファイは1つでしたが、Dovecotバージョン2では /etc/dovecot/conf.d/ 以下に設定ファイルが分かれているのが特徴です。これには賛否がありそうですね(^^;)

・受信プロトコルの設定 vi /etc/dovecot/dovecot.conf

Shell

  1. protocols = imap pop3 lmtp

 ↓ protocols = imap pop3 1 2 3

  1. protocols = imap pop3 lmtp

 ↓ protocols = imap pop3 バージョン1では protocols に「imaps」や「pop3s」と書けましたが、TLS/SSLを使うか否かは次の「10-master.conf」で設定します。

vi /etc/dovecot/conf.d/10-master.conf

Shell

service imap-login {

 inet_listener imap {
   #port = 143
 ↓
   port = 0
 }
 inet_listener imaps {
   #port = 993
   #ssl = yes
 ↓
   port = 993
   ssl = yes
 }

}

service pop3-login {

 inet_listener pop3 {
   #port = 110
 ↓
   port = 0
 }
 inet_listener pop3s {
   #port = 995
   #ssl = yes
 ↓
   port = 995
   ssl = yes
 }

} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 service imap-login {

 inet_listener imap {
   #port = 143
 ↓
   port = 0
 }
 inet_listener imaps {
   #port = 993
   #ssl = yes
 ↓
   port = 993
   ssl = yes
 }

}


service pop3-login {

 inet_listener pop3 {
   #port = 110
 ↓
   port = 0
 }
 inet_listener pop3s {
   #port = 995
   #ssl = yes
 ↓
   port = 995
   ssl = yes
 }

} 暗号化をしない imap と pop3 を使えないようにするため「port = 0」と設定するのがミソです。なかなかのセンスですね。

・Dovecot SASL ライブラリの認証ソケットファイルを指定 vi /etc/dovecot/conf.d/10-master.conf (場所が分かりづらいかも87行目あたりです)

Shell

service auth {  (略)

 # Postfix smtp-auth
 #unix_listener /var/spool/postfix/private/auth {
 #  mode = 0666
 #}

 ↓

 unix_listener /var/spool/postfix/private/auth {
   mode = 0660
   user = postfix
   group = postfix
 }

} 1 2 3 4 5 6 7 8 9 10 11 12 13 service auth {  (略)

 # Postfix smtp-auth
 #unix_listener /var/spool/postfix/private/auth {
 #  mode = 0666
 #}

 ↓

 unix_listener /var/spool/postfix/private/auth {
   mode = 0660
   user = postfix
   group = postfix
 }

} この設定がなかなか分からず難儀しました。こんなときは公式サイトです。 ▽ Postfix and Dovecot SASL http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL

・認証方式の設定  vi /etc/dovecot/conf.d/10-auth.conf

Shell

  1. disable_plaintext_auth = yes

 ↓ disable_plaintext_auth = no

auth_mechanisms = plain  ↓ auth_mechanisms = plain login 1 2 3 4 5 6 7

  1. disable_plaintext_auth = yes

 ↓ disable_plaintext_auth = no


auth_mechanisms = plain  ↓ auth_mechanisms = plain login ※平文パスワードを許可していますが、TLS/SSLで暗号化されますので問題ありません。

・TLS/SSLの有効化とサーバ証明書と秘密鍵を指定 vi /etc/dovecot/conf.d/10-ssl.conf

Shell

  1. ssl = yes

 ↓ ssl = yes

  1. ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
  2. ssl_key = </etc/pki/dovecot/private/dovecot.pem

 ↓ ssl_cert = </etc/pki/tls/certs/mail.apar.jp.crt ssl_key = </etc/pki/tls/private/mail.apar.jp.key 1 2 3 4 5 6 7 8 9

  1. ssl = yes

 ↓ ssl = yes


  1. ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
  2. ssl_key = </etc/pki/dovecot/private/dovecot.pem

 ↓ ssl_cert = </etc/pki/tls/certs/mail.apar.jp.crt ssl_key = </etc/pki/tls/private/mail.apar.jp.key ・メールボックスの場所を指定 vi /etc/dovecot/conf.d/10-mail.conf

Shell

  1. mail_location =

 ↓ mail_location = maildir:~/Maildir 1 2 3

  1. mail_location =

 ↓ mail_location = maildir:~/Maildir ・ログの出力先を変更 vi /etc/dovecot/conf.d/10-logging.conf

Shell

  1. log_path = syslog

 ↓ log_path = /var/log/dovecot/dovecot.log 1 2 3

  1. log_path = syslog

 ↓ log_path = /var/log/dovecot/dovecot.log ・ログの出力先作成しておきます mkdir /var/log/dovecot

・Dovecotを起動 service dovecot start

・自動起動の設定 chkconfig dovecot on

・認証ソケットファイルが作成されているのを確認します ls -F /var/spool/postfix/private/auth

---(下記表示があればOK)--------------------------- /var/spool/postfix/private/auth = 1 2 ---(下記表示があればOK)--------------------------- /var/spool/postfix/private/auth = ログのローテーション設定

ログの設定は必須ではありませんが、メールサーバの運用ではログを参照することが多かと思いますので、運用しやすいように設定しておくのをお勧めします。

下の設定では1日ごとにログファイルを分けて、ファイル名に日付が付くように設定しています。ログファイルの保存期間は60日としていますが、運用ルールに合わせて設定してください。

Postfixログの設定 ・出力先ディレクトリ作成 mkdir /var/log/mail

・出力先の変更 vi /etc/rsyslog.conf

Shell

mail.* -/var/log/maillog                        ↓ mail.* -/var/log/mail/maillog 1 2 3 mail.* -/var/log/maillog                        ↓ mail.* -/var/log/mail/maillog ・syslog再起動 service rsyslog restart

・不要なログを削除 rm -f /var/log/maillog*

・ログローテーション設定 vi /etc/logrotate.d/syslog

Shell

---(下記を削除)--------------------------- /var/log/maillog ------------------------------ 1 2 3 ---(下記を削除)--------------------------- /var/log/maillog ------------------------------ vi /etc/logrotate.d/maillog

Shell

---(下記を追加)--------------------------- /var/log/mail/maillog {

   daily
   missingok
   dateext
   rotate 60
   sharedscripts
   postrotate
       /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
   endscript

} 1 2 3 4 5 6 7 8 9 10 11 ---(下記を追加)--------------------------- /var/log/mail/maillog {

   daily
   missingok
   dateext
   rotate 60
   sharedscripts
   postrotate
       /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
   endscript

} ・確認します logrotate -dv /etc/logrotate.d/maillog  ↓下記のような表示であればOKです

rotating pattern: /var/log/mail/maillog after 1 days (60 rotations) empty log files are rotated, old logs are removed 1 2 rotating pattern: /var/log/mail/maillog after 1 days (60 rotations) empty log files are rotated, old logs are removed


Dovecotログの設定 vi /etc/logrotate.d/dovecot

Shell

---(下記を追加)--------------------------- /var/log/dovecot/dovecot.log {

   daily
   missingok
   dateext
   rotate 60
   sharedscripts
   postrotate
       /bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true
   endscript

} 1 2 3 4 5 6 7 8 9 10 11 ---(下記を追加)--------------------------- /var/log/dovecot/dovecot.log {

   daily
   missingok
   dateext
   rotate 60
   sharedscripts
   postrotate
       /bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true
   endscript

} ・確認します logrotate -dv /etc/logrotate.d/dovecot  ↓下記のような表示であればOKです

rotating pattern: /var/log/dovecot/dovecot.log after 1 days (60 rotations) empty log files are rotated, old logs are removed 1 2 rotating pattern: /var/log/dovecot/dovecot.log after 1 days (60 rotations) empty log files are rotated, old logs are removed

Last modified:2015/10/07 00:36:04
Keyword(s):
References: