23 February 2007

自已架站就要 DIY 一些比較底層的東西,像是 firewall, dns, mail server... 等等有的沒的。啊!現在想想公司有 MIS 可以依賴真好 (被寵壞啦~)。好,回正題吧。先聲名一下,本文不是架一台 mail server,然後提供用戶 pop3, smtp 等那種偉大的服務。我的需求很簡單,只是讓網站能寄信出去而已,像是寄寄認證信,通知信之類的小事。

OS: Ubuntu

Ubuntu 真是個好用的 Linux distro,以前我是用 redhat 的,但是 fedora 對我的 notebook 支援不好,所以改成最多人使用的 Ubuntu。久而久之就迷上啦!所以 server 也開始改用 Ubuntu。Ubuntu 吸引我的優點是 (1) 不會裝無謂的 service -- 從 security 這角度來看是比較好。像 fedora 就 "很好心",一口氣幫你全裝了,但你不見得用的到,你也不見得都懂那些 service 在幹嘛,留著洞放在那就是徒增無謂的風險。(2) apt-get 比 fedora 的 yum 好用太多了,快速、問題又少 :-)

Mail Agent: postfix

對我這個 mail 白吃,只能裝人家包好的來用:

sudo apt-get install mutt

上面這個指令自動安裝一個 command-line 的 mail client mutt。mutt 這個程式可以用 command line 指令直接寄帶有 attachment 的 email,功能強大,很適合來做 scripting,推薦大家使用!好了,注意看安裝過程,安裝 mutt 時,apt-get 會順便將 postfix mail agent 也一併安裝了。感覺真爽!緊接著會進入 postfix 的設定畫面:

  • General Type of Configuration: 選Internet Site
  • Mail name? 設為 mysite.com.tw
  • Other dest. to accept mail for? 設為 空白
  • Force sync. updates on mail queue? 設 Yes

上面僅列出幾個比較特別要設的,其他的設定都用預設值即可。設完之後 postfix 便會啟動,並且只限本機才能寄 email。(這樣才能避免別人將你的站當垃圾信轉寄站)

安裝完後,查看 /etc/postfix/main.cf 底下應該是長這樣:

myhostname = mysite.com.tw
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = 
relayhost = 
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
myorigin = /etc/mailname
inet_protocols = all

如果想要再次修改 postfix 的設定,可以用下面這個指令:

sudo dpkg-reconfigure --priority=low postfix

OK,寄一封信測試一下 postfix 是否正常運作吧:

echo "test content" | mutt -s "test subject" myname@example.com.tw

寄出後,到 /var/log/mail.log 看一下 log 訊息,只要沒看到 refuse talk, reject 之類的字眼,對方的 server 大概已接受了你的來信。OK,現在到你的信箱去(myname@example.com.tw) 應該會收到剛才那一封測試信才是。而且大概會被分類到垃圾信箱...

設定 dns 反查

為了避免寄出去的信被當做垃圾信,首先要設定 dns 反查,讓你的 ip 可以反查回 domain name。這樣別人的 mail server 才比較能相信你的站寄的信件。

#下指令:
nslookup 220.xxx.xxx.xxx

#如果是 hinet ,結果大概是:
Server:         168.95.192.1
Address:        168.95.192.1#53

xxx.xxx.xxx.220.in-addr.arpa    name = xxxxxxxxxxxx

最後面的 name= xxxxxxx 如果不是出現你的 domain name,表示還沒設反查。那麼請洽 ISP 幫你設定。我是用 hinet adsl 固定制的,大概說一下流程:首先要到 申請 hinet 領域反解填線上申請表。按照範例填妥後送出,再將畫面上的申請表列印並加蓋個人私章 (個人申請用私章),再 fax 給該單位即可。沒意外的話,下個工作天就會收到已完工的 email。然後 dns 的反查大約需要 12~24 小時才會生效。屆時再用 nslookup 檢查一下即可。

設定 Sender Policy Framework (SPF)

設定 dns 反查只是解決被誤判垃圾信的第一步,接下來還要設定 SPF,一種對付垃圾信的技術,詳細說明請看 Wikipedia SPF。我自個兒呢... 有看沒有懂.... 所幸有高人相助啊!!

首先到你的註冊 domain name 的網站,通常裡面都有 DNS zone file 的設定。請加入下面這一行 spf 相關的設定:

mysite.com.tw. 86400 IN TXT v=spf1 a ip4:220.xxx.xxx.xxx -all 

前面是你的 mail 的 full domain name,記得要用 . 結尾。86400 是設定 TTL (Time To Live) 的秒數。86400秒意指這個設定一天內都不需重讀。這個值我亂設的... 也許可以設更長?按理說固定 ip 應該不會常換才是?

好了,設完之後,大概也是等個幾小時才會生效。想確認可以到 邪惡的地方做個測試,只要輸入 doman name 即可。(測完後要記得洗手啊!!)

OK,就設到這邊。gmail 和 yahoo 大致上不會把站寄出去的信當 spam 了,除非你發信的內容太像 spam... 不過 hotmail 還是不大行,也不知還差了啥?這就要請教各位高手了...

ps. 感謝 koji兄tempo兄 指導與協助!

ps2. 如果你是像我一樣,只求本機可以寄信出去,那麼 firewall 不用開 port 25 (smtp)

ps3. 我想先買 Wii 耶。


回響

可以用 Tag <I>、<B>,程式碼請用 <PRE>