在Ubuntu Mail Server架設:Postfix + Cyrus SASL

1.安裝 Postfix 以及 Cyrus SASL 


- sudo apt-get install postfix -y

- sudo apt-get install sasl2-bin -y



2.設定SASL 

sudo vim /etc/default/saslauthd


START 更改為 yes

選擇驗證的模式,預設是pam
pam  : 使用 pam 模組做為認證,這個需要在 /etc/pam.d 這個目錄下新增 
     一個名為 smtp 的檔案,並設定檔案內容才行! 
sasldb    : 使用 SASL 的認證函式庫,使用這個功能時,你必需要額外的 
     指定 1.函式庫的名稱; 2.使用 saslpasswd 程式增加使用者! 
     個人認為這個功能不太好用,因為每新增一個使用者需要主動的 
     幫使用者新增帳號、密碼到認證函式庫中,不太方便! 
     不過如果您還使用其他的伺服器如 LDAP, MySQL 等等軟體時, 
     則這個功能可就大大的有幫助啦!因為他可以分享帳號與密碼。



設定Postfix使用SASL載入的路徑(在此有啟用Chroot)
 註:chroot jail 的功能在於『使用權限較低的一般身份使用者來進行 postfix 的工作程序,只有在需要的時候才可以進入 /var/spool/postfix 這個郵件佇列目錄!』,對於系統來說,是有一定程度的安全保障的!所以, Postfix 才會在預設的情況之下以 chroot 的功能來進行 postfix 的!不過,再加上了 SMTP 這個認證機制之後,由於他必需要以比較高等級的使用者來執行一些認證個功能,所以除非您額外的加入很多的函式庫去到 chroot jail 目錄下,否則的話,就不能使用 chroot 啦!所以,如果要啟動 SMTP 的話,請務必將 master.cf 這個檔案修改過

/etc/postfix/sasl/底下新增 smtpd.conf 的設定擋,設定使用哪種驗證服務


- sudo vim /etc/postfix/sasl/smtpd.conf

# log 檔的紀錄等級
log_level: 3
# 設定密碼檢驗使用哪種服務
pwcheck_method: saslauthd
# 設定所使用的認證機制
mech_list: PLAIN LOGIN

# 如果要使用chroot需新增路徑並新增使用者至sasl群組
sudo rm -r /var/run/saslauthd/
sudo mkdir -p /var/spool/postfix/var/run/saslauthd
sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run
sudo chgrp sasl /var/spool/postfix/var/run/saslauthd
sudo adduser postfix sasl


3.設定Postfix啟用SASL服務

- sudo vim /etc/postfix/main.cf


# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
# 主機名稱
myhostname = junhan-VirtualBox
# 網域名稱
mydomain = test.com.tw
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# 可用來收件的主機名稱
mydestination = $myhostname, junhan-VirtualBox2, junhan-VirtualBox, localhost.localdomain, localhost
relayhost =
# 用來開放可以 Relay 的 IP 網段設定
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

# 新增以下內容啟用SASL服務
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_unauth_destination
※以上設定為必須使用帳密驗證才可寄信,不設定relay IP避免被當跳板機寄送,
    如果設定relay IP不登入也可寄送

4. 重新啟動Postfix & SASL服務

sudo service postfix restart

sudo service saslauthd restart


5. 測試SASL服務是否正常
使用Telnet 連線25 Port並使用ehlo domain name或者IP 查看是否成功啟用

# 利用下列指令產生使用者的驗證碼
perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'

產生驗證碼

測試是否可以驗證(出現successful字樣即代表成功驗證)
※如果無法驗證,檢查 /var/log/mail.log 的log訊息,如果出現
“warning: SASL authentication failure: cannot connect to saslauthd server: Permission denied”
檢查 /var/spool/postfix/var/run/saslauthd 的權限

6. 測試使用者寄信


出現此訊息代表成功寄信


出現此訊息代表使用者驗證錯誤,可能是密碼錯誤或無此使用者
檢查Log會出現驗證錯誤的訊息
發生錯誤時確認是否使用chroot模式
編輯 /etc/postfix/master.cf 關閉chroot

sudo vim /etc/postfix/master.cf
如不使用chroot則將它關閉,預設是開啟

因為沒有設定允許relay IP區段,無登入的使用者無法寄信

留言