跳到主要內容

用 http-auth 基本身分驗證為安裝在雲端 (AWS、GCP) 的 Gekko 做一個簡單登入介面,避免交易所 API 被盜用



Gekko 本身的網頁 UI 沒有附帶任何身分驗證機制,換句話說如果開在公網上只要有你主機 IP 的人都可以進到控制介面,雖然 Gekko 加入了 API Key 之後是沒辦法看到原始的金鑰字串,但畢竟仍然有交易功能,可能被有心人士惡搞。目前的做法多半會是從主機端的安全來著手,開在 Google Cloud (GCP) 或 Amazon EC2 的可以使用它本身的防火牆規則來去禁止非你以外的 IP 連線,但對於大多數人可能不像我有靜態 IP,變得每次 ISP 重新分配 IP 或使用別的網路連線又要重設,為了安全要付出的麻煩還真不少阿。

所以就想到做一個很陽春的 http-auth 基本身分驗證機制,簡單說就是要登入啦,在讀入 Gekko UI 之前得要先輸入設定的帳號密碼才能通關,雖然不敢保證這個安全機制萬無一失,但至少是多了一層保護,而且安裝也很簡單,最重要的還是不要隨便透漏自己的 IP 給他人啦。


npm install http-auth
首先要安裝 http-auth 的套件才能使用身分驗證的功能。


再來打開 Gekko 資料夾中的 web/server.js,分別加入以下兩段程式碼。

var auth = require('http-auth');
var basic = auth.basic({
realm: "Restricted",
file: __dirname + "/pass.htpasswd"
});
這段加到 server.js 的最上方就可以了,pass.htpasswd 就是你的金鑰,可以自行更改檔名或路徑,之後記得上傳到與程式碼指定的相同路徑就好了。

app.use(auth.koa(basic));
這段則加到 const app = koa(); 後面即可。


之後就要製作金鑰檔,基本上就是文字檔,簡單的格式就是「帳號:密碼 ,建議你的密碼可以拿去加密,不要直接放解密的密碼比較好。把這個檔案存成 pass.htpasswd 或你剛剛指定的檔名,上傳到 gekko/web 內 (或你指定的路徑)。


製作加密 (encrypt) 的密碼可以參考這個網站的產生器,只要把密碼打入就可以加密了,如果不放心使用線上的服務也可以去下載加密用的軟體回來跑。


之後在從瀏覽器進入 Gekko 介面時就會要求帳號密碼來進行身分驗證了,你也可以在 pass.htpasswd 內新增多個帳號密碼組合供更多人使用。


切記,這個並不是非常有效的安全機制,安全最好還是從主機端的防火牆著手,不要開啟不需要的 Port,也不要隨意讓別人知道你的主機 IP 避免自己交易所的 API 落入他人之手。 





留言



這個網誌中的熱門文章

Linux (Ubuntu) 查詢硬碟容量、剩餘大小指令

在 Ubuntu Desktop 版本或有安裝 GUI 像 Xfce 的 Server 版本當然可以直接從圖形介面查看硬碟容量和已經使用的大小, 但如果是在純 CLI 版本或使用 SSH 連線時呢?那就需要用到指令了。 顯示硬碟容量、已使用、可用大小。 df -h 查詢資料夾所占硬碟的大小。 du -h 查詢檔案大小 ls -l

吃光硬碟讀寫的大怪獸 - Superfetch 是什麼?可以關嗎?

Superfetch 是 Windows 內建的硬碟快取功能,它會預先將檔案讀取起來到 Ram 裡方便稍後做使用,所以常常在工作管理員內都可以看到 Superfetch 往往占掉了不少的硬碟使用量,那這樣的情形是好的嗎?其實理論上並不會有太大影響,畢竟 Superfetch 只是將等會要讀取的內容先預置在 Ram 中,如果不趁硬碟負載小的時候優先讀取,之後反而可能忙不過來呢。當然如果你是使用 SSD 的話可能會為使用壽命擔心, 高頻率的讀取可能加速固態硬碟老化,那在讀取速度原本就很快的 SSD 當然就相對的沒有必要開啟 Superfetch 了。 Superfetch 在電腦待機時吃掉大部分硬碟使用量是很常有的事。 要關閉也很簡單, Win+R > services.msc 打開「服務」,找到 Superfetch。 右鍵 > 內容,將它更改為「 已停用 」後確定即可。

TLS / SSL 金鑰轉檔,「.crt / .key」如何轉成「.pem」?( OpenSSL 教學)

不管是哪個 Certificate Authority (CA) 發的憑證多半金鑰檔都是給「.crt / .key」格式的檔案,像是「ca_bundle.crt」、「 certificate.crt」和「.private.key」這種檔案, 但是在實際使用 (Nginx、Apache...等伺服器) 卻會需要的是「.pem」檔 ,那要怎麼轉換呢?其實可以直接使用 OpenSSL 這個軟體和幾行指令來達成。 OpenSSL 官方網站 :  https://www.openssl.org 下載頁面 :  https://www.openssl.org/source sudo apt-get install openssl 以 Linux (Ubuntu / Debian ...等) 為例,可以直接使用 apt-get 指令下載安裝 OpenSSL,如果是其他系統可以參考官方網站的說明。 openssl rsa -in private.key -text > private.pem openssl x509 -inform PEM -in certificate.crt > certificate.pem openssl x509 -inform PEM -in ca_bundle.crt > ca_bundle.pem 以前述所提到的「ca_bundle.crt」、「 certificate.crt」和「.private.key」三個檔案為例,就可以用上方的指令完成轉檔,其實同副檔名的轉檔指令都相同,所以兩個「.crt」的指令其實是重複的,也要記得套換成自己的檔案名稱。 如果需要申請免費的 SSL 憑證也可以參考之前介紹過的 SSL For Free ,它是使用「Let's Encrypt」核發的憑證,以及如果覺得申請憑證和定期更新太麻煩,也可以考慮自動化的 Caddy Server 能自動幫網站升級 HTTPS。