適用于初創公司的超輕量級smtp服務配置
一、背景
smtp 是一種常見的服務,提供了程序自動化郵件外發的可能。不光是用于產品向客戶的通知服務;更多的是用在企業內部的信息工具,比如我們就有 sentry / confluence / zulip 等等非常多的開源工具,都需要配置 smtp 來實現內部信息的聯動。
當前最簡單的郵箱使用方式是使用開放的郵箱服務,比如現在很多小型企業在使用的企業郵箱,可以配置一個專門的賬號來提供發信服務。但是,這種方式存在非常大的安全隱患。
二、問題
直接使用公開的賬號,很容易帶來安全問題:
- 自動化發信的程序需要用戶名和密碼,這些信息需要存儲在代碼或者配置中
- 有經驗的程序員知道將敏感信息分離,并且存儲在代碼庫外;然而新員工,或者安全意識不強的同事很容易將這些信息入庫
- 更糟糕的是,即使三令五申,有些程序員還是會無意的把代碼放到 github 上,這些是公開可以訪問的
- 然后就炸了
當郵箱賬號一泄露(一般 smtp 賬號同樣能登陸郵件賬戶或者使用 pop3 協議),郵件里面隱藏的一些敏感信息(尤其是 confluence 的通知郵件)會帶來更多的泄露,嚴重的可能會影響到我們競選總統。
一種解決方案是,加強所謂的安全流程,同時通過一些工具來驗證輔助(比如大家都在做的 github 掃描),但這種方式過于被動,而且無法從根本上來解決問題。技術上的問題,還得尋求技術方案來解決。
三、解決方案
其實傳統的工具就可以解決這個問題,我們就采用了 postfix 作 smtp 中轉:
?? 
- 配置 postfix 作為 smtp replay 服務,將發信方與真正的郵件服務器隔離開來
- 發信方與 postfix 使用公司內部賬號(甚至無賬號)進行內網通信,這樣即使賬號泄露,也無法用來登陸郵箱獲取信息;同時,由于 postfix 是內部的服務,可以更靈活的配置防火墻
- postfix 和 smtp 服務之間仍然使用 smtp 賬號,但這里只有系統管理員才需要知道賬戶,相對安全。另外,還需要進行自動刪信,禁用 pop3,微信登陸等手段來加強,這個 163 郵箱,qq 郵箱都有不同的配置,請自行設置
說白了,就是靠代理解耦來解決問題。熟悉我們的人估計一看就明白,因為我們很多問題都是靠這種方式來解決。下面簡要描述下配置供參考。
四、自動化集成
添加自己的 smtp 中轉服務,還可以配置無賬號登陸的方式,這樣在命令行中調用服務將更加簡單,這也是我們搭建 postfix 的另外一個原因。這里介紹兩種方式:
1. 通過 curl 命令發送郵件
最新版的 curl 命令支持 smtp / smtps , 不過發型版自帶的比較老,需要自己下載最新版本進行編譯安裝,使用的話相對簡單。
2. 通過傳統的mailx命令來發送郵件
其實依舊是相對傳統的命令,比如 mailx 就能滿足我們的需要。不過安裝起來略顯麻煩,需要在每個發行版找各自合適的包,比如 ubuntu 就應該安裝 heirloom-mailx ,使用起來則更加簡單:
上面一條命令就可以將信息通過郵件進行發送。
我們更加傾向于采用第二種,因為比較簡單:這使得我們在大量的腳本中能很方便的集成郵件通知功能。
五、總結
本文描述了通過 postfix 做 smtp relay 的方式來解決賬號泄露的風險,這也再一次驗證了兩點:
- 代理是王道,幫懶人快速解決問題。
- 技術遇到的問題必須用技術來解決,這比所謂的架構 / 流程要靠譜的多。
【本文是51CTO專欄機構“豈安科技”的原創文章,轉載請通過微信公眾號(bigsec)聯系原作者】
?? 



























