OpenLDAP - Postfix With SASL2 SMTP Auth 設定

1、前言

談到 E-Mail 就不得不提一下這三個名詞 MTAMDAMUA,關於 E-Mail 從使用者發信到收信如何運作可參考  twbsd.org - Wang, Chun-Pin 第十六章 郵件伺服器圖解 了解。
  • MTA (Mail Transfer Agent): 郵件轉送代理人,負責傳送、轉送郵件 (Relay),如:SendmailPostfixQmail
  • MDA (Mail Delivery Agent): 郵件遞送代理人,負責把進來的郵件遞送、過濾到使用者信箱內,如:ProcmailMailDrop
  • MUA (Mail User Agent): 郵件使用者代理人,使用者用來發信、收信的程式,如:Outlook ExpressSquirrelMail


E-Mail 相關服務聆聽埠號 (Listen Port)

  • SMTP:25
  • SMTPs (SMTP Over SSL):465
  • POP3:110
  • POP3s (POP3 Over SSL):995
  • IMAP:143
  • IMAPs (IMAP Over SSL):993





文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.安裝 Postfix 套件
          步驟2.設定 Postfix 能讀取 SASL 設定檔
          步驟3.安裝 Cyrus-Sasl2-Saslauthd 套件
          步驟4.檢查 /etc/master.passwd 及 /etc/group
          步驟5.修改 /etc/rc.conf
          步驟6.建立 smtpd.conf
          步驟7.修改 postfix 設定檔 main.cf
          步驟8.建立別名 (Aliases) 資料庫
          步驟9.停止/啟動相關服務
          步驟10.測試 SMTP Auth 功能
4、參考
5、Me FAQ
          Q1.測試 SMTP Auth 怎不是 Postfix 回應我?





2、實作環境

  • FreeBSD 6.1-STABLE
  • postfix-2.3.1,1
  • cyrus-sasl-saslauthd-2.1.22





3、安裝及設定

本文將實作下列項目
  • 安裝及設定郵件伺服器 Postfix。
  • 設定 SASL2 SMTP Authentication 驗證機制。

步驟1.安裝 Postfix 套件

切換至 Ports Tree 路徑安裝 postfix 套件。
cd /usr/ports/mail/postfix      //切換至套件路徑
make install clean               //安裝 postfix 並勾選下列項目
  [X] PCRE      Perl Compatible Regular Expressions
  [X] SASL2     Cyrus SASLv2 (Simple Auth. and Sec. Layer)
  [X] TLS       Enable SSL and TLS support                  
  [X] BDB       Berkeley DB (choose version with WITH_BDB_VER)
  [X] OPENLDAP  OpenLDAP maps (choose ver. with WITH_OPENLDAP_VER) 

安裝途中將會尋問二個問題。
1.You need user "postfix" added to group "mail".Would you like me to add it y? y
  是否將 postfix 加入 mail 群組,此例回答 y
2.Would you like to activate Postfix in /etc/mail/mailer.conf n? y
  是否在 /etc/mail/mailer.conf 中啟動 Postfix,此例回答 y

安裝完後系統還會貼心的提醒說 如果使用 SASL 認證的方式,必須確定 postfix 這個代理使用者有權力讀取 sasldb 的檔案。
If you are using SASL, you need to make sure that postfix has access to read the sasldb file.
This is accomplished by adding postfix to group mail and making the /usr/local/etc/sasldb* file(s) readable by group mail (this shouldbe the default for new installs).




步驟2.設定 Postfix 能讀取 SASL 設定檔

查看 SASL 設定檔知道其擁有人 (owner) 及群組 (groups) 為 cyrus 因此我們將 postfix 加入此群組 (cyrus) 內,以便屆時 postifx 服務能順利讀取 SASL 設定檔。
ls -l /usr/local/etc/sasldb*     //查看 sasldb 權限
 -rw-r-----  1 cyrus  mail  16384  7 27 11:36 /usr/local/etc/sasldb2.db

修改群組 (group) 檔案將 postfix 加入 cyrus 群組。
vi /etc/group          //修改群組檔案
 cyrus:*:60:postfix      //將 postfix 加入 cyurs 群組內




步驟3.安裝 Cyrus-Sasl2-Saslauthd 套件

切換至 Ports Tree 路徑安裝 Cyrus-Sasl2-Saslauthd 套件。
cd /usr/ports/security/cyrus-sasl2-saslauthd  //切換至套件路徑
make install clean                                //安裝 SASL2 套件

安裝完後系統仍貼心提醒你要使用 SASL 功能記得在 rc.conf 內加上 saslauthd_enable="YES"。
To run saslauthd from startup, add saslauthd_enable="YES" in your /etc/rc.conf.



步驟4.檢查 /etc/master.passwd 及 /etc/group

由於安裝 postfix 時系統會新增 postfix 這個使用者及群組,但這樣的動作將會我們破壞我們在 OpenLDAP-PAM NSS 設定 這篇的設定,因此記得修改回來吧!! (否則將造成登入失敗)
修改系統使用者密碼及群組檔案,將認證部份導至 LDAP。
vipw
 postfix:*:125:125::0:0:Postfix Mail System:/var/spool/postfix:/usr/sbin/nologin
 +:*::::::::  //確保此行在最後一行
