# 列出目前在 Mail Queue 中的信件
mailq
# 刪除所有在 Queue 中的郵件
postsuper -d ALL
# 刪除所有正在 deferred 佇列中的郵件 ( 刪除曾經發送失敗的信 )
postsuper -d ALL deferred
=================
relayhost = smtp.gmail.com:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/gmail_passwd
smtp_sasl_security_options =
smtp_use_tls = yes
====================
smtp.gmail.com:587 帳號@gmail.com:密碼
====
用以下指令製作 hash map:
# postmap /usr/local/etc/postfix/gmail_passwd
======================
1. 申請 Gmail 帳號
這理所當然是第一個程序,還沒有的話趕緊去申請一個吧,已經有了帳號就繼續下一個步驟。
2. 建立 SSL 憑證
為了方便管理,可以建立一個目錄來方便放置憑證,以 DR 為例:
# mkdir /etc/postfix/gmail
# cd /etc/postfix/gmail
然後使用以下指令建立憑證:
# openssl genrsa -out gmail.key 1024
# openssl req -new -key gmail.key -x509 -out gmail.crt
執行第二個指令時會要求填入資料(國家、地區、組織、信箱位址等),按著說明填入即可,這不會影響寄信功能。
3. 建立 Gmail 的密碼認證檔案
# vi /etc/postfix/sasl_passwd
然後寫入以下內容:
gmail-smtp.l.google.com username@gmail.com:password
smtp.gmail.com username@gmail.com:password
上頭的 username 和 password 就是要添入 Gmail 的帳號以及密碼,編輯完並儲存後,再執行下個指令去建立資料庫檔案:
# postmap hash:/etc/postfix/sasl_passwd
另外,由於該檔案裡頭存放了相當重要的帳號密碼資訊,DR 建議修改其存取權限,讓一般使用者無法瀏覽:
# chmod 600 /etc/postfix/sasl_passwd
# chmod 600 /etc/postfix/sasl_passwd.db
4. 設定 Postfix
# vi /etc/postfix/main.cf
寫入以下內容:
relayhost=[smtp.gmail.com]:587
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tks_note_starttls_offer = yes
tls_random_source = dev:/dev/urandom
smtp_tls_scert_verifydepth = 5
smtp_tls_key_file=/etc/postfix/gmail/gmail.key
smtp_tls_cert_file=/etc/postfix/gmail/gmail.crt
smtpd_tls_ask_ccert = yes
smtpd_tls_req_ccert =no
smtp_tls_enforce_peername = no
儲存後重新啟動 Postfix:
# /etc/rc.d/init.d/postfix restart
smtp.gmail.com
Port for TLS/STARTTLS: 587
64.233.187.108
==============
account : ****@gmail.com
password : *****
=============
postfix 2.66
# inbound
smtpd_tls_security_level = may
smtpd_tls_protocols=!SSLv2,!SSLv3
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
# outbound
smtp_tls_security_level = may
smtp_tls_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp[d]_tls_security_level == "may": smtp[d]_tls_protocols is used
smtp[d]_tls_security_level == "encrypt": smtp[d]_tls_mandatory_protocols is used
smtp[d]_tls_security_level == "none": none of these two parameters is used
=============================
smtpd_tls_security_level = may
smtpd_tls_key_file = /etc/pki/tls/private/mail.example.com.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.example.com.cert
# smtpd_tls_CAfile = /etc/pki/tls/root.crt
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_cache
tls_random_source = dev:/dev/urandom
tls_random_exchange_name = /var/lib/postfix/prng_exch
smtpd_tls_auth_only = yes
==
在 postfix 2.3 裡 'smtpd_tls_security_level = may' 取代舊有的 'smtpd_use_tls = yes' 並啟用 tls。我們註釋掉 smtpd_tls_CAfile 但在使用已簽署的憑證時卻須要利用該設定來指定發行機構的憑證。'smtpd_tls_loglevel = 1' 會將 tls 的工作階段記錄在 postfix 的郵件日誌(將它設為第 0 級停止記錄 TLS,而第 2 級對偵錯或許會有幫助)。smtpd_tls_session_cache 設定把 TLS 的工作階段金鑰暫存 1 小時,這個建議是出於重複地為每次連線協商 TLS 工作階段金鑰的代價相對昂貴。
最後那個設定,smtpd_tls_auth_only = yes,強迫 SASL 驗證採用 TLS 並禁止純文字驗證發生,除非已經建立了一個 TLS 工作階段。(在測試時註釋掉 smtpd_tls_auth_only = yes 也許會有用,好讓我們能測試 SSL/TLS 能否運作,但當 SSL/TLS 失效時仍有純文字 SASL 驗證作為後備)。
=============================
test
#telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.weithenn.org
Escape character is '^]'.
220 mail.weithenn.org ESMTP Postfix
ehlo localhost //測試 TLS (此行為自行輸入)
250-mail.weithenn.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS //主機顯示 TLS 功能成功
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
starttls //查詢 TLS 功能是否啟動成功 (此行為自行輸入)
220 2.0.0 Ready to start TLS //系統回應 TLS 啟動成功
quit //離開 (此行為自行輸入)
quit //離開 (此行為自行輸入)
Connection closed by foreign host.
沒有留言:
張貼留言