Postfix別名郵件與SASL驗證

2022-08-28 15:01:25

Postfix別名郵件與SASL驗證

環境簡介

系統:

  • CentOS 8.3.2011

軟體包:

  • postfix-2:3.3.1-12.el8.x86_64
  • cyrus-sasl-2.1.27-5.el8.x86_64
  • cyrus-sasl-plain-2.1.27-5.el8.x86_64

軟體源:

  • CentOS-8.3.2011-x86_64-dvd1.iso 自帶軟體源

操作步驟

如下為Postfix設定SASL驗證。

[root@localhost ~]# yum install -y vim postfix cyrus-sasl net-tools
# 最小化安裝系統 安裝所需軟體包 Yum設定略過
[root@localhost ~]# vim /etc/postfix/master.cf
# 修改Postfix組態檔,將以下項的註釋刪除 開啟smtpd功能,修改完成後儲存退出
smtpd     pass  -       -       n       -       -       smtpd
[root@localhost ~]# vim /etc/postfix/main.cf
# 修改Postfix組態檔,完成初始化設定及開啟SASL驗證功能。如下項最好根據實際情況修改。
myhostname = mail.studying.com
mydomain = studying.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = subnet
mynetworks = 192.168.100.0/24, 127.0.0.0/8
home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes

[root@localhost ~]# systemctl enable --now postfix
# 啟動Postfix並設定Postfix開機自啟
[root@localhost ~]# firewall-cmd --add-service=smtp --per 
[root@localhost ~]# firewall-cmd --reload
# 設定防火牆允許存取smtp服務

設定SASL2

[root@localhost ~]# setsebool -P allow_saslauthd_read_shadow 1
# 設定SELinux允許saslauthd存取/etc/shadow檔案
[root@localhost ~]# cat /etc/sasl2/smtpd.conf
# 檔案預設內容應該就如下所示
pwcheck_method: saslauthd
mech_list: plain login

[root@localhost ~]# vim /etc/sysconfig/saslauthd
# 修改saslauthd的組態檔
MECH=shadow

[root@localhost ~]# systemctl enable --now saslauthd
# 開啟並開機自啟sasl驗證服務
testsaslauthd -u testuser1 -p abc.123
0: OK "Success."
# 測試sasl驗證是否正常

接下來為Postfix設定別名。

[root@localhost ~]# postconf -p | grep alias_maps 
alias_maps = hash:/etc/aliases
# 檢查別名檔案,並在檔案中新增如下內容
[root@localhost ~]# vim /etc/aliases
testuser:       testuser1, testuser2, testuser3
[root@localhost ~]# newaliases
# 使用如上命令重新生成別名資料庫
[root@localhost ~]# systemctl restart postfix
# 重啟Postfix服務

測試環境

接下來使用telnet命令列進行測試

# 如下命令使用命令列進行測試
220 mail.studying.com ESMTP Postfix
helo [email protected]
250 mail.studying.com
auth login
334 VXNlcm5hbWU6
dGVzdHVzZXIx
334 UGFzc3dvcmQ6
YWJjLjEyMw==
235 2.7.0 Authentication successful
mail from:<[email protected]>
250 2.1.0 Ok
rcpt to:<[email protected]>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
This is a test mail
.
250 2.0.0 Ok: queued as A895C2088490
mail from:<[email protected]>
250 2.1.0 Ok
rcpt to:<[email protected]>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
this is a testmail two!
.
250 2.0.0 Ok: queued as 9AA66208849A




# 郵件傳送完畢後通過在使用者家目錄查閱郵件,從而驗證郵件傳送的成功
[root@localhost new]# pwd
/home/testuser1/Maildir/new

[root@localhost new]# cat 1661604766.Vfd00I20e7d75M249613.localhost.localdomain 
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from testuser1?studying.com (unknown [192.168.100.1])
        by mail.studying.com (Postfix) with SMTP id A895C2088490
        for <[email protected]>; Sat, 27 Aug 2022 20:52:27 +0800 (CST)

This is a test mail

[root@localhost new]# pwd
/home/testuser2/Maildir/new

[root@localhost new]# cat 1661618666.Vfd00I20e7d7dM301979.localhost.localdomain 
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from testuser1?studying.com (unknown [192.168.100.1])
        by mail.studying.com (Postfix) with SMTP id 9AA66208849A
        for <[email protected]>; Sun, 28 Aug 2022 00:44:10 +0800 (CST)

this is a testmail two!

SASL雜談

SASL(Simple Authentication and Security Layer)簡單身份驗證和安全層,是由IETF開發的協定,用於提供可插入或可延伸的身份驗證框架,具體的定義參見RFC4422。這個協定通常用於電子郵件相關的協定,例如SMTP、IMAP、POP還有XMPP、LDAP等,在上述與Postfix相結合的範例中,我們只是使用到了它的簡單身份驗證,並沒有用到安全層。

關於安全層的內容暫且按下不談,先聊聊SASL在整個身份驗證架構中的位置。首先,SASL是處於服務協定(例如SMTP、IMAP)與驗證機制(Plain、GSSAPI)之間的機制,那麼一旦設定了SASL的認證,它往往能夠隱藏驗證機制,但不會隱藏驗證機制的細節,例如不同的機制需要不同的資訊進行驗證,例如一些機制需要使用Kerberos的票據、證書等。

在SASL的驗證架構中,涉及到的有兩種身份:

  • 與認證憑據相關的身份(稱為身份驗證身份)
  • 充當的身份(授權身份)

在伺服器進行驗證的過程中,需要建立身份驗證的身份與授權的身份的一一對映,也就是驗證賬戶到實際賬戶的對映(而這個形式則是由應用程式所規定的)。

那麼我們回到上述的POSTFIX+SASL範例中,POSTFIX實質是通過Unix程序間通訊來傳遞身份憑據進行驗證。並且採用的驗證方法是存取/etc/shadow檔案來確定驗證結果。