2017年11月24日金曜日

postfix&dovecot設定メモ

Postfixを設定する
次にPostfixの設定ファイルを編集します。
/etc/postfix/main.cfを次のように編集します。

/etc/postfix/main.cf

=============main.cf======================
mydestination = $myhostname, localhost.$mydomain, digihide.local (追加)
==========================================
ここで指定したドメインと同じドメインのメールが到着すると自分宛のメールと認識され、
ローカルディスクへ保存される。

デフォルトのlocalhostの状態では、メールサーバ自身しかPostfixへアクセスできないので
全てのIPアドレスでサービスを提供できるようにするためにallにする。
=============================
inet_interface = all
=============================

バインドするIPアドレスをIPv4に限定させます。
IPv6が無い場合の、とりあえず起動エラーを避けるためです。
=============================
inet_protocols = ipv4
=============================

無条件に外部ドメインへメールをリレーするクライアントを指定します。
localhostが指定されているので、localhostからはどこへでも送信できますが、それ以外のパソコンからはメールを中継することはできません。
なお、localhostだけに制限されていても自分宛て(example.local宛)のメールは全てのアドレスから受信可能ですので問題ありません。
=============================
mynetworks = localhost
=============================

メールボックスの形式です。
CentOSのPostfixはデフォルトはメールスプールへMailBox形式で保存します。
MailBox形式は、全てのファイルを1ファイルへ保存します。
MailDir形式は1メールを1ファイルで保存します。
MailBoxの設定をコメントアウトすると、PostfixはデフォルトのMailDir形式で保存されます。
home_mailbox値を追加設定すると、各ユーザーのホームディレクトリへMailDirを作成することもできます。
=============================
#home_mailbox = MailBox (コメントアウトすると、MailDir形式になる)

=============================


