一、了解電子郵件
在世界上,數以百萬計的計算機用戶已經訪問過電子郵件。Email已經成為互聯網上最重要的服務,你可能沒用過ftp,沒上過BBS,沒有自己的主頁,但你應該有一個自己的電子郵件信箱。大量的商業網絡或Internet服務提供商(ISP)可以使你在世界范圍內訪問電子郵件。電子郵件是在單機系統上的或在網絡系統上的用戶用來發送和接收電子信息的任何程序。它有如下優點:
□你可以在很短時間內把數據發送到目的地。
□你不用擔心在發送和接收電子郵件的過程中被中斷——因為這些都是由計算機系統來控制的。
□你不必與通信人預約。
□你可以在任何時間發送和接收電子郵件。
二、定制mail環境
在使用mail程序時,系統會檢測你的起始目錄中的.mailrc文件。你可以根據自己的需要在.mailrc文件中設置不同的環境變量和命令。以下列出了環境變量:
□#:表示一個注釋行
□alias:設置單個別名或組別名。用法是:alias alias-name address-list
□set:設置環境變量。用法是:set variable-name或set variable-name=string
在使用mail時,你還可以在問號(?)提示符下發出以下命令:
□askcc:在輸入消息后提示輸入cc:list。默認值是noaskcc
□asksub:在輸入消息前提示輸入Subject清單。默認時是提示輸入
□noheader:在啟動mail時,不打印可獲得的消息的標題信息。默認時是打印標題信息
□ignore:在輸入信息時,忽略中斷字符。如果連接的電話或其他通信線路上有“雜音”,這個變量很有用。默認值是noignore
□metoo:當你的名字在組別名中時,消息通常不發送給你。默認值是nometoo
以下是一個.mailrc文件的例子:
# .mailrc file for XiaoNiao
# make sure interrupts are NOT ignored
set noignore
# set variables so that promptsfor Subject and Cc always appear
set asksub
set askcc
# individual aliase
alias billy wbracksto
alias ham bbow
alias me gunter
# group aliases,mailing list
alias pirates bbow
alias research jones jreynold eackerma
alias framistan wjones imgood imgood
#End .mailrc
三、SMTP協議簡介
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它主要規定基礎的電子郵件提交系統怎么傳遞報文。對于電子郵件系統怎么從用戶接受電子郵件,用戶接口怎么給用戶顯示接到的電子郵件,電子郵件如何存儲以及電子郵件系統以怎樣的頻度發送報文等問題卻沒有作出規定。
在SMTP中,客戶機與服務器之間的通信是由可讀文本構成的。開始,客戶機通過三次握手與服務器(通常是TCP 25端口)建立一個TCP連接,然后等待服務器發送220 READY FOR MAIL。在收到220報文后,客戶機發送HELO命令。之后,電子郵件交互以MAIL命令開始,在MAIL命令中,有一個“FROM:”字段,用于在出錯是通知發信人。服務器收到MAIL命令后,發送250 OK作為響應,表示一切正常。MAIL命令成功后,客戶方就可以將收信人地址告訴服務器,這是用一連串RCPT命令來實現。服務器接收到每個RCPT命令后,發送250 OK作為響應,表示正確接收;或者發送550 No such user here作為響應,表示沒有這個用戶??蛻舴降腞CPT命令得到正確響應后,就可以DATA命令發送數據。服務器收到DATA命令后,發送354 Start mail input;end with
.給予響應。其中end with.
規定了用于結束電子郵件報文的五個連續字符,即:回車,換行,圓點,回車,換行,這就是為什么用MAIL發送郵件時,最后只含有一個圓點的行表示結束的緣故。
四、sendmail
1.sendmail簡介
Sendmail是由Eric Allman寫的程序,后來經過很多人的貢獻,才成為現在的版本。目前幾乎所有的Unix/Linux系統都使用sendmail。sendmail的功能非常強大,這就使它的配置文件非常復雜,而且它的規則集非常難看懂。下面就詳細介紹一下它的各項配置。
2. sendmail.cf配置文件
一般來說不必自己去修改sendmail.cf文件。但是有時你可能想要了解一下sendmail.cf文件的內容。sendmail.cf文件通常由若干個節組成,以下是常見的節名:
節 名 功 能
Local Information 定義有關個人主機的信息
General Macros 定義有關本地網絡的宏
Classes 定義用于特殊郵件傳輸程序的主機名群或域名群
Version Number 標識sendmail.cf文件的版本號
Special Macros 定義由sendmail所用的一些特殊的宏
Option 定義sendmail選項
Message Precedence 定義sendmail所用的各種消息的優先級值
Trusted Users 定義在發送郵件時可忽略發送者地址的用戶
Format of Headers 定義sendmail插入的郵件首部格式
Rewriting Rules 定義用于重寫郵件地址的規則
Mailers 定義sendmail用來調用郵件傳輸程序的指令
Ruleset Zero 定義一組稱為Ruleset Zero的特殊重寫規則
Machine-dependent part of Ruleset Zero 定義與配置相關的Ruleset Zero部分
sendmail.cf命令從每一行的第一格開始,#開頭的表示注釋,第一個字符表示指令,以下是每個指令的意義:
指 令 說 明
V 設定組態文件sendmail.cf的版本
M 指定一個MTA
D 定義宏x的值為value
R 重寫lhs為rhs
S 開始一個規則集合
C 定義類別宏
F 文件定義類別
O 設定sendmail.cf選項
H 定義標頭
P 優先權設定
T 信任的用戶
K 具有鍵值的數據庫
E 重設環境變量
L 擴充負載的支持
命令D用來定義宏,然后該宏就可以被sendmail.cf文件中的其他配置命令和sendmail程序自身調用。宏的名字可以是任何單個的ASCII字符,以下是sendmail中所有的內部宏:
宏 名 含 義 在sendmail.cf中定義
a RFCs822格式的原始日期
b RFCs822格式的當前日期
c Hop計數
d UNIX格式的日期
e SMTP數據項信息
f “來自”地址的發送者
g 相對于接收者的發送者的地址
h 接收主機
i 隊列標識
j 節點的正式域名 √
l UNIX的行格式 √
n 用于錯誤信息中的名字 √
o 地址中的操作符集合 √
p sendmail的PID
q 默認的發送者地址格式 √
r 所用的協議
s 發送者主機名
t 當前時間的數值表示
u 接收方用戶
v sendmail的版本號
w 該節點的主機名
x 發送者全名
z 接收者宿主目錄
命令O給sendmail的選項賦值。賦給選項的值可以是字符,整數,布耳值或時間間隔值。每個選項都在sendmail中進行了定義。以下是sendmail中所有選項的含義和用法:
選項名 用 法 含 義
A Afile 指定別名文件的名字
a aN 為@:@等待N分鐘,然后重建別名文件
B Bc 定義空代替字符
c c 將郵件隊列排隊以等待郵件傳輸程序
D D 重建別名數據庫
db db 以后臺方式傳輸
di di 交互式傳輸
dq dq 在下一個隊列運行時傳輸
ee ee 郵遞錯誤信息,總是返回退出狀態0
em em 郵回錯誤信息
ep ep 打印錯誤信息
eq eq 僅返回退出狀態,無錯誤信息
ew ew 寫回退出狀態
f f 保持UNIX風格的From行
g gn 設置郵件傳輸程序默認的GroupID為n
H Hfile 定義SMTP幫助文件的名字
I I 使用BIND名字服務器來解析所用的名字
i i 忽略入局信息中的點
L Ln 設置日志級別為n
M Mxval 設置宏x的值為val
m m 同時發往自身
N Nnet 定義宿主網絡名
o o 接受舊格式首部
Q Q 定義隊列目錄名
q qn 定義用于決定何時排隊任務的因子n
r rt 設置用于超時的內部時間間隔t
S Sfile 定義統計日志文件名
s s 在試圖傳輸前總是創建隊列文件
T Tt 設置排隊超時為t
u un 設置郵件傳輸程序默認的UserID為n
v v 以冗余方式運行
W Wpass 定義用于遠程調試的口令
X X1 如果平均負載超過1則拒絕SMTP連接
x x1 如果平均負載超過1則排隊郵件
Y Y 在不同的進程中傳輸每個排隊郵件
y yn 每個接收者作業時間優先級差為n
Z Zn 每次運行時減少n個作業優先級
z zn 同前綴一起決定郵件優先級
3.sendmail的地址重寫規則
地址重寫是sendmail的核心部分,它的作用是分析來自郵件程序的電子郵件的地址,并將它們重寫成郵件傳輸程序所需要的格式。
3.1 規則集
規則集是一組可以由數字引用的相關重寫規則。Sn命令標志一個規則集的開始,其中n是這個規則集的編號,其范圍從0~29。其中0~4號規則集是被sendmail直接調用的,它們的說明如下:
編號 說 明
0 在規則集3之后調用,它將生成一個三元組:<傳輸程序,接收方主機,接 收用戶名>
1 用于消息中所有發送者地址
2 用于消息中所有接收者地址
3 最大和最復雜的規則集,也是用于地址的第一個規則集,將地址轉化成正 規形式,即:
4 用于消息中所有地址并將內部地址轉換成外部地址形式
3.2 重寫規則
地址重寫規則由命令R定義,其格式如下:
Rlhs rhs comment
lhs,rsh和comment這三個字段之間用tab隔開。重寫規則將輸入地址與lhs進行匹配,如果成功,就按照rhs進行重寫。重寫后的結果再次與lhs匹配,如果成功,就再次按照rhs進行重寫,直到結果不再與rhs匹配。
4.使用M4
如果一行一行輸入整個sendmail.cf文件不僅麻煩也容易出錯。最簡單的方法是用M4處理程序自動產生一個sendmail.cf文件。M4是一種宏前置處理器,用來把組態文件轉換成sendmail.cf文件。它的用法很簡單,在/etc下面找到sendmail.mc文件,修改后使用:
$m4 sendmail.mc>sendmail.cf
將會生成一個sendmail.cf文件。并自動覆蓋原來的sendmail.cf文件。以下是sendmail.mc文件中各個指令的意義:
divert(-1) 管理輸出字符傳
dnl 在define后通常會自動產生空格,可以用dnl來刪除
include 包含一個文件
define arg 1 arg 2 定義宏argument1設為值argument2
undifine arg 1 取消arg1的定義
OSTYPE(@#Linux@#) 定義操作系統的類型
FEATURE 功能選項,對應到/usr/lib/sendmail-cf/feature里面的 文件名稱所定義者
MAILER 定義所有必要的郵件遞送代理程序,MTA
MASQUERADE_AS 用來處理多主機名稱問題
4.1 sendmail別名
別名是sendmail最重要的功能之一。它在aliases中定義。aliases文件的位置由sendmail.cf中的選項A指定,一般位于/etc目錄中。aliases是一個文本文件,其中每一行的格式如下:
alias:recipeint[,recipeint,...]
其中alias為郵件中地址的名字,recipient為郵件目的地址的名字。郵件目的地址名可以有很多,每個之間用逗號符隔開。下面介紹別名的幾種主要用法:
◆ 保護登陸帳號
許多網絡黑客進攻網絡計算機的第一步是獲取目標機上合法用戶的帳號,而電子郵件帳號一般和登陸帳號相同,這就使黑客有機可乘。但是可以用別名來保護合法用戶的帳號。如一位合法用戶的登陸帳號為xiaoniao,而他的電子郵件帳號可以是aaabbb。只要在別名文件中加入“aaabbb:xiaoniao”就可以達到這一目的。
◆ 電子郵件轉發
如果想要將發給xiaoniao用戶的電子郵件自動轉發給root用戶,只需在別名文件中加入“xiaoniao:root”。又如用戶xiaoniao離開這個單位。從安全角度上講應該將他的用戶帳號刪除。但是由于他不可能馬上將新的電子郵件帳號通知所有人,所以希望將他原來的電子郵件帳號保留一段時間。這只要在別名文件中加入“xiaoniao:新的電子郵件地址”。
◆ 郵件列表的實現
別名最重要的功能就是實現郵件列表。通過它可以實現填寫一個接收者地址而將信發給許多人。例如在主機上設置一個郵件列表xn_group,包括xiaoniao,lyong,twang 和lwang。只需在別名文件中加入:
xn_group:xiaoniao,lyong,twang,lwang
owner_xn_group:xiaoniao
當接收者是xn_group時,信會自動發給xiaoniao,lyong,twang和lwang。當發送郵件給xn_group是如果出錯,將把錯誤信息發給xiaoniao。
五、如何處理垃圾郵件
1.什么是垃圾郵件
電子郵件是當今最先進,最快捷的通訊工具之一,隨著她的廣泛使用麻煩也隨之而來。有時候你會莫名其妙的收到一些來路不明的郵件,它們中最多的就是那些令人生厭的廣告。也許有一天,你打開電子郵箱檢查郵件時,會看到有成千封E-mail,那么恭喜你,你被炸了。只要你上網,這些事就是無法避免的。垃圾郵件的泛濫,占用了網蟲本來就不大的信箱空間,使得真正有用的郵件要么因為信箱已滿而進不來,要么淹沒在一大堆垃圾郵件中。這使得垃圾郵件被選為1998年國際互聯網的十大新聞之一。
2. 減少垃圾郵件的方法
◆ 大多數都使用一種叫"bot"的應用程序來搜索Internet上的各個網址、聊天室、網上討論區、新聞組、公共討論區以及其他任何能夠充實他們業已龐大的數據庫的地方。你可以盡量少在這些地方公布你的電子郵件地址。
◆ 如果你需要在某初留下你的電子郵件地址,使用特殊的書寫E-mail地址的方法來對抗E-mail地址自動收集機。很多E-mail地址收集機完全依靠關鍵字母“@"來收集信箱,假設你的信箱地址為,當你需要在某處留下你的E-mail地址時,如果將你的信箱地址寫成xiaoniao AT linuxaid DOT com DOT cn,自動機就識別不出這是個E-mail地址,而稍具常識的網蟲卻能看懂這個信箱地址。
◆ 如果是Unix主機上的sendmail郵件服務器可以通過以下方法來對抗垃圾郵件:
只允許指定的主機和域轉發,首先定義一個文本文件sendmail.cR,文件中的每一行是一臺主機的完整域名或一個域。按照以下文件修改sendmail.cf,則sendmail只對發送地址或目的地址是本機或sendmail中定義的主機或域進行中轉。
FR-o/etc/sendmail.cR
Scheck_rcpt
#anything terminating locally is ok
R<$+ @$ =w> $@ OK
R<$+ @$ =R> $@ OK
R<$+ @$*$ =R> $@ OK
#anything originating locally is ok
R$* $: $(dequote""$&{client_name}$)
R$=w $@ OK
R$=R $@ OK
R$* $=R $@ OK
R$=@ $@ OK
#anything else is bogus
R$* $#error $:"550 Relaying Denied"
3.清除電子郵件炸彈的方法
如果哪天你的電子郵箱被炸了,可以用如下方法解救:
◆ 打電話向你上網的ISP服務商求助,他們就會幫你清除E-mail Bomb。
◆ 用軟件清除?,F在有很多軟件可以清楚垃圾郵件,如Spam xterminator、SpammerSlammer、SpamKiller、Spam Attack Pro、SpamEater Pro、Bounce Spam Mail