linux下sendmail的配置(源碼包)

 
 
Sendmail配置
安裝所需軟件
sendmail.8.12.10.tar.gz   http://www.sendmail.org/
cyrus-sasl-2.1.18.tar.gz http://asg.web.cmu.edu/cyrus/
安裝步驟
一、        先安裝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程序安裝三步曲以後,就能夠開始配置和測試了。
二、配置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
三、測試
ok,如今能夠運行saslauthd了,並進行測試。
# cd /usr/local/sasl2/sbin
# ./saslauthd -a shadow               
用shadow的用戶和密碼進行驗證
# ./testsaslauthd -u userid -p password
0: OK "Success."
若是出現以上信息,就說明saslauthd正常運行了。testsaslauthd程序默認是沒有編譯的,你
須要在源碼目錄樹的saslauthd子目錄中運行     # make testsaslauthd命令生成。
四、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')
第一行配置正則表達式相關內容
第2、三行配置表示在sendmail程序中支持sasl2和tcp_wrapper(可經過hosts.allow和
hosts.deny控制訪問)
第4、五行配置指出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
編譯完成後就能夠進行安裝。
五、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程序增長同相關操做系統相關的
文件
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
ok,接着就能夠把sendmail.cf and submit.cf文檔安裝到/etc/mail目錄中的,語法以下:
# ./Build install-cf
其實也能夠自已用cp命令拷貝的啦。記得把sendmail.mc文檔也拷貝一份到/etc/mail目錄,
以便之後修改配置時可從新生成sendmail.cf文檔。
ok,接着到/etc/mail目錄下配置一些文檔。
# cd /etc/mail
# echo 'examply.com' >;>; local-host-names         接收郵件的主機名
# echo 'localhost    RELAY' >;>; access                 用來拒絕或容許來自某個域的郵件,本例容許
本地轉發。
# makemap hash access < access                         生成access.db數據庫
# touch domaintable                                 用來把舊域名映射互新域名
# makemap hash domaintable < domaintable        
# touch mailertable                                 來覆蓋向指定域的路由
# makemap hash mailertable < mailertable        
# touch trusted-users
# touch virtusertable                                 用來把用戶和域名映射到其它地址
# makemap hash virtusertable < virtusertable        
# chown root:wheel /var/spool/mqueue/
# chmod 700 /var/spool/mqueue
# touch aliases                                 別名數據庫,文本形式。可參照源碼目錄樹下
sendmail/aliases文件。
# newaliases                                          從文本文件中建立一個新的別名數據庫文件。
# sendmail -v -bi                                調試啓動。
/etc/mail/aliases: 42 aliases, longest 10 bytes, 432 bytes total
若是出現以上提示信息,則啓動成功。可用如下命令正式啓動:
# sendmail -bd -q30m
該命令之後臺進程方式(-bd)運行,並使其每隔30分鐘(-q30m)輪詢一次未發送郵件隊
列,檢查是否有新郵件。
服務器啓動後,能夠用telnet鏈接服務器。
# 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-x        root   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
六、sendmail功能介紹
aliases 別名數據庫設置
test:        test1,test2,test3        設置test羣組別名,test不是一個實際的用戶,只是一個別名。發給
test的信,test1,2,3均可收到。
test:        test,testbak                在testbak郵箱中備份test的郵件。
test:        test,test@163.com        遠程郵件備份,原理同上。
test:   :include: /etc/mail/userlist        使用用戶列表設置羣組。
userlist格式以下:
test1, \
test2, \
test3, \
test4
關於系統預設aliases,因爲sendmail預設用mailer-daemon and postmaster做爲資料傳送者,
或郵件退回的賬號,但系統實際沒有這兩個賬號,因此要以下設置別名。
mailer-daemon: postmaster
postmaster:     root
設置完成後不要忘了用newaliases命令生成數據庫。
~/.forward文件配置
其實該文檔的做用和aliases數據庫的做差很少啦,都是配置別名,作郵件轉發的。由於alises
只能由管理員控制,我的用戶不能修改,因此就能夠在我的的目錄下創建一個轉寄文檔。以
設置我的的郵件轉寄列表。文檔格式以下:
test
test1
test2
test3
and os on
但因爲我的用戶安全意識差,若是設置不當會有安全漏洞,不建議使用。
access訪問控制列表設置
92.168 RELAY
test.NET        OK
test.COM REJECT
test.COM        550 SORRY,WE DON'T ALLOW SPAMMERS HERE
test.ORG        DISCARD
Ok--遠程主機能夠向你的郵件服務器發送郵件;
RELAY--容許中轉;
REJECT--不能向你的郵件服務器發郵件和不能中轉;
DISCARD--發來的郵件將被丟棄,同時並不向發送者返回錯誤信息。
nnn text-- 發來的郵件將被丟棄,但sendmail將會向發送者返回nnn肯定的smtp代碼和text
變量肯定的文本描述。
設置完成後要用makemap hash access.db < access命令生成數據庫。
mailq郵件隊列查詢命令。
Q-ID                        郵件id號。
Size                        郵件容量。
Q-Time                        郵件進入隊列(也就是/var/spool/mqueue目錄)的時間和不能郵寄的緣由。
Sender/Recipient        發信和收信人的郵箱地址。
mailstats郵寄狀態查詢命令,可查詢sendmail運行做至今郵件收發總計資料。
M     :
msgsfr:發送的郵件數量。
bytes_from:郵件容量
megsto:收到郵件的數量。
bytes_to:同上
msgsrej:郵件deny的次數。
msgsdis:郵件discard的次數。
Mailer :esmtp對外郵件 ,local本地郵件 。
mail郵件命令
mail                                查看/var/spool/mail/目錄下自已郵箱內容。以q退出把看過的郵件保存在
~/mbox中。
mail test@example.com                直接發郵件給人。
mail -s 'title text' test@example.com < mail.txt         把文檔中內容郵寄出去。
mail -f ~/mbox                        查看home目錄下郵箱內容。
用mail發附件也是可行,要用到uuencode and uudecode命令進行編碼。
編碼:uuencode [file] name          example:uuencode hello hello>;hello.uue   default input
is stdin;default output is stdout.
解碼:uudecode [-o outfile] name    example:uudecode hello.uue 能夠用-o選項輸出另一個
文件名。
# uuencode ~/.bashrc bashrc | mail -s 'test uuencode' test@example.com
5、其餘設置。
要想更好的使用sendmail,經常使用到的一些設置:
一、限制最大郵件。
vi /etc/sendmail.cf
# maximum message size
O MaxMessageSize=5000000    (注:5M)
二、最大的羣發數目。
vi /etc/sendmail.cf
# maximum number of recipients per SMTP envelope
O MaxRecipientsPerMessage=20 (注:20個)
三、域名文件----local-host-name
能夠用他來實現虛擬域名或多域名支持。
/etc/mail/local-host-name
v1mail.com
v2mail.com
.......
四、mail別名文件--aliases。
vi /etc/aliases
系統內部別名:peng:zpeng,hero,mmmn,yt   peng是個人用戶名,其餘的是別名,用逗號隔開。
轉發到其餘的郵箱:peng:zpeng@sina.com,yt.sohu.com
#newaliases   --寫到庫中
五、郵件控制文件--access
relay、ok、reject和discard。relay能夠實現轉發。ok是用來容許用戶的任意訪問,它會覆蓋任何其它已創建的檢查(實際設置中,最好別設這項,除非你對該用戶是絕對信任的);reject能夠實現對來訪地址的拒絕,它根本就不允許該地址與你的郵件服務器進行鏈接通訊;discard的做用是在接收到傳輸的郵件消息後,偷偷地把它丟棄掉(在發送者看來,他的郵件的確是接收了,但他並不知道,發送的目的地址根本不可能接收到他的郵件,服務器巧妙地欺騙了他。
vi /etc/mail/access.
localhost.localdomain    RELAY      ---容許
localhost                        RELAY
127.0.0.1                       RELAY
peng@sina.com              ok
@sexgirl.net                   reject
211.77.22.45                  discard
#makemap hash access.db < access --寫入庫中
六、虛擬用戶文件---virtusertable.
這個文件能夠mail重名問題。
例如:你有兩個域名,virt1.com and virt2.com,可是都有peng這個用戶:
peng@virt1.com and peng@virt2.com,這是兩個用戶。但對於系統用戶來講,他只認系統用戶peng,只能經過一下改:
vi /etc/mail/virtusertable
peng@virt2.com   r010
這樣就能夠了。在新開一個用戶r010,可是 peng@virt2.com在客戶端的pop3 and smtp server的用戶名和口令要用r010的。
#makemap hask virtusertable.db < virtusertable
# /usr/sbin/sendmail -d0.1 -bv root |grep SASL         NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF
相關文章
相關標籤/搜索