postfix 虛擬用戶 postfix + dovecot + openldap 製作虛擬郵件用戶 這裡使用的虛擬郵件用戶的方法是我自己研究的,可能會有不對或則不好的地方,望指出。由於之前已經寫過MariaDB作為資料庫的虛擬用戶,所以這裡會有很多地方會簡化配置和講解,如果沒有看懂可以看看這篇文章 ...
postfix 虛擬用戶
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: [email protected]\nRCPT TO: [email protected]\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.