搜尋此網誌

2013年12月27日 星期五

[迷你好兔] 利用 SSH Tunnel 保護你的 MySQL 連線 (二)

Secret-Train-Tunnel-of-Love-In-Ukraine-7在前一篇的文章中,我分享了如何利用 SSH Tunnel 連結遠端的 MySQL 服務。作法雖然可行,但是有一些小問題。首先就是你必須擁有遠端 SSH Tunnel 主機的管理權限,以便取消防火牆的限制。如果 SSH Tunnel 主機之前還有其他的防火牆或安全設備加以保護,同樣也必須予以開放。此外,這樣的作法會導致遠端站台多開啟一個原本不必要的網路服務埠號。即使透過類似敲門機制加以保護,終究還是增加了一定程度的風險。
對此,我們可以稍微調整原本的作法,改由使用者的電腦執行 SSH Tunnel 的工作。SSH Client 工具通常就具備建立 SSH Tunnel 的能力,因此不管使用者使用的是 Windows 或 Linux 環境,都可以運用此一作法。
ssh proxy 2
在這次的範例中,我們假設使用者的電腦是 Linux 環境,所需步驟如下:
  1. 在使用者的電腦開啟 SSH Tunnel 服務
    指令如下
    ssh -N -L 3307:192.168.0.20:3306 root@210.59.0.10
  2. 我們同樣使用 3307 作為 SSH Tunnel 的連結埠,以便與 MySQL 預設服務埠號 3306 做一個區隔。
  3. 連結 SSH Tunnel
    在使用者的電腦利用 MySQL Client 工具連結 TCP Port 3307。如果是 MySQL CLI 工具,指令為
    mysql –p –h 127.0.0.1 –P 3307
    輸入密碼後我們就可以進入 MySQL。因為指令 mysql 預設為透過 socket 連結資料庫,所以必須加上 –h 127.0.0.1 這組參數。
  4. 確認 MySQL 權限
    因為 MySQL 的權限會根據帳號以及登入 IP 的不同而改變,所以需要特別注意原本的權限設定。以上述的例子而言,登入的 IP 會是 192.168.0.10,也就是 SSH 主機的內部網段 IP。如果有所不確定,可透過 MySQL 指令 show full processlist 來確認連結的帳號與 IP。也就是說,在這個作法下內部網路的資料傳輸是沒有經過加密的
此一作法不似前一個作法,對原本站台不需做任何設定的調整,所以適用範圍更廣。儘管有資料在內部網路為明文傳輸的缺點,但是通常原本的架構在內部網路即為明文傳輸,所以實際上也算不上是缺點了。

沒有留言:

張貼留言

About