基於OPENldap搭建postfix 虛擬用戶

本文首發: 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】獲取受權信息。

相關文章
相關標籤/搜索