幫 sendmail 加入寄件認證 (SMTP AUTH) 功能

出自啟示錄
於 2006年9月4日 (一) 04:21 由 JoeHorn對話 | 貢獻 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
跳至導覽 跳至搜尋

作者:Joe Horn( joehorn AT leobbs DOT net )

授權:[CC授權:姓名標示-非商業性-相同方式分享 2.5]

附註:安裝步驟適用於 FreeBSD 平台,其它 UNIX-Like OS 可能有所不同。


使用軟體:


前言

傳統的 SMTP 主機都由 IP 來判斷使用者是否有送信權,但是這種方式對浮動 IP 的使用者就失去了效用。

若是將 SMTP 主機加入使用者帳號與密碼的認證機制,則無論是固定 IP 還是浮動 IP 都可以使用主機來寄信了。

暫停 sendmail

停掉 sendmail:

# cd /etc/mail
# make stop

安裝 Cyrus-SASL

使用以下指令安裝 Cyrus-SASL 認證程式庫:

# cd /usr/ports/security/cyrus-sasl2
# make install clean

再使用以下指令安裝 Cyrus-SASL 認證服務(saslauthd):

# cd /usr/ports/security/cyrus-sasl2-saslauthd
# make install clean

加入 sendmail 編譯參數

編輯 /etc/make.conf ,在最尾端加進以下四行:

## SMTP_AUTH 用 ##
SENDMAIL_CFLAGS+= -I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS+= -L/usr/local/lib
SENDMAIL_LDADD+= -lsasl2

重新編譯系統中的 sendmail

使用以下指令重新編譯與安裝 sendmail:

# cd /usr/src/usr.sbin/sendmail
# make cleandir
# make obj
# make
# make install
# cd /etc/mail
# make

設定 sendmail 執行參數

請用編輯器開啟 /etc/mail/`hostname`.mc 這個檔案,例如:

# vi /etc/mail/`hostname`.mc

在最後面加上以下幾行:

dnl set SASL options
define(`confRUN_AS_USER',`root:mail')dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confDONT_BLAME_SENDMAIL',`GroupReadableSASLDBFile')dnl

編輯 /etc/access 這個檔案,讓這個檔案只存在以下的內容(中間空白以 Tab 對齊):

127.0.0.1     RELAY
(主機IP)      RELAY

再來編輯 /etc/mail/local-host-names 這個檔案,填入主機的 domain name 。

例如:某主機有 aaa.bbb 跟 ccc.ddd 兩個 DN 要用來收信(user@aaa.bbb 與 user@ccc.ddd),則填入以下內容:

aaa.bbb
ccc.ddd

設定 Cyrus-SASLauthd 啟動狀態

請在 /etc/rc.conf 加進這行:

saslauthd_enable="YES"

安裝 sendmail 設定檔

請使用以下指令:

# cd /etc/mail
# make
# make cf
# make install

啟動 Cyrus-SASLauthd 與 sendmail

啟動 saslauthd 與 sendmail:

# /usr/local/etc/rc.d/saslauthd.sh start
# cd /etc/mail
# make start

測試

要測試您的主機是否開始支援 SMTP_AUTH 請用 telnet localhost 25 這個指令,輸入以下指令:

ehlo localhost

觀察是否有以下這行出現:

250-AUTH LOGIN

若是有則代表成功。