hmailserver阿旭筆記

來源:互聯網
上載者:User

結果發現,自己做企業郵局可能性不大,因為他們所為的靜態IP並不是買個伺服器的哪種靜態IP。這種IP一般買不到,在電信系統裡面是固定的,數來資料,能用的企業郵局也就幾個。自己做,只能通過國內郵箱系統接受,到國外是不接受的。。。比如gmail和hotmail。我去萬網問,結果他們也弄不下來,說怕被封,看來國家在這方面監管比較嚴格。如果你和我一樣在天真的想著做個自己的企業郵局,好好考慮下吧。如果有了這些條件,可以讀下現面的文章,很有用的!

 

開源的東東,我最煩怕了,因為資料挺少的。好多還是英文。。。以後難免忘掉,還是做個筆記吧!

我選擇了hmailserver,因為他足以應服自己網站的應用了。

然後安裝上以後,將MX指向mail.cxt8.com,然後將mail.cxt8.com指向我的伺服器IP.就做好初步的DNS配置。

然後安裝hmailserver,添加網域名稱和smtp協議,簡略說過,詳細可以閱讀網上的文章《hmailserver的完整配置》,人肉搜尋,不怕會沒掉。

這時dns生效後,你的帳戶就能收發郵件了。但厄運才剛剛開始。。。。

gmail、hotmail將會把你發出去的郵件為垃圾郵件,上火了吧!後面還要玩openssl和一些我沒玩過的工具。。

下載安裝openssl到你本地,然後安裝:

 

1. 第一你的伺服器需要一組非對稱式金鑰: $ openssl genrsa -out yours.key 2048 2048 是金鑰的 bit 長度,yours.key 是金鑰檔案的名稱

2. 第二你用剛剛產生出來的金鑰,去產生一個數位憑證(certificate): $ openssl req -new -x509 -days 3650 -key yours.key -out yours.crt 3650 是此數位憑證的有效期間限日數,yours.crt 是數位憑證的檔案名稱

大概會問你一些問題,如下:

You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:TWState or Province Name (full name) [Some-State]:TaiwanLocality Name (eg, city) []:PenghuOrganization Name (eg, company) [Internet Widgits Pty Ltd]:ErrorOrganizational Unit Name (eg, section) []:errorCommon Name (eg, YOUR name) []:error.example.orgEmail Address []:error@example.org

上面斜體字的部份改成你的資料,第一個是國家code,第二個是州或者是省份,第三是地區名,第四是組織公司名,第五是組織單位名稱,第六是網網域名稱稱,第七最後是網站管理者的Email,第六很重要,如果你是認真的產生這個憑證,第六一定要填你的網網域名稱稱,它不是單純只是"Common Name"而已。

yours.key是你的非對稱式金鑰,公開和私密的都在裡面,yours.crt是你的數位憑證,關於非對稱式金鑰和加解密演算法,就不贅述了,如果你不清楚大概也沒關係。

如果你要將公開金鑰匯出的話,可以執行以下指令: $ openssl rsa -in yours.key -out public.key -pubout -outform PEM

public.key就是你的公開金鑰。

http://dirk.liveforchrist.tw/?p=376

 

這裡設定的目的只有一個,就是讓你寄出去的信比較不容易被當作垃圾信件,Google 有一篇官方文章主題為大量寄件者指南,當中有提到建議寄信伺服器能夠設定這些東西,Yahoo 也有相關的官方文章,因此如果你常常寄信被當作垃圾信,不妨按照這裡的建議協助你做設定。

這裡的前提是你理解並且可以控制你自己網域的 DNS,如果沒有自己的網域或者不知道怎麼設定 DNS,就不需要這些了。

首先我們來設定 SPF。SPF 可不是買防曬乳液的那個 Sun Protection Factor,這裡的 SPF 是指 Sender Policy Framework,一言以蔽之就是防止寄件者被偽造的一種開放協定,如果你認為偽造寄件者很困難的話,你可能想錯了。

到 OpenSPF 官方網站查詢 SPF 的語法,一個範例如下:

v=spf1 mx a:mail.example2.org mx:example3.org ~all

上面這個字串是要放在 DNS 設定裡面的。比如說,你的網域是 example.org,你就必須在 example.org 的 DNS 設定中,加上一個 TXT 紀錄,其內容等於上面那個字串,當有人收到從 example.org 寄的信的時候,例如收到寄件者為 dirk@example.org 的信的時候,對方就會去查尋 example.org 的 DNS 紀錄,查詢所有 TXT 紀錄中,是否有 SPF 的相關紀錄,如果有,就會被對方來使用驗證這封電子郵件的來源。