vim /etc/group
 postfix:*:125:
 +:*:0:       //確保此行在最後一行




步驟5.修改 /etc/rc.conf

修改 /etc/rc.conf 加入啟動相關服務設定,以便系統重新開機時能自動帶起 Postfix、SASL 服務,由於我們 MTA 採用 Postfix 所以記得將 Sendmail 服務關閉。
vi /etc/rc.conf
 sendmail_enable="NO"       //關閉 Sendmail
 postfix_enable="YES"       //啟動 Postfix 服務
 saslauthd_enable="YES"     //啟動 SASL 服務


關於 Sendmail 於 rc.conf 內設定 None、No、Yes 意義?
  • None:將 Sendmail 完全關閉
  • NO:Sendmail 只監聽 Localhost (127.0.0.1:25)
  • YES:啟用 Sendmail



步驟6.建立 smtpd.conf

修改 SMTP 設定檔。
vi /usr/local/lib/sasl2/smtpd.conf    //修改 SMTP 設定檔
 pwcheck_method: saslauthd                   //修改認證方法
 mech_list: plain login cram-md5 digest-md5  //修改認證方式




步驟7.修改 postfix 設定檔 main.cf

修改 Postfix 設定檔 main.cf,以下僅列出基本設定 (即僅列出修改項目)。
myhostname = mail.weithenn.org
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style = subnet
mynetworks = 192.168.1.0/24, 127.0.0.0/8, 61.60.59.58/32 //指定 LAN 網段及 Public IP
alias_maps = hash:/usr/local/etc/postfix/aliases         //預設使用 /etc/aliases
home_mailbox = Maildir/                                  //採用 MailDir 方式收取 E-Mail

啟動 Authenticated Relay 功能。
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains,
smtpd_client_restrictions = permit_sasl_authenticated




步驟8.建立別名 (Aliases) 資料庫

建立 E-Mail 別名 (Aliases) 資料庫也就是產生 /usr/local/etc/postfix/aliases.db 檔案鍵入如下指令即可,或執行 newaliases 指令。
postalias /usr/local/etc/postfix/aliases    



步驟9.停止/啟動相關服務

由於我們 MTA 採用 Postfix 所以在啟動 Postfix 服務以前記得先將 Sendmail 服務關閉。
/etc/rc.d/sendmail stop                //停止 Sendmail 服務
 Stopping sendmail_submit.
/usr/local/etc/rc.d/postfix start    //啟動 Postfix 服務
 postfix/postfix-script: starting the Postfix mail system
/usr/local/etc/rc.d/saslauthd start  //啟動 SASL 服務
 Starting saslauthd.




步驟10.測試 SMTP Auth 功能

Postfix 及 SASL 服務成功啟動後,接著依如下方式來測試 SMTP Authentication 機制是否作用了,如果前述步驟未執行 postalias 將不會出現 ESMTP 訊息,也就是 postfix 啟動但卻找不到 DB。
telnet localhost 25         //連結至本機 SMTP
 Trying ::1...
 Trying 127.0.0.1...
 Connected to localhost.weithenn.org.  
 Escape character is '^'.
 220 mail.weithenn.org ESMTP Postfix
 ehlo localhost             //測試 SASL 機制 (此行為自行輸入)
 250-mail.weithenn.org
 250-PIPELINING
 250-SIZE 10240000
 250-VRFY
 250-ETRN
 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5   //SMTP AUTH LOGIN 成功
 250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5  
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN
 quit                       //離開 (此行為自行輸入)
 221 2.0.0 Bye
 Connection closed by foreign host.

若使用的 MUA 為 Outlook Express 則請勾選 我的伺服器需要驗證 項目才能順利使用 Outlook Express 發送信件,如下圖所示:


當 MUA 通過 SASL 驗證機制寄信成功 Maillog 訊息,類似如下:
Aug 26 13:57:42 ldap postfix/smtpd51569: 8722B5C3A: client=weithenn.lan.home192.168.1.11, sasl_method=LOGIN, sasl_username=weithenn@weithenn.org





4、參考






5、Me FAQ

Q1.測試 SMTP Auth 怎不是 Postfix 回應我?

Error Message:
當測試 SMTP Auth 時怎是 Sendmail 回應我? 不是已經使用 Postfix 取代了嗎?
telnet localhost 25
 Trying ::1...
 Trying 127.0.0.1...
 Connected to localhost.weithenn.org.
 Escape character is '^'.
 220 mail.weithenn.org. ESMTP Sendmail 8.13.6/8.13.6; Thu, 10 Aug 2006 18:37:52  +0800 (CST)

Ans:
原來是忘了把 Sendmail 服務停掉,因為系統預設 Sendmail 服務是啟動的。
/etc/rc.d/sendmail stop
 Stopping sendmail_submit.

將 Sendmail 服務停止後再度測試即為 Postfix 回應了。
telnet localhost 25
 Trying ::1...
 Trying 127.0.0.1...
 Connected to localhost.weithenn.org.
 Escape character is '^'.
 220 mail.weithenn.org. ESMTP Postfix  //Postfix 回應