本文首發: https://www.somata.net/2019/depend_openldap_build_postfix_virtual_mail_user.htmlhtml
<a name="1c79bad3"></a>數據庫
postfix + dovecot + openldap 製做虛擬郵件用戶
這裏使用的虛擬郵件用戶的方法是我本身研究的,可能會有不對或則很差的地方,望指出。<br />因爲以前已經寫過MariaDB做爲數據庫的虛擬用戶,因此這裏會有不少地方會簡化配置和講解,若是沒有看懂能夠看看這篇文章:郵件服務配置(虛擬域&虛擬用戶)<br />有關於openldap方面的配置這裏很少作解釋,更多的查看這篇文章LDAP 服務搭建和後期管理,這裏主要仍是寫有關於虛擬郵件用戶的相關配置。<br />同時這裏我使用debian9做爲平臺。bash
<a name="af560c37"></a>服務器
1. OPENldap添加用戶
# file: mail.ldif # MAIL組 dn: ou=MAIL,dc=black,dc=com objectClass: organizationalUnit ou: MAIL #User1 dn: uid=User1,ou=MAIL,dc=black,dc=com objectClass: inetOrgPerson uid: User1 sn: User1 cn: User1 mail: /home/User1/Maildir/ userPassword: {SSHA}sO5Pfb6GPmGUPQb1o59KXa7yQDGFt6iU # 密碼生成: doveadm pw -s ssha -p User1 #User2 dn: uid=User2,ou=MAIL,dc=black,dc=com objectClass: inetOrgPerson uid: User2 sn: User2 cn: User2 mail: /home/User2/Maildir/ userPassword: {SSHA}E6PyVtdWcXtpfhJLw3NnElBOb63qqPuw
若是有批量的操做,這裏還但是使用腳本:dom
#!/bin/bash cat << EOF | ldapadd -D "cn=root,dc=black,dc=com" -w 123456 dn: ou=MAIL,dc=black,dc=com objectClass: organizationalUnit ou: MAIL EOF for i in {1..2};do user=User$i password=`doveadm pw -s ssha -p $user` cat << EOF | ldapadd -D "cn=root,dc=black,dc=com" -w 123456 dn: uid=$user,ou=MAIL,dc=black,dc=com objectClass: inetOrgPerson uid: $user sn: $user cn: $user mail: /home/$user/Maildir/ userPassword: $password EOF done
<a name="bb2c4a24"></a>ssh
2. postfix 服務配置
# 添加用戶vmail useradd vmail # 後面經過查詢得知UID和GID爲1004
這裏主要寫 有關虛擬用戶目錄,和用戶配置的部分:函數
# file: /etc/postfix/main.cf …… virtual_gid_maps = static:1004 # 直接固定UID 和 GID virtual_uid_maps = static:1004 virtual_mailbox_domains = black.com # 一樣的也固定域名 # 這裏須要注意在mydestination 中不能包含該域名 virtual_mailbox_maps = ldap:/etc/postfix/ldap.cf # 指定用戶郵箱的配置文件 virtual_mailbox_base = / # 這裏的base路徑設置爲 / , # 這裏主要是由於ldap不能像MariaDB同樣但是使用concat函數,dovecot中不能設置base路徑,因此在ldap中mail的路徑被設置成了絕對路徑,而後這裏的base路徑設置爲/。若是有其餘方法請留言或郵件告知。 broken_sasl_auth_clients = yes # 拒絕非正常客戶端 smtpd_sasl_auth_enable = yes # 開啓sasl認證 smtpd_sasl_type = dovecot # 使用dovecot認證 smtpd_sasl_path = private/auth # 設置認證套接字 smtpd_recipient_restrictions = permit_sasl_authenticated,reject # 這裏設在爲了強制認證,若是放在生產環境中是不可取的。
ldap.cf 文件:post
# file: /etc/postfix/ldap.cf server_host = localhost # 服務器地址 server_port = 389 # 服務器端口 timeout = 5 # 超時時間 bind_dn = cn=root,dc=black,dc=com # 登入用戶 bind_pw = 123456 # 登入密碼 search_base = ou=MAIL,dc=black,dc=com # 搜尋base地址 query_filter = (&(objectClass=inetOrgPerson)(uid=%u)) # 過濾規則 result_attribute = mail # 指定使用那個返回屬性
<a name="fb32d7c0"></a>測試
3. dovecot 服務配置
主要配置一下幾個文件:ui
# file: /etc/dovecot/dovecot.conf protocols= pop3 # 開啓pop3服務 listen = * # 監聽服務類型 !include conf.d/*.conf # 其餘配置
# file: /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = no # 關閉不容許爲加密密文傳輸 auth_mechanisms = plain login # 這裏須要再開啓login的認證,不然postix沒法使用 !include auth-ldap.conf.ext # 這裏註釋auth-system.conf.ext,而後開啓auth-ldap.conf.ext
# file /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/home/%u/Maildir/ namespace inbox { inbox = yes } mail_uid = 1004 # 這裏跟postfix同樣固定UID和GID mail_gid = 1004
# file: /etc/dovecot/conf.d/10-master.conf …… service auth { unix_listener auth-userdb { } unix_listener /var/spool/postfix/private/auth { # 爲postfix開啓auth認證套接字 mode = 0660 user = postfix group = postfix } } ……
# file: /etc/dovecot/dovecot-ldap.conf.ext hosts = localhost:389 # 主機 dn = cn=root,dc=black,dc=com #登入名稱 dnpass = 123456 # 密碼 base = ou=MAIL,dc=black,dc=com # base路徑 user_attrs = mail=home # 指定返回的屬性 user_filter = (&(objectClass=inetOrgPerson)(uid=%u)) # 用戶過濾參數 pass_attrs = uid=user,userPassword=password # 密碼過濾參數 pass_filter = (&(objectClass=inetOrgPerson)(uid=%u)) default_pass_scheme = SSHA # 指定密碼加密方法
<a name="6GPik"></a>
4. 權限配置和測試
首先給vmail用戶添加一下權限
setfacl -m u:vmail:rwx /home systemctl restart dovecot systemctl restart postfix
而後就但是進行測試了,這裏很少講,能寫出來那麼確定是能經過的:
echo -e "EHLO client\nAUTH LOGIN\nVXNlcjE=\nVXNlcjE=\nMAIL FROM: User1@black.com\nRCPT TO: User2@black.com\nDATA\nHello,User2\n.\nQUIT\n" | nc 127.0.0.1 25
220 mail.black.com ESMTP Postfix (Debian/GNU)
250-mail.black.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
334 VXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 2.7.0 Authentication successful
250 2.1.0 Ok
250 2.1.5 Ok
354 End data with <CR><LF>.<CR><LF>
250 2.0.0 Ok: queued as 0A38110016B
221 2.0.0 Bye
echo -e "USER User2\nPASS User2\nSTAT\nQUIT\n" | nc 127.0.0.1 110
+OK Dovecot ready.
+OK
+OK Logged in.
+OK 2 804
+OK Logging out.
本文經「本來」原創認證,做者乾坤盤,訪問yuanben.io查詢【1I2CK9UC】獲取受權信息。