假設 example.org 有 DNS 設定如下:

TXT "v=spf1 mx a:mail.example2.org mx:example3.org ~all"A mail.example.org 1.1.1.1A www.example.org 1.1.1.2A example.org 1.1.1.2

假設有一使用者 dirk@example.org 寄了一封信給 nobody@gmail.com(舉例使用,如有雷同,純屬巧合),nobody@gmail.com 的收信主機是 Google 的主機,Google 在收到這封信之後,會去檢查對方的 DNS,也就是 example.org 的 DNS 設定,發現其中有一筆 TXT 指定了 SPF,於是乎 Google 會以這筆 SPF 紀錄來驗證這封電子郵件,驗證的邏輯就是去查 DNS 的紀錄對應 IP 位址,以上面 SPF 的語法來說明: v=spf1 代表版本。 mx 代表所有 example.org 的 DNS 的 MX 紀錄上的主機,它們的 IP 都被認定可為 example.org 寄信。 a:mail.example2.org 代表 mail.example2.org 的 A 紀錄上的 IP 被認定可為 example.org 寄信。 mx:example3.org 代表 example3.org 的 MX 紀錄上的 IP 被認定可為 example.org 寄信。 ~all 代表其他沒有被 SPF 紀錄指定的寄信 IP 都是有問題的,前方的 ~ 符號代表的意思可以這麼看:「保留一個空間讓某些機制去作確認,如果不是上方指定的寄信 IP,也許不一定是有問題的,雖然它們通常是有問題的。」

下方是我這個網域的 SPF 紀錄,給你參考:

v=spf1 mx a:mail.liveforchrist.tw mx:liveforchrist.tw ~all

至於我的其他 DNS 設定,有興趣的自己查看看吧,它們都是公開的資訊。

 

接著我們來設定 DomainKeys,DomainKeys 是 Yahoo 在使用的,因為 Yahoo 是大宗的郵件主機之一,所以設定這個對寄信給 Yahoo 的收件者有幫助。

在 Ubuntu 上安裝 DomainKeys 套件,執行指令如下: $ sudo apt-get install dk-filter

安裝完之後,我們需要預備非對稱式金鑰,如果你不知道如何產生金鑰,可以參考這篇文章,假設你已經產生出來,並且金鑰放在路徑 /etc/postfix/mail.key,公開金鑰放在 /etc/postfix/public.key。

再來作一些設定檔的更動,編輯檔案 /etc/default/dk-filter,註解所有東西,新增下面三行:

DAEMON_OPTS="-l"DAEMON_OPTS="$DAEMON_OPTS -d example.org -s /etc/postfix/mail.key -S maildk"SOCKET="inet:8892@localhost"

上面第二行的 example.org 換成你自己的網網域名稱,如果你希望寄出來的信件地址是 nobody@example.org,那網網域名稱就是 example.org,後面 -s 後接的字串是你的金鑰位置,然後 -S 後面接的是"Selector",等會設定 DNS 會用到,可以填一個你想要的字串,不要太複雜,這裡的範例填 maildk,等一下就會以這個例子去說明 DNS 的設定。

然後我們要設定 Postfix,寄信出去的 Postfix 會使用 DomainKeys 功能將郵件加上認證資訊,這就是 DomainKeys 的功能,如果不理解的可以參考 Yahoo 的說明,編輯 /etc/postfix/main.cf,加上下面這四行:

milter_default_action = acceptmilter_protocol = 2smtpd_milters = inet:localhost:8892non_smtpd_milters = inet:localhost:8892

設定完重新啟動 postfix 以及 dk-filter,執行命令如下: $ sudo /etc/init.d/dk-filter restart $ sudo /etc/init.d/postfix restart

接著我們要設定 DNS 了,在你的網域上加上兩筆子網域的 TXT 紀錄,一個子網域是 maildk._domainkey,其內容是你的公開金鑰的內容,假設你的公開金鑰路徑是 /etc/postfix/public.key,執行下面命令印出來看看: $ cat /etc/postfix/public.key

-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD2HH7GQNz5XXcmaPDlA4iUgkx5sPqLv7glf/468NjtvjxXkdAxHXSFetjvAFrUBue1Y8HfiGfE2R/iTmm9cYL0gidZVmOVHg+/7fPCbQHZPblHQ4EjdBy2IuI8bV9rQ0j7UubcrP3xcbGdpjseyebRCqZXG5bMYsov8xuJ5zzcLwIDAQAB-----END PUBLIC KEY-----

把中間那個亂碼字串貼成一行,所以 DNS 上的 TXT 紀錄是(記得子網域(subdomain)是 maildk._domainkey,還有公開金鑰內容要改成你自己的):

