基於OPENldap搭建postfix 虛擬用戶


本文首發: https://www.somata.net/2019/depend_openldap_build_postfix_virtual_mail_user.html

postfix + dovecot + openldap 制作虛擬郵件用戶

這里使用的虛擬郵件用戶的方法是我自己研究的,可能會有不對或則不好的地方,望指出。
由於之前已經寫過MariaDB作為數據庫的虛擬用戶,所以這里會有很多地方會簡化配置和講解,如果沒有看懂可以看看這篇文章:郵件服務配置(虛擬域&虛擬用戶)
有關於openldap方面的配置這里不多做解釋,更多的查看這篇文章LDAP 服務搭建和后期管理,這里主要還是寫有關於虛擬郵件用戶的相關配置。
同時這里我使用debian9作為平台。

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

如果有批量的操作,這里還可是使用腳本:

#!/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

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 文件:

# 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                # 指定使用那個返回屬性

3. dovecot 服務配置

主要配置一下幾個文件:

# 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           # 指定密碼加密方法

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 .
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】獲取授權信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM