--
sendmail
MUA(mail user agent 郵件使用者代理),用於使用者端發送郵件或者閱讀郵件linux有mutt這個工具
MTA(mail tranfer agent 郵件傳輸代理程式 ),相當於一個郵局,server端的軟體,主要的功能有,接收MUA發來的郵件和把郵件發送給下一個MTA,可以說是一個郵件路由(mail router),server端的軟體就屬於MTA,現在開源的有sendmail,postfix,qmail等
MDA(mail devilery agent 郵件投遞代理),主要是將MTA所接受的郵件,依照郵件的目的地將此郵件放到本機帳號下或者是給下一個MTA,一般就是指mail這樣的命令
郵件的協議:
發信:SMTP(simple mail tranfer protocol 簡易郵件傳輸通訊協定) 連接埠號碼 TCP的25連接埠,在發信時,MUA會主動串連MTA的port 25,然後經由SMTP協議發送出去,SMTP分為接受SMTP和發送SMTP,它不管兩端主機的配置或者系統等,只要兩邊SMTP協議OK就可以發送郵件
收信:POP (post office protocol 郵局協議),來串連到MTA,以讀取或者下載郵件,現在常用的版本是POP3,連接埠為110
IMAP (internet message access protocol 網路報檔案協議),能在下載郵件前先下載郵件標頭資訊,以可以讓使用者選擇性下載連接埠 143
軟體包
yum install sendmail*
yum install dovecot
sendmail.i386 --郵件伺服器端 MTA
sendmail-cf.i386 --設定檔包
sendmail-devel.i386 --開發包
sendmail-doc.i386 --文檔包
dovecot.i386--(鴿舍),pop郵件服務端 MDA
m4.i386 --處理設定檔的包
連接埠 : smtp (25) pop3 (110) imap (143)
協議:TCP
服務啟動指令碼:
/etc/init.d/sendmail
/etc/init.d/dovecot
設定檔:
/etc/mail/sendmail.cf--sendmail郵件服務啟動時讀取的主設定檔
/etc/mail/sendmail.mc --管理員修改sendmail伺服器功能時的設定檔
/etc/mail/local-host-names --配置支援發送郵件時使用短網域名稱形式
/etc/mail/virtusertable--虛擬使用者列表
/etc/aliases--使用者別名
/etc/mail/access--漏洞轉發匿名郵件
/etc/init.d/sendmail restart
[root@li ~]# netstat -ntl |grep 25--看到預設是只監聽了127.0.0.1的迴環地址
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
--發送郵件方法一:
[root@li ~]# mail -s "mail" root@li.cluster.com --用此命令發送郵件-s後接郵件主題
1111--寫郵件內容
.--“." 點號表示結束
Cc:--直接斷行符號退出
[root@li ~]# mail -s 'yyyy' a@li.cluster.com 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>&1; 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協議監聽所有連接埠
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(非迴環地址)做smtp協議的測試是可以做的,如果只監聽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收發郵件
用claws-mail 發送一封郵件給本機使用者,能寫,但點收信時會報串連到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--再查看連接埠,發現沒有110連接埠,表示pop3協議沒有配置
所以要去配置dovecot服務
[root@li /]# vim /etc/dovecot.conf
protocols = imap imaps pop3 pop3s--在20行找到有一行注釋,開啟注釋,或者寫一行,表示支援pop3和imap協議
/etc/init.d/dovecot restart--重啟服務後,就可以看到監聽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
然後就可以收郵件了
例三:使用支援短網域名稱來發送郵件
[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 --寫上下面兩句
本伺服器主機名稱
本伺服器網域名稱
/etc/init.d/sendmail reload
再用短網域名稱發送並測試發現是可以成功的
例四:郵件暱稱,郵件轉寄,郵件群發
[root@li /]# vim /etc/aliases
加上
a:b--表示發送給a使用者的郵件,發給了b使用者,a使用者自己收不到
c:d,e,f--表示發送c使用者的郵件,發給了d,e,f三個使用者,a使用者自己收不到
salegroup: :include:/etc/mail/salegroup--還可以這樣寫,把一些使用者分組,注意/etc/mail/salegroup是不存在的,要手動建立並把這個組的成員寫進去,一行一個使用者;測試時發給的使用者名稱要寫成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--所有發往cluster.com域的郵件都會發到本地的c使用者的mailbox
/etc/init.d/sendmail reload
例五:漏洞轉發匿名郵件
保持上面的配置不變的情況下,用另一台電腦做測試
[root@dns ~]# telnet 10.1.1.35 25--另一台電腦測試35這台伺服器上的smtp協議
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 li.cluster.com Hello [10.1.1.218], pleased to meet you
mail from:sdfsa@baidu.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.218OK--非常信任的主機可以用OK
Connect:10.1.1 RELAY--表示允許10.1.1.0網段中繼
FROM:sina.comREJECT--表示從sina.com來的郵件都拒絕
TO:baidu.comdiscard--到baidu.com的郵件丟棄
--reject和discard的區別,discard是直接丟棄,reject還要返回一個錯誤或者警告
我在這裡加上了
Connect:10.1.1 RELAY
/etc/init.d/sendmail reload
再用剛才的另一台電腦來測試(要是10.1.1.0網段,因為上面我只允許這個網段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
250 li.cluster.com Hello [10.1.1.218], pleased to meet you
mail from:sfsafa@163.com
250 2.1.0 sfsafa@163.com... Sender ok
rcpt to:sdfsadf@gmail.com
250 2.1.5 sdfsadf@gmail.com... Recipient ok--這次測試沒有報relay deny的錯誤
-------------------------------------------------------------------
使用smtp驗證
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
250-li.cluster.com Hello li.cluster.com [10.1.1.35], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN--看到這裡有login plain驗證資訊表示支援smtp驗證
250-DELIVERBY
250 HELP
驗證:
[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:45:12 +0800
helo li.cluster.com
250 li.cluster.com Hello li.cluster.com [10.1.1.35], pleased to meet you
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
250 li.cluster.com Hello li.cluster.com [10.1.1.35], pleased to meet you
mail from:sfsafsa@sina.com
530 5.7.0 Authentication required--現在就會看到需要驗證
auth login--開始驗證
334 VXNlcm5hbWU6
a--輸入使用者名稱,會報錯,因為這裡是用base64位編碼
501 5.5.4 cannot decode AUTH parameter a
auth login
334 VXNlcm5hbWU6
YQ==--這就是a的base64位編碼
334 UGFzc3dvcmQ6
MTIz--這是123的base64位編碼
235 2.0.0 OK Authenticated--驗證成功,可以發送郵件了
mail from:sdfasfas@sina.com
250 2.1.0 sdfasfas@sina.com... Sender ok
rcpt to:b@cluster.com
250 2.1.5 b@cluster.com... Recipient ok
data
354 Enter mail, end with "." on a line by itself
last test
.
250 2.0.0 o4T8twFU025598 Message accepted for delivery
quit
221 2.0.0 li.cluster.com closing connection
Connection closed by foreign host.
cat /var/mail/b 是可以看到發送的郵件
---------------
用claws-mail來驗證
點設定--目前帳號的喜好設定--發送--把SMTP鑒權(SMTP AUTH)前面的勾打上--鑒權方式選PLAIN--使用者ID和密碼寫上原生一個普通名和其密碼就OK
再發送信件等都是經過了SMTP驗證的
-------------------
下面是一個base64編碼線上轉換的一個網頁
http://www.motobit.com/util/base64-decoder-encoder.asp