"k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD2HH7GQNz5XXcmaPDlA4iUgkx5sPqLv7glf/468NjtvjxXkdAxHXSFetjvAFrUBue1Y8HfiGfE2R/iTmm9cYL0gidZVmOVHg+/7fPCbQHZPblHQ4EjdBy2IuI8bV9rQ0j7UubcrP3xcbGdpjseyebRCqZXG5bMYsov8xuJ5zzcLwIDAQAB"

只要把 p= 後面的字串改成你自己的公開金鑰內容即可,子網域 maildk._domainkey 前面的 maildk 是剛剛說到的 Selector,所以你剛剛的 Selector 是什麼,這裡就是什麼。

另外一筆 DNS 紀錄是設定子網域 _domainkey 的 TXT 紀錄,其內容如下(記得子網域(subdomain)是 _domainkey):

"t=y; o=~"

設定完,等一段時間 DNS 生效之後,透過 Postfix 去寄信給 Yahoo 的收件者,應該就會看到 DomainKeys 認證的效果了,查看郵件的原始碼可以看到 DomainKeys 的結果是 pass,如下:

Authentication-Results: mta1023.mail.tp2.yahoo.com  from=example.org; domainkeys=pass (ok);

刪除線劃掉的是你的網網域名稱稱。

最後,我們來設定 DKIM,設定方式和 DomainKeys 差不多,先安裝 Ubuntu 套件,執行命令如下: $ sudo apt-get install opendkim

安裝完之後,編輯檔案 /etc/opendkim.conf,找到類似下面這三行:

#Domain         example.com#KeyFile        /etc/mail/dkim.key#Selector       2007

把前面的註解都拿掉,Domain 那一行換成你自己的 Domain,KeyFile 那一行換成你的非對稱式金鑰路徑,例如 /etc/postfix/mail.key,後面的 Selector 類似 DomainKeys 的 Selector 的概念,設定 DNS 會用到,它其實是在 DNS 上你可以彈性設定不同的 Selector 使用不同的金鑰,對不同的子網域作認證,不過這裡如果你剛剛設定過 DomainKeys 了,因為我們的 DomainKeys 的 Selector 範例是 maildk,這裡我們要區隔開來,不可以一樣,所以我們這裡 Selector 就用 mail 這個字串,所以假設網網域名稱是 example.org,修改那三行之後如下:

Domain         example.orgKeyFile        /etc/postfix/mail.keySelector       mail

存檔離開。

再來編輯 Postfix 的 main.cf 檔案,讓 Postfix 寄信的時候都會使用 DKIM 將信件認證的資訊加在郵件表頭裡面,編輯 /etc/postfix/main.cf,加上四行如下:

milter_default_action = acceptmilter_protocol = 2smtpd_milters = inet:localhost:8891non_smtpd_milters = inet:localhost:8891

如果你早先已經設定了 DomainKeys,你可以將 DomainKeys 在 Postfix 的設定和 DKIM 的設定結合,變成下面四行:

milter_default_action = acceptmilter_protocol = 2smtpd_milters = inet:localhost:8891,inet:localhost:8892non_smtpd_milters = inet:localhost:8891,inet:localhost:8892

設定完重新啟動 Postfix,也重新啟動 opendkim,執行命令如下: $ sudo /etc/init.d/opendkim restart $ sudo /etc/init.d/postfix restart

最後我們設定 DNS 紀錄,新增一筆子網域的 TXT 紀錄,子網域是 mail._domainkey,前面的 mail 是上面 DKIM 的 Selector,因為我們這個範例用 mail 字串,所以這裡是 mail,紀錄的內容是你的公開金鑰內容,剛剛 DomainKeys 已經講過如何把公開金鑰傾印出來,所以 DNS 紀錄內容大概長得像如下:

"v=DKIM1; g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD2HH7GQNz5XXcmaPDlA4iUgkx5sPqLv7glf/468NjtvjxXkdAxHXSFetjvAFrUBue1Y8HfiGfE2R/iTmm9cYL0gidZVmOVHg+/7fPCbQHZPblHQ4EjdBy2IuI8bV9rQ0j7UubcrP3xcbGdpjseyebRCqZXG5bMYsov8xuJ5zzcLwIDAQAB"

把 p= 後面接的字串換成你自己的公開金鑰,儲存等一段時間,待 DNS 生效之後,透過 Postfix 寄信出去,就會加上 DKIM 的數位簽章了。

 

對於在 Ubuntu 上安裝 Postfix,有興趣者可以參考這篇文章。

http://dirk.liveforchrist.tw/?p=423

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.