上一篇說了hmailserver如何設(shè)置反垃圾郵件功能,現(xiàn)在來說說如何讓自己的hmailserver發(fā)出去的郵件不要被別人反垃圾了。
在hmailserver的反垃圾郵件功能中有提到給垃圾評分標(biāo)準(zhǔn),其中比較主要的四個(gè),SPF、HELO、DNS MX、DKIM簽名,看hmailserver默認(rèn)的分值,無疑DKIM簽名是最高的,如果校驗(yàn)DKIM失敗,直接會當(dāng)作垃圾郵件的。無疑,如果對方的郵件服務(wù)器啟用了這幾個(gè)校驗(yàn),如果你發(fā)出去的郵件未通過,就會被當(dāng)作垃圾郵件了,我試了一下,都沒有設(shè)置,發(fā)往gmail的郵件直接發(fā)送失敗,發(fā)往騰訊企業(yè)郵箱的郵件還收到了。
那如何讓這些校驗(yàn)通過呢?首先你最好得有一個(gè)固定IP,這樣才好設(shè)置SPF,需要給你的域名添加一個(gè)txt記錄,里面包含你郵件服務(wù)器的IP。可以用nslookup來查詢一下qq.com的txt記錄,那就是SPF了,關(guān)于SPF的介紹,可以查看http://baike.baidu.com/view/1372988.htm來了解一下。HELO這是直接在hmailserver的Settings-Protocols-SMTP-Delivery of e-mail中的local host name中填寫。MX記錄解析,這個(gè)在域名中添加mx記錄即可,最后就到了DKIM簽名。
DKIM的全稱是Domain Key Identified Mail,域名密鑰識別郵件,就是郵件服務(wù)器對自己發(fā)的郵件簽名,表示這個(gè)郵件是自己發(fā)出去的,如果一個(gè)對方郵件服務(wù)器能夠驗(yàn)證這個(gè)簽名,就表明這個(gè)郵件可能不是垃圾郵件,因?yàn)槔]件一般都會偽造地址發(fā)送的。那豈不是那些垃圾郵件發(fā)送者只要給垃圾郵件也每個(gè)簽名也能表示它發(fā)送的不是垃圾郵件?接收郵件服務(wù)器如何能辨別這個(gè)簽名真假?那發(fā)送郵件服務(wù)器跟接收郵件服務(wù)之間有個(gè)約定,呃,你記好了,我的簽名是如何如何防偽的,這就是基于私鑰與公鑰的簽名。
發(fā)送方基于私鑰給郵件DKIM簽名,接收方根據(jù)發(fā)送方的公鑰來驗(yàn)證這個(gè)DKIM簽名,很明顯,私鑰是給發(fā)送郵件服務(wù)器來使用的,那公鑰如何傳輸呢?不多說了,了解一下就行了,下面是網(wǎng)上的介紹。
一些簽名的具體細(xì)節(jié):
1、算法,必須支持rsa-sha256,可選支持rsa-sha1。key size建議1024。
標(biāo)準(zhǔn)化(Canonicalization). 有的郵件服務(wù)器可能會少量修改文件內(nèi)容,比如換行或者移除一些空格等等。因此DKIM定義了兩種2、標(biāo)準(zhǔn)化方法,simple和relaxed。simple最簡單,就是一個(gè)字節(jié)也不能改,改了就錯(cuò)。relaxed就是可以少量的修改一些空格等等。郵件頭和內(nèi)容這兩部分的標(biāo)準(zhǔn)化可以選擇不同的方法,表示起來用/隔開,比如simple/relaxed表示頭部用simple方式,內(nèi)容用relaxed方式來標(biāo)準(zhǔn)化。
3、過程,簽名是先對內(nèi)容(body)部分hash,然后把這個(gè)body hash放在header里面,再對頭部做簽名。頭部也不是所有字段都簽名的,只有一些常用的字段,或者比較有意義的,會被簽名。像Received和Return-Path這樣的字段一般不被簽名。而From則必須被簽名。
下面我們來給hmailserver加上DKIM簽名,工欲善其事,必先利其器,咱們得把器準(zhǔn)備好,hmailserver這個(gè)主角可不能少,當(dāng)然,用其他的郵件服務(wù)器也可以參考一下。
Openssl,我們要用它來生成私鑰與公鑰,在這里下載openssl的windows版本,根據(jù)需求吧,64位系統(tǒng)就下64位的,我這里下的是Win32 OpenSSL v1.0.0a,安裝這個(gè)得先安裝Visual C++ 2008 Redistributables,呃,中文windows就下中文的,英文就下英文的,別搞得裝不上重下,裝好openssl咱就來生成密鑰吧。
詳情可以參考一下這篇文章
http://www.elandsys.com/resources/sendmail/dkim.html
默認(rèn)openssl安裝在C:\OpenSSL-Win32,按照下面命令生成
cd C:\OpenSSL-Win32\bin
openssl.exe genrsa -out rsa.private 1024 //生成私鑰
openssl.exe rsa -in rsa.private -out rsa.public -pubout -outform PEM //生成公鑰
然后會看到bin目錄下多了兩個(gè)文件rsa.private與rsa.public,先把私鑰rsa.private移到hmailserver的安裝目錄去,然后用記事本打開rsa.public,里面有一串base64編碼的字符串,掏出來,然后到域名解析的控制面板去添加一個(gè)txt記錄,名稱為hmail._domainkey(hmail這個(gè)可自定義,后面的_domainkey是必需的),記錄值為k=rsa; t=y; p=base64,這個(gè)p=后面的base64換成rsa.public里面的那串字符串,添加完txt記錄,可以用以下命令來查看一下是否生效了
nslookup
set type=txt
hmail._domainkey.domain.com //domain.com替換為你的域名
如果看到像下面的結(jié)果就表示生效了
非權(quán)威應(yīng)答:
s0907._domainkey.qq.com text =
“k=rsa; t=y; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAJJepXlnnJe5bFumOeyG8v2W8
LFpudv3kOkV3eMapHGkl1TU6hgVCyNSOJgYgQkvozdZRJ5b9d7FJsrEhHbeR+klTcLYCe1u1HP7HbxdU
fDU34szV/Tc0rE125WENSGXlwIDAQAB”
這里公鑰就設(shè)置完成,然后在hmailserver郵件服務(wù)器中設(shè)置私鑰。
打開到Domains-你的域名-DKIM signing,選上Enabled激活DKIM簽名先,
Private key file就選擇之前移到hmailserver目錄的rsa.private文件,
Selector里填入hmail,這個(gè)要跟添加txt記錄時(shí)_domainkey前面的值一致。
Header method與Body method都選擇Relaxed,前面說了Simple比較嚴(yán)格一些,如果你添加的記錄里面多或少了一個(gè)空格,那就通不過了。
Signing algorithm,簽名算法,SHA1肯定是趕不上SHA256安全,不過SHA256加密時(shí)占用CPU資源會高一些,根據(jù)你自己的需求選吧。
設(shè)置完成,當(dāng)然得Save一下,然后發(fā)個(gè)郵件給gmail試試,呃,為啥選gmail呢,因?yàn)間mail比較好看,比較好看原始郵件,可以在里面查找到dkim=pass字樣,還有dkim-signature后面的簽名,OK,成功了,DKIM簽名就說到這里,費(fèi)了一中午時(shí)間。
并不是說你做到了這樣你的郵件就不會被判為垃圾郵件了,只是少了許多可能罷了,還有方方面面的原因,比如你的ip在rbl里之類的,不在贅述。
最后還是補(bǔ)充一點(diǎn)關(guān)于SPF記錄的設(shè)置吧,讓你的郵件通過SPF驗(yàn)證,哪怕你是動(dòng)態(tài)IP,也一樣過
參考:http://www.linuxfocus.org/ChineseGB/December2004/article354.shtml
SPF 記錄包含在一個(gè) TXT 記錄之中,格式如下:v=spf1 [[pre] type [ext] ] … [mod]
最常見的就是v=spf1 ip4:xxx.xxx.xxx.xxx ~all,還有v=spf1 include:sub.domain.com ~all,實(shí)際上一樣的。
參數(shù)描述
v=spf1,SPF 的版本,如果使用 Sender ID 的話,這個(gè)字段就應(yīng)該是 v=spf2
ip4:xxx.xxx.xxx.xxx或include:sub.domain.com,include:包含一個(gè)給定的域名的測試,include:domain 的形式書寫。
ip4:使用 IPv4 進(jìn)行驗(yàn)證,這個(gè)可以以 ip4:ipv4 或 ip4:ipv4/cidr 的形式使用。建議使用這個(gè)參數(shù),以減少域名服務(wù)器的負(fù)荷。
還有幾個(gè)可選參數(shù):
ip6:使用 IPv6 進(jìn)行驗(yàn)證
a:使用一個(gè)域名進(jìn)行驗(yàn)證,這將引起對域名服務(wù)器進(jìn)行一次A記錄查詢,可以按照a:domain, a:domain/cidr a/cidr 的形式來使用。
mx:使用DNS MX記錄進(jìn)行驗(yàn)證,MX記錄定義了收信的MTA,這可能和發(fā)信的MTA是不同的,這種情況基于mx的測試將會失敗,可以用mx:domain, mx:domain/cidr或mx/cidr這些形式進(jìn)行mx驗(yàn)證。
ptr:使用域名服務(wù)器的PTR記錄進(jìn)行驗(yàn)證,這時(shí),SPF使用PTR記錄和反向圖進(jìn)行查詢。如果返回的主機(jī)名位于同一個(gè)域名之內(nèi),就驗(yàn)證通過了,這個(gè)參數(shù)的寫法是ptr:domain
exist:驗(yàn)證域名的存在性,可以寫成exist:domain的形式。
另外可用ext對上面的幾個(gè)參數(shù)進(jìn)行的擴(kuò)展,如果沒有這個(gè)字段,那么僅使用單個(gè)記錄進(jìn)行問詢。
看了上面的幾個(gè)應(yīng)該明白了吧,既然我動(dòng)態(tài)IP沒法用IP地址來驗(yàn)證,我可以驗(yàn)證mx、驗(yàn)證域名是否存在,這樣就可以了,于是老夫發(fā)到gmail的郵件,里面就會顯示已經(jīng)通過了。
信息如下:
Return-Path:
Received: from mail.osmail.cn ([121.35.164.244])
by mx.google.com with SMTP id o2si8011332ybn.89.2010.11.18.23.51.54;
Thu, 18 Nov 2010 23:51:55 -0800 (PST)
Received-SPF: pass (google.com: domain of admin@osmail.cn designates 121.35.164.244 as permitted sender) client-ip=121.35.164.244;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of admin@osmail.cn designates 121.35.164.244 as permitted sender) smtp.mail=admin@osmail.cn; dkim=pass (test mode) header.i=@osmail.cn
dkim-signature: v=1; a=rsa-sha256; d=osmail.cn; s=hmail;
c=relaxed/relaxed; q=dns/txt; h=From:Subject:Date:Message-ID:To:MIME-Version:Content-Type;
bh=KJqaSfBaD5OTEAwPyYjfJB0AduS/gOcD2VRqIXQZ69k=;
b=dMePUGCBJVvJNuATpLIEH8XaL5IeWHufhDYf4nCpWd0MvLt3DtfRCNsuyA413wsGoaSZJ
該文章在 2011/2/22 1:06:18 編輯過