次のmail_spool_directoryもメールボックスの形式を左右します。
==============================
mail_spool_directory = /var/mail/  (末尾へスラッシュを加える
==============================
/var/mail/以下へユーザごとにmaildir形式で保存するよう設定します。
末尾にスラッシュを付けておくと、ディレクトリが無い場合にユーザ名で自動作成してくれます。
例えばuser1のメールを受信したときディレクトリがなければ、/var/mail/user1が作成されます。
スラッシュを付けないと、MailBox形式で保存されます。


◻️追加のパラメータ
====================
mydomain = example.local
myoriginal = $mydomain
====================
検証レベルの動作には影響しません。
$mydomainとして変数として参照されたり、他のパラメータのデフォルト値として
採用されることがあります。


◻️メールアカウントを作成する
メールサーバでメールを受け付けるためには、宛先となるメールアカウントが必要です。
メールアカウントとは、CentOS上のユーザアカウントです。

#useradd user1 -s /sbin/nologin
#passwd user1

(ポイント)
メールを受信するためだけでログイン権限を与えるのは危険なので
ログインできない制限アカウントを作ります。
パスワードも設定します。これがメール受信時のパスワードになります。

(確認してみる!)
外部からexample.local宛のメールを受け付け、/var/mailに保存されることを確認しましょう。


◻️メールディレクトリを自動作成できるようにする
/var/mailディレクトリへの書き込み権が与える必要がある。
(※MailBox形式の場合、/var/spool/mailの設定を変更しなくてもメールファイルを保存可能です)

通常、mailディレクトリは、所有者がroot、グループがmailとなっています。
/var/mail ディレクトリの実体は /var/spool/mail にあります。
(以下のコマンドで所有者とアクセス権を確認します。)

#ll /var/spool/mail

と入力すると。デフォルトのアクセス権は「drwxrwxr-x root mail」となっていると思われます。
メール user1@example.localが着信すると、user1の権限でディレクトリを作成しようとします。
rootユーザとmailグループ以外のユーザには書き込み権(w)がないので、失敗します。
以下のコマンドで、一般ユーザにもディレクトリ作成権利を与えます。

#chmod 777 /var/spool/mail

これで、メールが着信すると、自動でメールディレクトリが作成されます。
ただしすでにMailbox形式のファイルが作成されていると、重複によりメールディレクトリの作成に失敗します。先に削除しておきましょう。

※ディレクトリの権限を777にすることで、注意すべきがあります、
/var/spool./mailディレクトリが777となっているため、このディレクトリ配下にあるファイルは一般ユーザでも 削除可能です。ただし以下2点により現実には問題になりません。
  ・ファイルを削除できても、メールディレクトリは閲覧・削除できないので問題にはなりません。
  ・純粋なメールサーバなら、管理者かそれに準ずるユーザしかログインできません。

この「/var/mail以下に全メールディレクトリを集める」運用方式の唯一の欠点は、メールアカウントを削除してもメールディレクトリが残ってしまう点です。
メールユーザを削除したら、メールディレクトリも忘れず削除します。
/home/user/maildir で管理するシステムの場合、ユーザを削除するとホームディレクトリも一緒に削除してくれるので、ゴミが残るということはありません。


◻️TelnetでSMTPの動作を確かめる
telnetでSMTPのメールを送信するのは面倒ですが、テストのためにはよく使います。
telnetのメール送信はSMTPの動作不良を確認することが可能。

「telnet SMTPサーバアドレス 25」として直接SMTPサービスにログインし
SMTPコマンドを実行します。
(太字部分が入力内容です。)
===============================
220 localhost.localdomain ESMTP Postfix
helo localhost 
250 localhost.localdomain
mail from: user1@example.local
250 2.1.0 Ok
rcpt to: user1@example.local
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
helo postfix
.
250 2.0.0 Ok: queued as 0625633CC90
quit
221 2.0.0 Bye
===============================


◻️メールサーバのuser1ディレクトリにファイルが増えていることを確認する。
#ls /var/mail/user1

(ポイント)
SMTPの仕事は、受信したメールをディレクトリにファイルとして保存するだけです。
パソコンがサーバからメールを取り出すには、POPサービスを使用します。



◻️Dovecotをインストールする。

#yum install dovecot


◻️/etc/dovecot/dovecot.conf
=========================
listen = * #IPv6へのバインドを止め、IPv4へのみバインドする
=========================
(ポイント)
IPv6環境が構成されていない場合、ここで起動エラーを出力します。


◻️/etc/dovecot/conf.d/10-mail.conf

メールスプールの形式(MailDirからMBoxか)に合わせて設定します。
Postfixがメールを保存している形式に合わせます。

●MailDir形式の場合(1メール1ファイル)
mail_location = maildir:/var/mail/%u

/var/mail/ユーザ名で保存されているメールディレクトリ式のメールを取り出す設定です。
各ユーザーのホームディレクトリにメールディレクトリが保存されている場合は、
mail_location = maildir:~/Maildir と設定します。


●MailBox形式の場合
(全メール1ファイル・Postfixのデフォルト)

mail_location = mbox:/var/empty:INBOX=/var/mail/%u:INDEX=MEMORY

なおIMAPを用いる場合はメールボックス以外に各ユーザーごとにディレクトリが必要です。
通常は以下のようにホームディレクトリへまとめて保存させます。
mail_location = mbox:~/mail:INBOX=/var/mail/%u
設定の意味は「基本ディレクトリはユーザーのホームフォルダへmailとして保存し、メール本文(INBOX)は/var/mailに保存します」です。


/etc/dovecot/conf.d/10-auth.conf
=========================
disable_plaintext_auth = no   #yesからnoへ変更
=========================
POP3通信時の平文の認証を許可します。
デフォルトでは暗号化されたパスワードしか受け付けないので、POP3が動作しません。


/etc/dovecot/conf.d/10-ssl.conf
=========================
#ssl = required #コメントアウト
=========================
いつの頃からか、プレーンテキストでPOP3通信しようとすると、TLSやSSLなどの暗号化が強要されます。
ここでSSL通信強制を無効化しておきます。


[Postfixの設定]

◻️smtps(SMTP-Auth over SSL)を有効化
vi /etc/postfix/master.cf
======== master.cf(編集前) ===================================
#smtps     inet  n       -       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_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
=========================================================================
 
======== master.cf(編集後)====================================
smtps     inet  n       -       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_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
================================================


◻️追加項目
# VRFYコマンドの使用を禁止する
disable_vrfy_command = yes

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

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

# 接続元の制限(スパムメール対策)
smtpd_client_restrictions =
    check_client_access hash:/etc/postfix/access
    reject_rbl_client zen.spamhaus.org
    reject_non_fqdn_sender
    reject_unknown_sender_domain

# エンベロープアドレス(MAIL FROM)による制限(スパムメール対策)
smtpd_sender_restrictions =
reject_rhsbl_sender zen.spamhaus.org
reject_unknown_sender_domain


########## SMTP-Auth関連 ##########
# SASL認証を有効化
smtpd_sasl_auth_enable = yes

# Dovecot SASL ライブラリを指定
smtpd_sasl_type = dovecot

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

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


########## TLS/SSL関連 ##########
# TLSを有効化
smtpd_use_tls = yes

# 宛先のメールサーバがTLSに対応していれば、通信を暗号化する
smtp_tls_security_level = may

# サーバ証明書と秘密鍵を指定
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.digihide.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.digihide.com/privkey.pem

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

# 暗号に関する情報を "Received:" メッセージヘッダに含める
smtpd_tls_received_header = yes

# 接続キャッシュファイルの指定
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

# キャッシュの保持時間の指定
smtpd_tls_session_cache_timeout = 3600s

# 認証を通過したものはリレーを許可する(permit_sasl_authenticated
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated

    reject_unauth_destination
====================================================



[Dovecot設定]

受信プロトコルの設定
vim /etc/dovecot/dovecot.conf
==========dovecot.conf===============
#protocols = imap pop3 lmtp
 
protocols = imap pop3
============================================

◻️暗号化を使う imaps と pop3s を有効にして
平文で通信する imap と pop3 は「port = 0」を設定し無効にする。
==========10-master.conf===================
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
  }
}
==================================================================


