2011/05/26

Postfix + Dovecot + SASL + OpenWebMail on Solaris10 + IPF

    真是搞死人囉~~太久沒有compiler source了。沒想到會栽在這N年前常做的事...

    首先是 Dovecot,我先抓2.x版,編譯好後,覺得設定很陌生,搞來搞去覺得太浪費時間了,所以馬上換回1.x,這下就OK啦!

    再來是 OpenWebMail,我裝好 sunfreeware 提供的 perl 5.12.x 後,我開始上CPAN抓新的module給openwebmail用。結果抓下來的module沒一個年編譯成功的,只好默默換成 5.8的。這下總算都順利裝好了。而且使用chrome測試都ok了,沒想到換成 firefox or IE8時,發現在使用帳號、密碼登入後會出現網頁錯誤。Firefox比較好,還會提示perl模組(關於壓縮的)錯誤,IE8就很沒用了,直接說網站出錯有問題(反正危卵最愛說別人害他運作不正常)。後來想起我perl就只有compress這模組比較奇怪,因為openwebmail原本提供的 Compress-Zlib在CPAN已經被改放在 IO-Compress所以我就裝後者,沒想到意外發現 Chrome有支援,另外兩種瀏覽器都遜掉了!!不過我還是換回舊的Compress-Zlib。這下總算讓 openwebmail 都正常了。

      後來我測試mail都ok,可是又擔心客戶的防火牆還送修還沒回來,我只好免費服務,把Solaris10內建的 ipf 設定好並啟用。

    原本都OK了,客戶又反映兩個問題,第一個是有些mail server發信都收不到,例如gmail。第二個是網外也需要提供smtp server轉寄信件。這下我才注意到,gmail 寄信給這server都會出現 "lost connection after EHLO from xxxxxxxxxxx" 我研究了好久,實在找不到原因,覺得只是gmail出了問題,應該幾天就好了。所以就先處理 SASL的問題。

      以前SASL我都選用 cyrus-sasl ,後來 Dovecot 出現後,意外發現他提供 SASL,所以就都只用Dovecot SASL了。這次我當然是把Dovecot SASL啟用,再去設定postfix的SASL設定,沒想到postfix 不客氣的我顯示 warning:
  "smtpd_sasl_auth_enable is true, but SASL support is not compiled in"
,哎~真是偷懶不得啊。我只好重新 compile postfix 2.8.x結果這下好了,每次都編到 sendmail部分就出錯,我一整個下午從2.8一直抓一直編,把2.7、2.5、2.3都編完,都一樣掛在sendmail。真是氣屎人!!最後Google搜尋找到短短一句話讓我清醒過來,有人說postfix不支援gdbm,要用Solaris內建的dbm即可,我快去把 sunfreeware抓的gdbm移除,嘿~終於compile成功了。

      接下來就只剩 gmail 寄信無法寄達的問題了。這問題困擾我好幾天,我試過好多postfix設定舊式解決不了。而gmail每天都會回一封信說我的信還在嘗試重寄,請我不要自己重寄。今天洗澡時,突然想到應該試著把防火牆關閉的。沒想到這念頭給了我方向!!真的是防火牆的問題,只要一清空ipf的規則,gmail就把信寄進來了。原來這一條規則就只差在 "keep state"
"pass in log quick on bge0 proto tcp from any to any port = 25" 這一規則改成
"pass in log quick on bge0 proto tcp from any to any port = 25 keep state" 就解決了!!
真是太可恨了,浪費我那麼多時間!!