最近嘗試白嫖Gemini的PoC

服務介紹:

Gemini-Balance

最近在看到了Gemini-Balance這一個專案:

簡單來說是一個Gemini API Key Loadbalance的服務,

可以支援把OpenAI API請求格式轉換成Gemini API格式去問。

不負責任架構示意:

image.png

Request Body範例:(OpenAI Chat API format)

{
  "model": "gemini-1.5-flash",
  "messages": [
    {
      "role": "user", 
      "content": "Hi Gemini 聽到請回答"
    }
  ]
}

沉浸式翻譯

眾人皆知的超讚網頁翻譯擴充,可以自己選翻譯服務
服務可以接到AI 服務商,甚至透過控制預備好的角色Prompt 增加翻譯精準度。

但有時還是會覺得免費版的翻譯精準度可以更好。

image 1.png

不過免費的沉浸式翻譯其實自帶填入自己的AI服務商API Key的功能 :)

image 2.png

也可以自己寫發請求的地址:

image 3.png

🔄 融合卡

image 4.png

於是就想著,如果可以把gemini-balance掛在網路上,

讓沉浸式翻譯透過gemini-balance 輪留用Key發Request的話,

不就可以免費爽爽蹭高品質的翻譯服務了嗎?

image 5.png

部署解決方案

Zeabur (PaaS)

考量到服務輕量/專案已經在github上/容器化/部署容易等等。

主要是之前在做其它專案時有訂閱開發者方案quota沒用完 150 NTD/月,附贈5U的額度。

Cloudflare (賽博佛祖)

服務畢竟預計掛在公眾網路上,最好限制一下訪問來源。

CF可以免費&絲滑的做一些基本設定。

主要是手邊有之前跟佛祖註冊的閒置domain可以用。

image 6.png

一些實作紀錄

自訂網域的指向

github fork 上把專案叉過來 & 在Zeabur上把的服務建起來:

.env.example

DATABASE_TYPE 我設 sqlite。

可以設定自己的網域 或是用官方的。

我選擇用自己在CF註冊的Domain。

image 7.png

給上想要的域名服務位址之後,Zeabur會給一個CNAME,

在CF上 → DNS → Records 裡面設定CNAME Proxy:

image 8.png

在CF上 → SSL/TLS → Overview 裡SSL/TLS encryption mode 為 Full:

image 9.png

後面就可以實際連看https://<zeabur設定的外網位置>,看服務能不能通。

第一次實作的時候 遇到CF 解析成功,但連不上Server的502錯誤。

調整gemini-balance服務port

連不上是因為Zeabur的對口是8080:

image 10.png

但是原始專案的服務是寫死在8000上,而且也不支援用環境變數調整:

# Run the application
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--no-access-log"]

不過zeabur有啟動指令可以設定,所以我的方式就是讓服務起來的時候自己改一次

# zeabur service starts command
sh -c "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8080} --no-access-log"

之後就連得上服務了,用ALLOWED_TOKENS 確定可以登入。

(說實在只用一個沒有複雜度限制的密碼有點粗暴。。。)

image 11.png

到這邊就確認gemini-balance服務就透過zeabur部署成功了。

基本的訪問限制:

在CF上 → Security → Security rules

會看到CF 提供我們寫5條custom rule

我是先粗暴的用not ip.src in {IP} → action block

設好之後用手機行動網路連看看。

IMG_2687.jpg

到這邊就算弄好一支自己能用的小服務了。

沉浸式翻譯:

到沉浸式翻譯的設定 → 翻譯服務 → 新增自訂翻譯服務選OpenAI。

填上翻服務名稱/gemini-balance的key/模型要自己輸入gemini的模型:

image 12.png

最後把api位址換掉:

image 13.png

在選單最上面的連線測試ok,這樣就把沉浸式翻譯 → gemini-balance接好了。

結果

拿watchTowr 分享一堆放在公眾網路上的FreePBX server被打穿的故事當範例

⬅️左邊是沉浸式翻譯免費提供的GLM-4-Flash模型

➡️右邊是自己接的gemini-2.5-flash

image 14.png

image 15.png

雖然圖片沒截到,
不過gemini 自己把MSP RCE TTPs 這類專有名詞都顯示中文+(英文全文)還是挺有料。

題外話

裸奔

當時候在看專案的時候,發現服務本身很讚,但是驗證方式真的有點單薄,

就試著找有沒有裸奔上線的:

image 16.png

26個全部都可以連上。。。

如果爆破進去的話,可是可以直接拿到所有明碼的api-key呢…

不知道這個專案有沒有基本的防密碼猜測HeHe。

一些感想

事實上雖然白嫖了,不過我目前用2~3個 free tier 的 key是會用完的,

感覺是網頁翻譯的請求次數比較大量的問題,

沉浸式翻譯訂閱起來還是推薦 :)