搭建廉價Cluster Mail Service

要搞個 Mail Server 唔算係複雜嘅事情,但係要做到Cluster,可以大限度擴展,仲要連接兩個或以上嘅ISP,咁就唔係講笑。其實可以通過Proxy嘅技術,巧妙避開用BGP(不過用BGP都唔係好複雜,亦唔係壞事,只不過係唔一定有幫助姐)。個 Infrastructure 基本係咁。

淮海戰役示意圖我一個個構件嚟講,實質上每個構件都可以由一台或多台VM組成。喺每個構件中會說明。如圖中所示,你可以連接兩個或以上嘅ISP(第三個原理一樣),每組Frontend Server 嘅Default Gateway都係唔同,當然係指向同一組嘅ISP。中間可以加一個firewall,NAT、Transparent都可以嘅,睇你自己喜歡。所有Frontend Server會同時運作,裡面有Dovecot Director Proxy,負責做Load Balance,當中會建立一個互通嘅Table嚟maintain一個email同Backend嘅關係,同一個email地址嘅mail client登陸操作(imap/pop3)同deliver(由Postfix通過LMTP嚟做分發)都會由一部指定嘅Backend Server負責。除咗Dovecot Director做Proxy外,仲有Postfix負責SMTP,可以考慮將amavis安裝埋喺Front Server,負責spam同antivirus,如果係好大型嘅infrastructure可以用幾部獨立server運行amavis。

Backend Server反而好簡單,因為前面都做得七七八八,裡面就係Dovecot,不過呢度要setup到可以用LDAP嚟做User Mapping,有少少難度,不過之前啲BLOG講過架啦,慢慢做一定得。點解靜係Dovecot就夠,因為通過LMTP嚟接收inbound email,所以Postfix只會用localhost,唔起smtp嘅作用。

NAS係數據儲存核心,Backend Server個/home係由呢度提供,反而NAS無需要LDAP User Mapping,街貨都得。

喺呢個infrastructure做scaling好容易,由底部講起,NAS有大食大,一般情況只能由一部Server提供(Active Backup HA係比較正確嘅講法),所以儘量唔好用VM做,CPU一般就可以,Memory一定要多(32GB+),因為Data會cache喺度(如果HA係唔可以有Write Back Cache!)。File System一定要用LVM + Ext4,到時隨時要online expand。點expand加RAID Controller加外置disk box就得。注意NAS呢度唔需要configure LDAP,所以搞部現成NAS都得。而Backend Server就由兩部開波,Busy就加,注意Memory多都無用(4-8GB一部夠架啦),Backend做嘅嘢就係mail client service(IMAP/POP3/SIEVE)同LMTP。而Frontend Server係最重點,把關用戶入口,Memory要多,CPU要勁!因為TLS/SSL嘅encryption係喺呢度處理,如果係超大型infrastructure(即係啲要處理1000+ Mailbox以上)要將Postfix抽起,用另一組機運行network連接一樣。Frontend 同 Backend 都可以加到8部(先考慮+CPU,+RAM,後考慮加機)。對於超大infrastructure,一定要將inbound SMTP(即係DNS Domain 個 MX指向嘅Server)分開,用另一組機去做,因為inbound SMTP係一個公開地方,無需要AUTH,發現自己嘅email就RELAY到Frontend嘅Posftix處理。咁樣可以保證電郵用戶嘅速度。喺安全嘅角度考慮,inbound SMTP亦係被攻擊嘅對象,如果SPAM咗隨時要換IP。

 

Network

講到明廉價系統,我地唔會走去搞BGP,唔係小弟唔識,而係BGP唔係必要元素。喺香港而言,假如你想自己直接連接HKIX,就無可避免要用到。一般情況用呢個方法就得啦,省時省力,痰止咳。Frontend Server有兩個Network,紅色嘅Public Network連接ISP,每個group一個Public Network,IP各有不同,而Default Gateway當然指向呢個group嘅ISP(常識嚟啦!),。注意兩條ISP Uplink可能係同一家,不過bandwidth不同,提供唔同嘅層次嘅服務比客戶選擇。話又說回頭,如果你係高手(好似我咁),又可以考慮用BGP,自己去申請幾個subnet玩玩分流(日後再講),一般16個IP嘅subnet就夠嗮。大家注意,你真正用到嘅IP,可以少到一個,一個IP就可以處理全世界所有公司嘅電郵,要咁多嚟托咩!?

Private Network互通Backend Server,而Backend Server係可以唔set default gateway,無default gateway係高手嘅表現。哇!咁都得?梗係得啦,O/S package update同Internet download搵一部Squid Proxy解決,無咗default gateway外面就好難攻擊倒你,你亦唔可以攻擊倒人地。

你必須要通過一個獨立嘅Storage Network連接NAS(如NFS Server)呢個Network係極度繁忙,Gbps就梗架啦,最好用兩到四張NIC做bonding,如Backend Server用兩張NIC,NAS用四張NIC,有米嘅甚至考慮用10Gbps network。

