linux sendmail配置詳解
sendmailMUA (mail user agent 郵件用戶代理),用于用戶端發(fā)送郵件或者閱讀郵件 linux有mutt 這個工具MTA (mail tranfer agent 郵件傳輸
sendmail
MUA (mail user agent 郵件用戶代理),用于用戶端發(fā)送郵件或者閱讀郵件 linux有mutt 這個工具
MTA (mail tranfer agent 郵件傳輸代理 ),相當于一個郵局,server 端的軟件,主要的功能有,接收MUA 發(fā)來的郵件和把郵件發(fā)送給下一個MTA ,可以說是一個郵件路由(mail router),server 端的軟件就屬于MTA ,現(xiàn)在開源的有sendmail,postfix,qmail 等
MDA (mail devilery agent 郵件投遞代理),主要是將MTA 所接受的郵件,依照郵件的目的地將此郵件放到本機賬號下或者是給下一個MTA ,一般就是指mail 這樣的命令
郵件的協(xié)議:
發(fā)信: SMTP (simple mail tranfer protocol 簡單郵件傳輸協(xié)議) 端口號 TCP 的25端口,在發(fā)信時,MUA 會主動連接MTA 的port 25,然后經(jīng)由SMTP 協(xié)議發(fā)送出去,SMTP 分為接受SMTP 和發(fā)送SMTP ,它不管兩端主機的配置或者系統(tǒng)等,只要兩邊SMTP 協(xié)議OK 就可以發(fā)送郵 件
收信: POP (post office protocol 郵局協(xié)議),來連接到MTA ,以讀取或者下載郵件,現(xiàn)在常用的版本是POP3,端口為110
IMAP (internet message access protocol 網(wǎng)絡報文件協(xié)議),能在下載郵件前先下載郵件頭信息,以可以讓用戶選擇性下載 端口 143
軟件包
yum install sendmail*
yum install dovecot
sendmail.i386 --郵件服務器端 MTA sendmail-cf.i386 --配置文件包
sendmail-devel.i386 --開發(fā)包
sendmail-doc.i386 --文檔包
dovecot.i386 --(鴿舍) ,pop 郵件服務端 MDA
m4.i386 --處理配置文件的包
端口 : smtp (25) pop3 (110) imap (143)
協(xié)議: TCP
服務啟動腳本:
,/etc/init.d/sendmail
/etc/init.d/dovecot
配置文件:
/etc/mail/sendmail.cf --sendmail郵件服務啟動時讀取的主配置文件 /etc/mail/sendmail.mc --管理員修改sendmail 服務器功能時的配置文件 /etc/mail/local-host-names --配置支持發(fā)送郵件時使用短域名形式
/etc/mail/virtusertable --虛擬用戶列表
/etc/aliases --用戶別名
/etc/mail/access --郵件中繼
/etc/init.d/sendmail restart
[root@li ~]# netstat -ntl |grep 25 --看到默認是只監(jiān)聽了127.0.0.1的回環(huán)地址
tcp 0 0
127.0.0.1:25 0.0.0.0:* LISTEN --發(fā)送郵件方法一:
[root@li ~]# mail -s "mail" root@li.cluster.com --用此命令發(fā)送郵件 -s后接郵件主題
1111 --寫郵件內容
. --“." 點號表示結束
Cc: --直接回車退出
[root@li ~]# mail -s 'yyyy' a@li.cluster.com < /etc/grub.conf --還可以這樣把/etc/grub.conf的內容直接發(fā)送給a 用戶
--查看郵件方法一:
cat /var/mail/root
cat /var/spool/mail/root --查看這兩個一樣的 這樣是可以查看到剛才發(fā)送的郵件,因為一個是自己發(fā)送給自己用的127.0.0.1這個回環(huán)地址,這種情況不需要DNS 的MX 支持
--發(fā)送郵件方法二:
[root@li ~]# telnet 127.0.0.1 25 --對smtp 協(xié)議進行驗證
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 11:30:09 0800
helo li.cluster.com --定義來訪者,可以用help 去查看支持哪些命令集,用help +命令來看單個命令如何使用
,meet you
mail from:aa@sina.com --定義一個發(fā)送者,這里可以隨便定義
250 2.1.0 aa@sina.com... Sender ok
rcpt to:a@li.cluster.com --定義接收者,這里是我本機的a 用戶
250 2.1.5 a@li.cluster.com... Recipient ok
data --表示下面要寫郵件內容
354 Enter mail, end with "." on a line by itself
4444444444 --隨便寫上你要發(fā)送的郵件的內容
. --"." 點號表示結束
250 2.0.0 o4T3U9l1026581 Message accepted for delivery
quit --quit退出,有時候一次退不出,就多敲幾次quit
221 2.0.0 li.cluster.com closing connection
Connection closed by foreign host.
yum install mutt
mutt --是一個在unix-like 系統(tǒng)下小巧但強大的基于文本的一個能發(fā)送和閱讀郵件的工具(MUA )
--查看郵件方法二:
直接在root 用戶下使用mutt 命令,可以看到root 用戶的收信箱
如果要看普通的郵件,就要先su - 普通用戶名 切換到普通用戶再使用mutt 命令查看
--發(fā)送郵件方法三:
[root@li ~]# mutt a@li.cluster.com --可以直接使用這樣的命令發(fā)送給a@li.cluster.com
,會提示用戶寫內容,還有附件等功能
--發(fā)送郵件方法四:
[root@li ~]# cat /etc/rc.local |sendmail -v a@li.cluster.com
-------------------------
下面先把DNS 的MX 記錄給配置好
[root@li mail]# vim
/var/named/chroot/var/named/data/master.cluster.com.zone
$TTL 86400
@ IN SOA li.cluster.com. root.cluster.com. ( 2010051605
60
60
360
86400)
,IN NS li.cluster.com.
IN MX 0 li.cluster.com. --MX是郵件交換記錄,0是代表優(yōu)先級別,可以寫多個,數(shù)字越小優(yōu)先級越高
li IN A 10.1.1.35
pop IN A 10.1.1.35
smtp IN A 10.1.1.35
/etc/init.d/named reload
vim /etc/resolv.conf --DNS指向改為本機
[root@li mail]# nslookup --驗證MX 記錄的方法
> set type=mx
> cluster.com
Server: 10.1.1.35
Address: 10.1.1.35#53
cluster.com mail exchanger = 0 li.cluster.com. --看到這樣的信息表示成功
最好把時間同步也配好
[root@li mail]# echo 'while :; do ntpdate 10.1.1.1> /dev/null 2>/dev/null; sleep 10; done'>> /etc/rc.local
--每十秒同步一次10.1.1.1,放到/etc/rc.local里,開機自動運行
把郵件客戶端軟件claws-mail 拷過去裝好
ls /share/soft/soft/mail_client/
tar xvf /share/soft/soft/mail_client/claws-mail-3.5.0.tar.gz -C /usr/src/
tar xvf /share/soft/soft/mail_client/libetpan-0.57.tar.gz -C /usr/src/ cd /usr/src/libetpan-0.57/
./configure ;make ;make install
cd /usr/src/claws-mail-3.5.0/
./configure ;make ;make install
例一:讓smtp 協(xié)議監(jiān)聽所有端口
,vim /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl --把127.0.0.1改為0.0.0.0,或者是把中間那一小段去掉
保存退出
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf --如果沒有裝m4.i386這個包,就需要使用m4命令去生成sendmail.cf 配置文件,裝了就不需要,重啟sendmail 服務自動生成
/etc/init.d/sendmail restart
[root@li claws-mail-3.5.0]# netstat -ntl|grep 25
tcp 0 0
0.0.0.0:25 0.0.0.0:* LISTEN
[root@li claws-mail-3.5.0]# telnet 10.1.1.35 25 --對本機的IP (非回環(huán)地址)做smtp 協(xié)議的測試是可以做的,如果只監(jiān)聽127.0.0.1,就不能這樣用IP 測試
Trying 10.1.1.35...
Connected to li.cluster.com (10.1.1.35).
Escape character is '^]'.
220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 13:47:01 0800
helo li.cluster.com
250 li.cluster.com
.................
例二:用claws-mail 收發(fā)郵件
用claws-mail 發(fā)送一封郵件給本機用戶,能寫,但點收信時會報連接到pop.cluster.com:110失敗
原因檢驗:
[root@li /]# nslookup pop.cluster.com --先查看DNS ,能解析
Server: 10.1.1.35
Address: 10.1.1.35#53
,Name: pop.cluster.com
Address: 10.1.1.35
netstat -ntl |grep 110 --再查看端口,發(fā)現(xiàn)沒有110端口,表示pop3協(xié)議沒有配置
所以要去配置dovecot 服務
[root@li /]# vim /etc/dovecot.conf
protocols = imap imaps pop3 pop3s --在20行找到有一行注釋,打開注釋,或者寫一行,表示支持pop3和imap 協(xié)議
/etc/init.d/dovecot restart --重啟服務后,就可以看到監(jiān)聽143和110端口打開了
[root@li /]# netstat -ntlup |grep 143
tcp 0 0 :::143 :::* LISTEN 21674/dovecot
[root@li /]# netstat -ntlup |grep 110
tcp 0 0 :::110 :::* LISTEN 21674/dovecot
然后就可以收郵件了
例三:使用支持短域名來發(fā)送郵件
[root@li /]# mail -s '222' a@cluster.com --使用短域名
222222
.
Cc:
[root@li /]# tail /var/mail/a --查看時看不到,表示不支持短域名
[root@li /]# tail /var/mail/root --可以看到扔到root 的郵箱去了 配置方法:
[root@li /]# vim /etc/mail/local-host-names --寫上短域名
cluster.com
jordon.com
meijinsz.com.cn
--注意的是寫的域名,最好是DNS 能解析,否則測試失敗
,/etc/init.d/sendmail reload
再用短域名發(fā)送并測試發(fā)現(xiàn)是可以成功的
例四:郵件別名,郵件轉發(fā),郵件群發(fā)
[root@li /]# vim /etc/aliases
加上
a: b --表示發(fā)送給a 用戶的郵件,發(fā)給了b 用戶,a 用戶自己收不到
c: d,e,f --表示發(fā)送c 用戶的郵件,發(fā)給了d,e,f 三個用戶,a 用戶自己收不到
salegroup: :include:/etc/mail/salegroup --還可以這樣寫,把一些用戶分組,注意/etc/mail/salegroup是不存在的,要手動建立并把這個組的成員寫進去,一行一個用戶;測試時發(fā) 給的用戶名要寫成salegroup ,例如:mail -s '7777' salegroup@cluster.com
/etc/init.d/sendmail reload
例五:郵件的虛擬賬號,虛擬用戶表格
[root@li /]# vim /etc/mail/virtusertable a@cluster.com b@cluster.com --把b@cluster.com的賬號虛擬成a@cluster.com賬號
@cluster.com c --所有發(fā)往cluster.com 域的郵件都會發(fā)到本地的c 用戶的mailbox
/etc/init.d/sendmail reload
例五:郵件中繼
保持上面的配置不變的情況下,用另一臺電腦做測試
[root@dns ~]# telnet 10.1.1.35 25 --另一臺電腦測試35這臺服務器上的smtp 協(xié)議
Trying 10.1.1.35...
Connected to 10.1.1.35 (10.1.1.35).
Escape character is '^]'.
220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 15:39:36 0800
helo dns.lu.com
,250 2.1.0 sdfsa@baidu.com... Sender ok
rcpt to:sfsadfa@qq.com
550 5.7.1 sfsadfa@qq.com... Relaying denied. --可以看到中繼拒絕
[root@li /]# vim /etc/mail/access --默認是只允許127.0.0.1中繼
Connect:10.1.1.218 OK --非常信任的主機可以用OK
Connect:10.1.1 RELAY --表示允許10.1.1.0網(wǎng)段中繼 FROM :sina.com REJECT --表示從sina.com 來的郵件都拒絕
TO:baidu.com discard --到baidu.com 的郵件丟棄
--reject 和discard 的區(qū)別,discard 是直接丟棄,reject 還要返回一個錯誤或者警告
我在這里加上了
Connect:10.1.1 RELAY
/etc/init.d/sendmail reload
再用剛才的另一臺電腦來測試(要是10.1.1.0網(wǎng)段,因為上面我只允許這個網(wǎng)段relay )
[root@dns ~]# telnet 10.1.1.35 25
Trying 10.1.1.35...
Connected to 10.1.1.35 (10.1.1.35).
Escape character is '^]'.
220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 15:51:35 0800
helo dns.lu.con
,yum install cyrus-sasl*
vim /etc/mail/sendmail.mc --把下面三行注釋打開
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
/etc/init.d/sendmail restart
/etc/init.d/dovecot restart
/etc/init.d/saslauthd restart
[root@li /]# telnet 10.1.1.35 25
Trying 10.1.1.35...
Connected to li.cluster.com (10.1.1.35).
Escape character is '^]'.
220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 16:42:54 0800
ehlo li.cluster.com --注意這里是ehlo 不是 helo
,mail from:fsfafa@baidu.com
250 2.1.0 fsfafa@baidu.com... Sender ok --這里沒有要求驗證
原因:是因為smtp 驗證默認只是在587端口,而不是25端口,所以你還是直接telnet 10.1.1.35 25 就避開了使用smtp 驗證
vim /etc/mail/sendmail.mc
把下面這句
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
改為
DAEMON_OPTIONS(`Port=25, Name=MSA, M=Ea')dnl
然后還要
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl --把這名注釋掉,注意注釋時用dnl ,不用#
--表示強制使用smtp 驗證
/etc/init.d/sendmail restart
[root@li /]# telnet 10.1.1.35 25
Trying 10.1.1.35...
Connected to li.cluster.com (10.1.1.35).
Escape character is '^]'.
220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 16:55:58 0800
helo li.cluster.com