◻️Dovecot SASL ライブラリの認証ソケットファイルを指定
vi /etc/dovecot/conf.d/10-master.conf
=============10-master.conf====================
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        
  }
}
============================================

◻️認証方式の設定 
※平文パスワードを許可していますが、SSL/TLSで暗号化されますので問題ありません。
vi /etc/dovecot/conf.d/10-auth.conf
==========10-auth.conf========================
#disable_plaintext_auth = yes
 
disable_plaintext_auth = no

auth_mechanisms = plain
 
auth_mechanisms = plain login
=====================================================


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

#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem
 
ssl_cert = </etc/letsencrypt/live/mail.digihide.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.digihide.com/privkey.pem
====================================================


◻️メールボックスの場所を指定
vi /etc/dovecot/conf.d/10-mail.conf
==============10-mail.conf==================
#mail_location = 
 
mail_location = maildir:~/Maildir
===============================================

◻️ログの出力先を変更
vi /etc/dovecot/conf.d/10-logging.conf
=============10-logging.conf===============
#log_path = syslog
 
log_path = /var/log/dovecot/dovecot.log
=================================================


◻️ログの出力先作成しておきます
mkdir /var/log/dovecot



[postfixログの設定(syslogサーバー関連)]

1)出力先の変更
vi /etc/rsyslog.conf
========rsyslog.conf=======
mail.*                                                  -/var/log/maillog
                       
mail.*                                                  -/var/log/mail/maillog
============================


◻️syslog再起動
systemctl restart rsyslog

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



ログローテーション設定
ログファイルの保存期間は60日と仮定する。
vi /etc/logrotate.d/syslog
==================syslog=============
/var/log/maillog   <——削除する。
========================================


vi /etc/logrotate.d/maillog
==========maillog=================
/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

=====確認メッセージ================
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
=========dovecot===============
/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

===== 確認メッセージ===============
rotating pattern: /var/log/dovecot/dovecot.log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
==========================================



◻️アカウント作成
今回、test-user1というアカウント作成してみる。
===========================
useradd -s /sbin/nologin test-user1
passwd test1234
ユーザー test-user1のパスワードを変更
新しいパスワード: 
新しいパスワードを再入力してください: 
passwd: 全ての認証トークンが正しく更新出来る。
===============================
useraddについては、メール専用のアカウント作成なので
一般のアカウントとしてのログインを拒否にした設定。


<参照ページ>
https://blog.apar.jp/linux/3937/

0 件のコメント:

コメントを投稿

php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...