1月7日,小米安全團隊在GitHub開源了自研專案Exchange_proxy的部分程式碼。經過兩個月的修改與完善,3月12日,小米安全團隊自研專案Exchange_proxy專案正式完成。
Exchange_proxy是由go語言開發的Exchange安全代理,可以將內網的Exchange伺服器的https服務安全地釋出出去, 支援的功能如下:
- WEB端增加OTP二次認證
- 手機端增加裝置啟用繫結的功能
- 遮蔽了PC端的EWS協議
在使用該系統前,需要確保有以下基礎設施的介面,並完成與代理的對接:
- OTP動態口令系統
- 簡訊傳送介面
- 通過員工姓名查詢員工手機號的介面
以上介面準備並對接完成後,正確配置conf/app.ini即可啟動代理伺服器了。
[mail]
hosts = mail.xiaomi.com,mail.sec.lu
backend = https://10.10.10.10
port = 443
ssl = true
cert = certs/ca.crt
key = certs/ca.key
; debug level: Fatal, Error, Warn, Info, Debug
debug_level = info
[redis]
host = 10.10.10.20
port = 6379
db = 0
password = redis_passw0rd
[otp]
url = https://otp_api_url/chk_otp
[sms]
url = http://sms_api_url/api/send_sms
header = X-SMS-Token
key = token
[user_info]
user_phone = http://hr_api_url/findMobile
active_url = https://mail.sec.lu/a/
配置檔案說明:
- hosts表示郵箱域名,支援配置多個用英文逗號分割的域名
- backend表示郵箱伺服器地址
- ssl表示是否啟用https,必須設為true
- cert和key分別表示證照的公、私鑰,與nginx的證照完全相容
- debug_level表示日誌級別,預設為info級別
- redis節表示redis伺服器的配置
- otp節為動態口令檢測API的URL
- sms節表示簡訊介面的API
- user_info節下的user_phone表示查詢手機的介面,active_url表示手機中啟用連線的URL
設定好配置檔案後,可通過./main直接啟動代理伺服器,如下圖所示:
WEB通過外網訪問WEB端時,要求必須輸入正確的OTP口令才可以登入,如下圖所示:
通過手機端訪問時,只有通過簡訊中的提示啟用後,方可收發郵件,如下圖所示:
收到啟用簡訊
啟用確認頁面
啟用成功頁面
正式上線之前,最好提供相應的管理後臺並與內網的管理系統對接,郵件代理管理後臺提供以下功能:
管理員可檢視、修改每個使用者的賬戶與裝置狀態
管理員可檢視每個裝置的啟用程式,方便故障排查
使用者也可自行管理自己的裝置
裝置資料儲存在redis中,用go/python/php等語言都可以實現,我就不單獨提供了。
代理系統的程式可以託管在supervisor或god中,部署了該系統後,可以解決郵件伺服器手機端與WEB端的安全,目前的開源版本沒有電腦端的安全代理功能,建議在PC端收發郵件時撥入VPN,或者在電腦中用BlueMail客戶端收發郵件。
GitHub連結:https://github.com/MiSecurity/exchange_proxy