小米安全團隊開源Exchange_proxy專案

小米安全中心發表於2019-03-15


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/


配置檔案說明:

  • mail節下的配置項是配置郵箱伺服器本身的

  1. hosts表示郵箱域名,支援配置多個用英文逗號分割的域名
  2. backend表示郵箱伺服器地址
  3. ssl表示是否啟用https,必須設為true
  4. cert和key分別表示證照的公、私鑰,與nginx的證照完全相容

  • debug_level表示日誌級別,預設為info級別
  • redis節表示redis伺服器的配置
  • otp節為動態口令檢測API的URL
  • sms節表示簡訊介面的API
  • user_info節下的user_phone表示查詢手機的介面,active_url表示手機中啟用連線的URL

設定好配置檔案後,可通過./main直接啟動代理伺服器,如下圖所示:

小米安全團隊開源Exchange_proxy專案


 WEB通過外網訪問WEB端時,要求必須輸入正確的OTP口令才可以登入,如下圖所示:

小米安全團隊開源Exchange_proxy專案


通過手機端訪問時,只有通過簡訊中的提示啟用後,方可收發郵件,如下圖所示:

收到啟用簡訊

小米安全團隊開源Exchange_proxy專案


啟用確認頁面

小米安全團隊開源Exchange_proxy專案


啟用成功頁面

小米安全團隊開源Exchange_proxy專案


正式上線之前,最好提供相應的管理後臺並與內網的管理系統對接,郵件代理管理後臺提供以下功能:

管理員可檢視、修改每個使用者的賬戶與裝置狀態

管理員可檢視每個裝置的啟用程式,方便故障排查

使用者也可自行管理自己的裝置

裝置資料儲存在redis中,用go/python/php等語言都可以實現,我就不單獨提供了。

代理系統的程式可以託管在supervisor或god中,部署了該系統後,可以解決郵件伺服器手機端與WEB端的安全,目前的開源版本沒有電腦端的安全代理功能,建議在PC端收發郵件時撥入VPN,或者在電腦中用BlueMail客戶端收發郵件。

小米安全團隊開源Exchange_proxy專案

GitHub連結:https://github.com/MiSecurity/exchange_proxy

相關文章