postfix寄信認證改用dovecot

一直以來我都讓postfix使用 sasl 方式處裡寄信認證, 但是連結到多網域主控伺服器的時候, 就會出錯, 很麻煩.
經過測試 dovecot 可以使用多組 userdb , 與passdb , 達到一個mail server 支援多個ldap網域主控.

當然也能省下一個sasl的service

  • 修改dovecort的 conf.d/10-master.conf
service auth {
...
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    # Assuming the default Postfix user and group
    user = postfix
    group = postfix
  }
  ...
}

#以下設定為了相容outlook系統
auth_mechanisms = plain login
  • 修改postfix的main.cf
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# On Debian Wheezy path must be relative and queue_directory defined
#queue_directory = /var/spool/postfix

# and the common settings to enable SASL:
smtpd_sasl_auth_enable = yes
  • 修改postfix的master.cf
submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
 ...

參考:

https://doc.dovecot.org/configuration_manual/howto/postfix_and_dovecot_sasl/

g suite 替代方案-自架mail server , postfix+openldap

之前一直維護的是 postfix + M$ 的AD 認證 , 這也可以拿來取代google 代管的mail , 但是沒事還要生出windows server , 這錢花了就算了, 就怕一直要更新... 因此花了5天時間,認真研究 , 讓postfix + openldap 認證 , 做成docker images , 也提供範例架設docker openldap server .

值得注意的是 openldap 必須要吃進去 postfix 的 ldap schema 才能跟postfix整合(aliases) .

https://hub.docker.com/r/inmethod/docker-postfix-openldap

mail出現好奇怪的log ".... rip=::1, lip=::1, secured, session" problem

有時候出現就一大堆, 最後出現too many open files , 有夠怪異, 只好讓限制 imap 與 pop3 只 listen 特定的 ip (ipv4) , 這樣就可以避掉疑似ipv6嘗試入侵的問題, 我自己是覺得可能是系統與dovecot之前某段出了狀況.
請修改 /etc/dovecot/conf.d/10-master.conf

service imap-login {
   inet_listener imap {
     address = x.x.x.x y.y.y.y
     #port = 143
   }
   inet_listener imaps {
     address = x.x.x.x y.y.y.y
     #port = 993
     #ssl = yes
   } 
}
service pop3-login {
   inet_listener pop3 {
     address = x.x.x.x y.y.y.y
     #port = 110
   }
   inet_listener pop3s {
     address = x.x.x.x y.y.y.y
     #port = 995
     #ssl = yes
   }
}