整個架構嘅第一重點,就係Frontend Server各有自己Public Network(同Default Gateway),根本唔需要喺埋一個Network,呢啲Public Network之間亦唔需要互通,亦無必要。雖然好多機都有兩個Network,但係全部都唔洗打開ip forward,要記住,根本唔需要用任何一部Server做routing,FrontEnd都唔洗!

 

DNS

呢度要提提,市面上一啲Geo DNS(通過唔同嘅client IP解釋出唔同嘅IP)唔一定有用,因為好多傻佬用四條8嚟做DNS Server,咁就廢咗武功啦。你啲錢又白比啦,仲等同幫埋美國佬搵飯食,笨唔笨呢。一般客戶都會通過DHCP由ISP提供DNS嘅,問題唔係好大。但公司客就唔同,假如你係老闆,發現間公司嘅電腦DNS set嗮做四條8,你最應該做嘅事係即刻炒咗個電腦部主管先,然後慢慢問你間ISP比個DNS你set翻入部腦度(一般上網search自己間ISP嘅網頁都會有)。

客戶端對DNS嘅使用上,最快係自己build一部,如果你用M記嘅Domain Controller,本身已經係DNS Server啦。懶得build就用ISP比你嘅,注意兩個DNS位都要打嗮你ISP比你嘅(佢一定有兩個比你),千奇唔好打兩間唔同ISP嘅DNS,貪佢唔會兩間同時死,呢啲電腦部主管又係炒得,因為一間ISP只會比自己嘅客戶用。

咁用翻自家制DNS有咩要注意呢?就係一個group(uplink)一個,每個都set做Master Record,只係列出自己個group嘅Public IP Address,就係咁簡單。你只要做嗮每個IP嘅A Record,同一個hostname喺所有DNS Server都有一個或多個(load balance呀嘛)。然後比啲客戶嘅domain CNAME過嚟就OK,工作量唔會加大,因為+-一個ISP你只需要做一次。客戶嘅DNS setting唔洗便,皆因全部都應該係CNAME,唔識得咁做嘅就唔好搞大眾服務啦。

DNS嘅原理係尋找最快回覆你嘅上家(都係DNS,有十幾個,),係同時搵嘅,睇下邊個答得你快就用邊個結果返回。而上家又會再搵上家,搵到你個自家制DNS為止。你只要將DNS喺Firewall嘅Traffic Policy上set高UDP/53咁就OK啦(如果你部Firewall無得set,好簡單,掉咗佢!500蚊嘅router仔都有啦!),正常情況下同一個ISP嘅客係會搵到同一個ISP嗰部DNS Server先,咁就resolve都喺呢個ISP嘅FrontEnd Server啦。所以通過呢個方法定義DNS就可以善用多家ISP,減少不必要嘅routing。呢個亦係說明用BGP作用有限,你必須識得喺所有ISP(HKIX都當佢係一個)連綫上放一個DNS!呢個係成個設計嘅第二個重點。反而用咗BGP,你都要分開幾個subnet announce到唔同嘅ISP嚟放DNS Server,仲做多一層功夫,係唔係自找麻煩。

假如貴寶號有翻咁上下,就申請嗮咁多間ISP,按ISP實際應用日後+-bandwidth就得啦。

 

總結

成個infrastructure嘅重點就係在於你識得放下成見,一間公司一個Server當然唔可以幫親三間ISP啦,不夠三部獨立嘅Server咪得咯,咁後面再有Backend Network串埋三部Server咁就OK。只要你用隻手掩住Public Network嗰部份,三部Server係同一個Network,通嘅!用手掩住其余兩部Server,凈翻嗰部係連接IP,可以上Internet,又係通嘅!一切有得Proxy嘅solution都可以Apply喺呢個架構上面。包生仔!唔用BGP仲簡單咗靈活咗,等於你用刀叉嚟食pizza,比意大利人笑Q死你啦。

實會有人問咁咪用多咗FrontEnd Server,浪費咗hardware咯。唉!依家咩年代呀,無論你點做,都係用兩部Hardware Node做Redundant,喺上面行VM架啦,每部Hardware Node各一部VM接到同一個ISP咪得咯。你話啦,點浪費hardware,個CPU嘅實際運作,同用BGP放同一個subnet上面係一Q樣。

所以,醒目嘅你一睇就知道,呢個infrastructure唔止可以玩email solution,玩埋web server都仲得。只要你喺FrontEnd Server安裝apache(squid或varnish都得啦,隨你喜歡)做reverse proxy,指向Backend Server嘅apche,tomcat或IIS(最好唔好用Windows啦),NAS提供web content搞掂。喺FrontEnd上,email同web并存都仲得!

之後會慢慢講各個構件嘅setup方法,注意到時只會講啲重點,而一般setup自己上網都有架啦。不過上面已經講咗個設計精神,有一定經驗嘅你唔再睇落去都識得搞出嚟啦!