安裝所需軟件 sendmail.8.12.10.tar.gz http://www.sendmail.org/ cyrus-sasl-2.1.18.tar.gz http://asg.web.cmu.edu/cyrus/
安裝步驟 1、先安裝cyrus-sasl-2.1.18.tar.gz,sendmail安裝時要用到sasl(簡單認證和安全層協議)的庫文件的頭文件。 解壓縮: # tar -zxvf cyrus-sasl-2.1.18.tar.gz 編譯: 進入剛解壓的源碼目錄,運行以下命令完成安裝。 #./configure --prefix=/usr/local/sasl2 --enable-login 一定要加--enable-login,因為SASL2默認不支持login這種驗證方式,而Outlook是通過login來進行SMTP驗證的。 #make # 編譯 #make install # 安裝 完成以上Linux程序安裝三步曲之後,就可以開始配置和測試了。 2、配置SASL 為了把SASL應用於sendmail認證,還需進行一些配置工作。sendmail會到/usr/lib目錄下去找SASL2庫,而我們是把程序安裝在/usr/local/sasl2中,為什麼不把軟件安裝在/usr/lib目錄呢?這主要是為了好管理自已安裝的軟件啦。所以我們要在/usr/lib目錄下做一個鏈接: # cd /usr/lib # ln -s /usr/local/sasl2/lib/* . ok,接著要在/var/目錄下建一個目錄給saslauthd進程存在臨時數據。 # cd /var # mkdir state # cd state # mkdir saslauthd 注:如果沒有這些目錄,運行saslauthd時,會提示出錯。 ok,接著為確保CYRUS-SASL2函數庫知道怎樣驗證所收來的SASL認證請求,必須創建一個SASL的配置文件來把MTA程序定義成一個SASL應用。配置文件名為Sendmail.conf(注意是大寫的S),位於/usr/lib/sasl2目錄中,也就是/usr/local/sasl2/lib/sasl2這個目錄,記得上面新建的鏈接了嗎?在該文件中你定義你希望使用的認證數據庫方法,以下這個例子使用saslauthd來驗證認證請求。 # cd /usr/lib/sasl2 # echo 'pwcheck_method: saslauthd' > Sendmail.conf 3、測試 ok,現在可以運行saslauthd了,並進行測試。 # cd /usr/local/sasl2/sbin # ./saslauthd -a shadow 用shadow的用戶和密碼進行驗證 # ./testsaslauthd -u userid -p passWord 0: OK "SUCcess." 如果出現以上信息,就說明saslauthd正常運行了。testsaslauthd程序默認是沒有編譯的,你需要在源碼目錄樹的saslauthd子目錄中運行 # make testsaslauthd命令生成。 4、sasl2安裝完成後,就要開始安裝sendmail了。 先解壓sendmail源碼。 # tar -zxvf sendmail.8.12.10.tar.gz 如果要sendmail支持SASL,需要修改源碼的位置配置文件site.config.m4。site.config.m4位於源碼目錄樹的devtools/Site。文件中應包含以下行: PREPENDDEF(`confMAPDEF', `-DMAP_REGEX') APPENDDEF(`confENVDEF', `-DTCPWRAPPERS -DSASL=2') APPENDDEF(`conf_sendmail_LIBS', `-lwrap -lsasl2') APPENDDEF(`confLIBDIRS', `-L/usr/local/sasl2/lib') APPENDDEF(`confINCDIRS', `-I/usr/local/sasl2/include') 第一行配置正則表達式相關內容 第二、三行配置表示在sendmail程序中支持sasl2和tcp_wrapper(可通過hosts.allow和hosts.deny控制訪問) 第四、五行配置指出sasl2的庫文件和頭文件的位置。 ok,接著在編譯前要建立一些用戶和目錄,並確保有正確的權限。 sendmail必須有一個set-group-id(默認是smmsp組)的程序來在一個組可寫的目錄中查詢排隊郵件。所以我們要建立一個smmsp用戶和組。並建立如下目錄並設置相應的權限,具體設置要求可查詢源碼目錄樹下sendmail/SECURITY文檔。 # groupadd smmsp # useradd smmsp -d /var/spool/clientmqueue -s /dev/null # mkdir /var/spool/clientmqueue # chown -R smmsp:smmsp /var/spool/clientmqueue # chmod -R 770 /var/spool/clientmqueue # mkdir /etc/mail # mkdir /var/spool/mqueue # chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue # chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue ok,接下來就可以進入源碼目錄樹開始編譯了。 # ./Build -c -c選項能刪除上次編譯產生的文件。 # ./Build install 編譯完成後就可以進行安裝。 5、sendmail配置 要sendmail正常運行,還需配置幾個文件,首先最重要的就是sendmail.cf 文件了。它在源碼目錄樹下的cf/cf目錄下有很多例子可參考。你可以拷貝使用。由於sendmail.cf中的語法很復雜,所以不建議手工修改。我們可以以sendmail.mc文檔配合sendmail-cf目錄下的宏通過m4預處理器自動生成。m4預處理器用來從一組宏文件中創建sendmail配置文件。宏文件作為輸入被讀進來。宏被展開,然後寫到一個輸出文件。sendmail-cf目錄一般放在/usr/share目錄下。其實sendmail-cf目錄的內容和源碼目錄樹下的cf目錄的內容是一樣的,所以,為了保證sendmail-cf目錄的內容與安裝版本同步,要把源碼目錄樹下的cf目錄的內容拷貝到/usr/share/sendmail-cf目錄。 sendmail.mc配置文檔內容如下: divert(-1) include(`/usr/share/sendmail-cf/m4/cf.m4') VERSIONID(`linux setup for Red Hat Linux')dnl OSTYPE(`linux') dnl Uncomment and edit the following line if your mail needs to be sent out dnl through an external mail server: dnl define(`SMART_HOST',`smtp.your.provider') define(`confDEF_USER_ID',``8:12'')dnl undefine(`UUCP_RELAY')dnl undefine(`BITNET_RELAY')dnl dnl define(`confAUTO_REBUILD')dnl define(`confTO_CONNECT', `1m')dnl define(`confTRY_NULL_MX_LIST',true)dnl define(`confDONT_PROBE_INTERFACES',true)dnl define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl define(`ALIAS_FILE', `/etc/mail/aliases')dnl define(`STATUS_FILE', `/etc/mail/statistics')dnl define(`UUCP_MAILER_MAX', `2000000')dnl define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noeXPn,restrictqrun')dnl define(`confAUTH_OPTIONS', `A')dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl dnl define(`confCACERT_PATH',`/usr/share/ssl/certs') dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt') dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem') dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem') dnl define(`confTO_QUEUEWARN', `4h')dnl dnl define(`confTO_QUEUERETURN', `5d')dnl dnl define(`confQUEUE_LA', `12')dnl dnl define(`confREFUSE_LA', `18')dnl define(`confTO_IDENT', `0')dnl dnl FEATURE(delay_checks)dnl FEATURE(`no_default_msa',`dnl')dnl FEATURE(`smrsh',`/usr/sbin/smrsh')dnl FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl FEATURE(redirect)dnl FEATURE(always_add_domain)dnl FEATURE(use_cw_file)dnl FEATURE(use_ct_file)dnl dnl The '-t' option will retry delivery if e.g. the user runs over his quota. FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl FEATURE(`Access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl FEATURE(`blacklist_recipients')dnl EXPOSED_USER(`root')dnl dnl This changes sendmail to only listen on the loopback device 127.0.0.1 dnl and not on any other network devices. Comment this out if you want dnl to accept email over the network. DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA') dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires dnl a kernel patch dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6') dnl We strongly recommend to comment this one out if you want to protect dnl yourself from spam. However, the laptop and users on computers that do dnl not have 24x7 DNS do need this. FEATURE(`accept_unresolvable_domains')dnl dnl FEATURE(`relay_based_on_MX')dnl MAILER(smtp)dnl MAILER(procmail)dnl 記得要使以下兩個條語句有效,它的意思是如果access.db訪問控制沒有設置,則啟用以下驗證方式進行smtp驗證。 TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl sendmail宏定義說明 divert(n) 為m4定義一個緩沖動作,當n=-1時緩沖被刪除,n=0時開始一個新緩沖 OSTYPE 定義宏所使用的操作系統,該宏允許m4程序增加同相關操