狐の社

覚書とかとか

Postfix + Dovecotでメールサーバ構築

メールサーバを構築したので、その時の操作記録
ついでに、LetsEncryptでTLS化もしました。
MDAで使用するプロトコルimapです。 (個人での利用ならPOP3は不要?)

環境

※ 今回設定ファイルが存在するディレクトリは /usr/local/etc 以下となる。

1. FreeBSDへのインストール

pkg install postfix-3.3.1_1,1 dovecot-2.3.2 procmail py36-certbot 

2. Postfix設定

  • 編集対象ファイル
main.cf
master.cf   
  • main.cf
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 168.100.189.0/28, 127.0.0.0/8
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
mailbox_command = /usr/local/bin/procmail #procmailを入れたい
smtpd_banner = $myhostname ESMTP autherWorld #お好み
    
# Dovecot-SASL Configuration
 smtpd_sasl_type = dovecot
 smtpd_sasl_path = private/auth
 smtpd_sasl_auth_enable = yes
 smtpd_sasl_security_options = noanonymous
 smtpd_sasl_local_domain = $myhostname
    
#TLS Configuration
 smtpd_use_tls = yes
 smtpd_tls_CAfile = /usr/local/etc/letsencrypt/live/mail.example.com/cert.pem
 smtp_tls_security_level = may  ※1
 smtp_tls_loglevel = 1
 smtpd_tls_cert_file = /usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem
 smtpd_tls_key_file = /usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem
 smtpd_tls_session_cache_database = btree:/usr/local/etc/postfix/smtpd_scache

※1 TLSで通信を行うかの設定。 Gmailでやり取りするのに必須。詳しくは下記
http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#smtp_tls_security_level

  • mater.cf
 submission inet n       -       n       -       -       smtpd
    -o syslog_name=postfix/submission
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
    -o milter_macro_daemon_name=ORIGINATING
    
 smtps     inet  n       -       n       -       -       smtpd
    -o syslog_name=postfix/smtps
    -o smtpd_tls_wrappermode=yes
    -o smtpd_sasl_auth_enable=yes

3.Dovecot設定

  • 編集対象ファイル
 dovecot.conf
 conf.d/10-auth.conf
 conf.d/10-mail.conf
 conf.d/10-master.conf
 conf.d/10-ssl.conf
 conf.d/auth-passwdfile.conf.ext (編集なしでもよい)
   protocols = imap
  • 10-auth.conf
   auth_mechanisms = plain login cram-md5 (plainだけなので、 loginとcram-md5を追加)
   !include auth-passwdfile.conf.ext
  • 10-mail.conf
   mail_location = maildir:~/Maildir
  • 10-master.conf
   service imap-login {
   inet_listener imap {
     port = 0
   }
   inet_listener imaps {
     port = 993
     ssl = yes
   }   
   
   # Postfix smtp-auth
   unix_listener /var/spool/postfix/private/auth {
     mode = 0666
     user = postfix
     group = postfix
   }
   ssl = yes
   
   ssl_cert = </usr/local/etc/letsencrypt/live/mail.example.com/fullchain.pem
   ssl_key = </usr/local/etc/letsencrypt/live/mail.example.com/privkey.pem
   
   ssl_dh = </usr/local/etc/dovecot/dh.pem

3.SSL設定

上記の設定でTLS/SSL関連の設定時に必要となる証明書等の発行を以下で行う。
* LetsEncrypt
certbot (py27 or py36) installed( 1にて実行済み)

   certbot-3.6 certonly --standalone -d mail.example.com -m <連絡が欲しいメールアドレス>
   ※上記で証明書が発行される
  • dh.pem
   openssl dhparam -out /usr/local/etc/dovecot/dh.pem 4096
   dovecotで認証を行う際にDH鍵を使用するため、生成する

4. ユーザ作成

PostfixSMTP-AuthDovecot-SASLを利用する形にする
基本的には、/usr/local/etc/dovecot/usersを作成する
形式は

<username>:<password>(cram-md5):uid:gid::<home directory>

パスワードの作成は以下で行う

doveadm pw -s cram-md5 
Enter new password:
Retype new password:
{CRAM-MD5}XXX

5.procmailrc

見よう見まねで書いたもののため、試行錯誤する余地がまだあります。

  • 編集対象ファイル
procmailrc
  • 内容
    SHELL=/bin/sh
    PATH=/bin:/usr/bin:/usr/local/bin
    DROPPRIVS=yes
    MAILDIR=$HOME/Maildir
    DEFAULT=$MAILDIR/
    #LOGFILE=$MAILDIR/procmail.log
  
    #remove loan
    :0
    * ^Subject: .*loan.*
    /dev/null

まとめ

上記の設定以外に、 DNSのMXレコードの設定やSPFレコードの設定が存在するが
またいずれ追記することにします。
ひとまずは、上記の設定でメールのやり取りができるようになりました。
また、バージョンが変化したりすることで設定の仕方が変わってしまう可能性はありますが
その時はその時です:p
(実際、Dovecotの設定方法は1.xと2.xでだいぶ異なる...)
あとは、clamAVとかの設定も必要ですね

以上、今後のための記録:)