要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程序增加同相關操作系統相關的文件
-
Domain定義MTA將使用哪些域來傳輸郵件
-
Feature定義配置文件中使用的一個特定的功能集
-
Define定義配置文件中的一個特定的選項值
-
MASQUERADE_AS定義sendmail來應答郵件的其它主機名
-
MAILER定義sendmail使用的郵件傳輸方法
-
dnl注釋
完成sendmail.mc文檔的編寫后就可以用m4程序生成正式的sendmail.cf配置文檔。語法如下:
# m4 sendmail.mc > sendmail.cf
也可以用源碼目錄樹下的cf/cf/Build命令生成。前提是你要在該目錄下有一個sendmail.mc文檔。語法如下:
# ./Build sendmail.cf
接著就可以把sendmail.cf and submit.cf文檔安裝到/etc/mail目錄中的,語法如下:
# ./Build install-cf
其實也可以自已用cp命令拷貝的啦。記得把sendmail.mc文檔也拷貝一份到/etc/mail目錄,以便以后修改配置時可重新生成sendmail.cf文檔。ok,接著到/etc/mail目錄下配置一些文檔。
debian:~# cd /etc/mail
debian:/etc/mail# echo 'examply.com' >> local-host-names 接收郵件的主機名
debian:/etc/mail# echo 'localhost RELAY' >> access 用來拒絕或允許來自某個域的郵件,本例允許本地轉發。
debian:/etc/mail# makemap hash access < access 生成access.db數據庫
debian:/etc/mail# touch domaintable 用來把舊域名映射互新域名
debian:/etc/mail# makemap hash domaintable < domaintable
debian:/etc/mail# touch mailertable 來覆蓋向指定域的路由
debian:/etc/mail# makemap hash mailertable < mailertable
debian:/etc/mail# touch trusted-users
debian:/etc/mail# touch virtusertable 用來把用戶和域名映射到其它地址
debian:/etc/mail# makemap hash virtusertable < virtusertable
debian:/etc/mail# chown root:wheel /var/spool/mqueue/
debian:/etc/mail# chmod 700 /var/spool/mqueue
debian:/etc/mail# touch aliases 別名數據庫,文本形式。可參照源碼目錄樹下sendmail/aliases文件。
debian:/etc/mail# newaliases 從文本文件中創建一個新的別名數據庫文件。
debian:/etc/mail# sendmail -v -bi調試啟動。
/etc/mail/aliases: 42 aliases, longest 10 bytes, 432 bytes total
如果出現以上提示信息,則啟動成功。可用以下命令正式啟動:
debian:/etc/mail# sendmail -bd -q30m
該命令以后臺進程方式(-bd)運行,并使其每隔30分鐘(-q30m)輪詢一次未發送郵件隊列,檢查是否有新郵件。
服務器啟動后,可以用telnet連接服務器。
debian:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 test.tigerhead ESMTP Sendmail 8.12.10/8.12.10; Tue, 30 Mar 2004 14:50:14 +0800
ehlo test你輸入的命令,按回車結束。
250-test.tigerhead Hello LOCALHOST.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
250-DELIVERBY
250 HELP
以250-開頭的為服務器的響應信息。注意倒數第三行,這就是成功配置smtp驗證的顯示。
輸入quit離開。
安裝完成后為確保系統安全,還需調整一些目錄的權限。可參考sendmail源碼目錄下sendmail/SECURITY文檔。
# chmod 0640 /etc/mail/aliases /etc/mail/aliases.{db,pag,dir}
# chmod 0640 /etc/mail/*.{db,pag,dir}
# chmod 0640 /etc/mail/statistics /var/log/sendmail.st
# chmod 0600 /var/run/sendmail.pid /etc/mail/sendmail.pid
-r-xr-sr-xroot smmsp... /PATH/TO/sendmail
drwxrwx---smmsp smmsp... /var/spool/clientmqueue
drwx------root wheel... /var/spool/mqueue
-r--r--r--root wheel... /etc/mail/sendmail.cf
-r--r--r--root wheel... /etc/mail/submit.cf