如何加強 Synology (NAS) 的保安(二)

[anti-both]

上 星 期 講 解 了 如 何 加 強 Synology NAS 的 基 本 保 安 ,有 需 要 的 讀 者 可 以 回 顧 上 星 期 的 文 章 。

如 何 加 強 Synology (NAS) 的 保 安 (一 )

今 次 接 著 講 進 階 一 點 的 ,如 何 保 護 使 用 HTTP Port 80 的 第 三 方 應 用 程 式 ,例 如 :phpMyAdmin 和 WordPress。還 有 就 是 家 庭 網 絡 上 的 基 他 裝 置 ,例 如 :網 路 攝 影 機 。

接 著 使 用 上 次 的 案 例 ,挑 出 重 點 的 設 定 如 下
1. NAS IP:192.168.2.3/255.255.255.0;
2. 服 務 :phpMyAdmin 套 件 、WordPress 套 件 、VPN Server 套 件 ;
3. VPN 設 定 :PPTP、Server IP: 10.0.0.0;
4. 網 路 攝 影 機 IP:192.168.2.4/255.255.255.0、Port 8000;
5. 路 由 器 設 (Port forwarding):HTTP(80)、PPTP VPN(1723)、網 路 攝 影 機 (8000);

我 們 知 道 ,現 在 要 連 接 到 NAS,都 要 先 用 VPN 連 線 ,除 了 Port 80 的 http 服 務 。假 設 你 的 公 眾 IP 地 址 是 123.123.123.123,那 你 便 可 以 從 http://123.123.123.123/phpMyAdmin/ 去 管 理 你 的 MySql 資 料 庫 。這 樣 做 其 實 不 太 安 全 ,因 為 人 人 都 可 以 直 接 連 線 得 到 ,令 別 人 有 機 會 用 暴 力 攻 擊 去 破 解 你 的 密 碼 。

現 在 我 們 已 經 有 了 VPN,也 知 道 VPN 連 線 之 後 ,我 們 會 有 一 個 固 定 的 VPN 專 屬 IP 地 址 ,10.0.0.x。於 是 我 們 就 可 以 利 用 這 個 IP 來 限 制 連 線 。

首 先 我 們 用 任 何 的 文 字 編 輯 器 ,打 開 phpMyAdmin 裡 面 的 config.inc.php。然 而 加 入 下 面 的 程 式 碼 。

//block root from logging in except from the private networks
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
'deny root from all',
'allow root from localhost',
'allow root from 192.168.2.0/24',
'allow root from 10.0.0.0/24',
);

這 幾 行 程 式 碼 意 思 是 ,只 容 許 由 本 地 區 域 網 路 ,即 192.168.2.x,又 或 者 從 VPN,即 10.0.0.x 來 連 接 。任 何 其 他 IP 地 址 都 是 不 能 連 接 的 。這 樣 的 話 ,別 人 使 用 http://123.123.123.123/phpMyAdmin/ 連 到 你 的 phpMyAdmin,即 使 擁 有 root 密 碼 ,也 是 不 能 成 功 登 入 的 。

那 我 們 自 己 要 怎 樣 連 線 呢 ?我 們 還 是 要 先 用 VPN 連 通 了 NAS,再 打 開 http://10.0.0.0/phpMyAdmin/,就 能 成 功 登 入 了 。這 樣 的 設 定 ,確 保 了 使 用 者 需 要 兩 次 登 入 ,才 能 使 用 得 到 phpMyAdmin。比 本 來 是 安 全 了 很 多 的 。

然 後 是 WordPress,但 是 WordPress 本 身 不 包 含 類 似 的 設 定 ,所 以 我 們 要 用 到 Apache Web Server 的 .htaccess 功 能 。

首 先 ,要 在 wordpress 資 料 夾 ,在 .htaccess 檔 案 內 加 上 保 護 wp-login.php 的 幾 行 程 式 碼 。如 果 本 身 沒 有 .htaccess 檔 案 ,你 可 以 用 任 何 純 文 字 編 輯 器 新 增 一 個 。

<Files wp-login.php>
Order Deny, Allow
Deny from all
Allow from 192.168.2
Allow from 10.0.0
</Files>

例 子 中 的 IP 地 址 只 有 頭 三 位 的 數 子 ,意 思 就 是 一 個 range,包 含 了 所 有 192.168.2.x 和 10.0.0.x。

然 後 就 是 保 護 整 個 wordpress/wp-admin/ 資 料 夾 。同 樣 的 我 們 編 輯 在 wp-admin 資 料 夾 裡 面 的 .htaccess 檔 案 ,沒 有 的 話 就 新 增 一 個 。

Order Deny,Allow
Deny from all
Allow from 192.168.2
Allow from 10.0.0

你 會 注 意 到 ,這 次 是 沒 有 使 用 Files Tag 的 ,因 為 不 是 只 保 護 其 中 一 個 檔 案 ,而 是 資 料 夾 裡 面 的 所 有 檔 案 。

.htaccess 這 個 技 巧 十 分 實 用 ,基 本 上 大 部 分 網 站 ,或 者 網 路 應 用 程 式 ,都 可 以 用 這 個 方 法 來 加 強 保 安 。有 機 會 的 話 另 文 和 大 家 介 紹 。

完 成 之 後 ,跟 phpMyAdmin 的 設 定 一 樣 ,我 們 使 用 http://123.123.123.123/wp-login.php 是 連 接 不 上 了 。

我 們 自 己 要 連 線 ,就 一 樣 是 先 要 用 VPN 接 通 NAS,然 後 用 http://10.0.0.0/wp-login.php 打 開 登 入 畫 面 。也 就 一 樣 是 兩 重 登 入 了 。

如 果 你 的 家 裡 ,還 有 網 路 攝 影 機 等 的 設 備 。我 們 也 是 可 以 利 用 VPN 來 連 線 ,加 強 保 安 的 。

用 上 面 案 例 ,本 來 你 連 線 到 網 路 攝 影 機 的 網 址 是 http://123.123.123.123:8000/。但 由 於 這 樣 不 太 安 全 ,所 以 我 們 首 先 取 消 了 路 由 器 上 Port 8000 的 Port forwarding。這 樣 的 話 ,http://123.123.123.123:8000/ 是 什 麼 也 連 不 到 的 。

然 後 我 們 如 何 連 接 呢 ?當 然 也 是 先 用 VPN 連 接 到 NAS,但 這 次 我 們 用 回 網 路 攝 影 機 本 身 的 IP 地 址 來 連 線 ,http://192.168.2.4:8000/。

但 要 能 這 樣 子 成 功 連 線 ,其 實 有 一 個 小 技 巧 的 ,就 是 你 的 VPN 客 戶 端 ,要 把 所 有 的 網 路 流 量 都 由 VPN 連 線 傳 送 ,技 術 上 說 法 就 是 在 route table 增 加 一 條 route。在 我 的 印 象 中 ,這 個 「傳 送 所 有 流 量 」的 默 認 值 究 竟 是 「是 」還 是 「否 」,是 根 據 每 個 VPN 客 戶 端 自 有 不 同 的 ,機 率 大 概 是 一 半 一 半 。Windows 系 統 裡 的 應 該 都 是 「是 」,Mac OS 和 iOS 的 應 該 都 是 「否 」。

Win7 使 用 遠 端 網 路 的 預 設 閘 道

在 Windows 7 裡 的 設 定 地 方 是 在 ,「控 制 台 」>「網 路 和 共 用 中 心 」>選 擇 你 的 VPN 連 線 >按 「內 容 」>去 「網 路 功 能 」頁 >選 「TCP/IPv4」>按 「內 容 」>按 「進 階 」,裡 面 有 「使 用 遠 端 網 路 的 預 設 閘 道 」(Use Default Gateway on Remote Network)。要 確 保 這 個 選 項 有 打 勾 。

iOS 傳 送 所 有 流 量

在 iOS 裡 面 就 簡 單 一 點 ,「設 定 」>「VPN」>選 擇 你 的 VPN 連 線 >按 「>」符 號 >裡 面 有 「傳 送 所 有 流 量 」(Send all trafic)。要 確 保 該 選 項 是 開 啟 。

Mac OS 就 笨 一 點 ,沒 有 這 個 選 項 ,要 自 己 打 Command。

> sudo route add -net 192.168.2.3/16 10.0.0.0

192.168.2.3 就 是 NAS 的 內 部 IP 地 址 ,10.0.0.0 就 是 VPN Server 的 地 址 。

經 過 這 個 設 定 之 後 ,你 便 可 以 經 過 VPN 連 線 ,用 家 裡 的 內 部 IP 地 址 來 連 接 你 所 有 的 裝 置 了 。這 樣 的 設 定 ,也 讓 本 來 只 要 一 重 登 入 的 設 備 ,變 成 了 要 兩 重 登 入 ,大 大 增 加 了 安 全 性 。

ctleung張先生,男性,肖龍。
職業:I.T. Consultant
簡介:不好好讀書;七尺差五寸,手長過膝,雙耳垂肩;性寬和,寡言語,喜怒不形於色。據說少時曾斬白蛇於鳳凰山下……

This entry was posted in Computer & Network and tagged , , , , , , , , . Bookmark the permalink.

10 Responses to 如何加強 Synology (NAS) 的保安(二)

  1. gerald says:

    多謝你的分享.
    遇到一點問題, 請給點意見.
    我在家中的 Linux Server 中安裝好 PPTP (VPN), 在公司可以正常訪問家中的的 Samba. iphone 也可以訪問 Samba.
    使用 iphone 訪問家中的 DLNA Server ( mediatomb & ushare ), 都沒有反應.
    請問 VPN + DLNA 方案, 可行嗎?

    • C.T. Leung says:

      非常感謝你的留言。但很抱歉,因為老是覺得 network media player 比較好用,所以 DLNA server 並沒有用過幾個。在 iPhone 的時代,我是用 Ace Player 直接播放 samba server 上面的多媒體檔的。用 VPN 也沒問題,連線夠快就可以了。

      至於 VPN + DLNA,理論上是可行的。出問題的,有可能是 3G network。你可以先試用 iPhone 在家裡的 LAN (WiFi) 連線 VPN,這樣試試有沒有問題(我覺得應該沒問題)。然後再試試用 3G 連線 VPN,再看看有沒有問題。如果真是 3G 的問題,筆者也沒有解決的方法……

  2. rolstone says:

    您好,請問,phpMyAdmin真實的路經在哪呢?

    • C.T. Leung says:

      我想你問的是 Synology 的 phpMyAdmin 套件安裝好之後在那裡吧?預設值應該是:

      /volume1/web/phpMyAdmin/

      /volume1/web 就是 Web Station 的預設路徑。要記得這是 Linux,是大小寫有異的。

      • rolstone says:

        您好,第一個連結就是我要的,感恩!
        因為您的文章只有提到修改檔案,
        但沒看到位置。
        因為對Linux不熟,
        後來有查到指令了。
        我用
        find / -name phpMyAdmin
        有查到幾個目錄。
        我之前都是用.htaccess這個檔案下去擋。
        (各子目錄都放)

        因為我在WAMP(Windows系統底下)有看到Log檔案,
        駭客會在phpMyAdmin有幾個子目錄下直接開啟特殊網頁以繞過檢查。

        • C.T. Leung says:

          呵呵,你說得對,我在文中沒提到。

          因為 phpMyAdmin 本來就只能放到 web station 裡面處跑嘛。而有用 web station 的用家們,通常都已經在自己的電腦上面 map 好了 \\diskstation\web 嘛。phpMyAdmin 就只是 web folder 裡面的一個 subfolder 而已,應該很好找的吧。

          我本來還以為你寫其他 shell scripts 之類要用到這個路徑呢。

          : )

  3. JoJo says:

    你好,謝謝你的 文章詳細又清晰,
    我跟你的方法在phpMyAdmin 的config.ini.php加入以下設定,

    //block root from logging in except from the private networks
    $cfg[‘Servers’][$i][‘AllowDeny’][‘order’] = ‘deny,allow’;
    $cfg[‘Servers’][$i][‘AllowDeny’][‘rules’] = array( ‘deny root from all’,
    ‘allow root from localhost’,
    ‘allow root from 192.168.0.0/24’,
    ‘allow root from 10.0.0.0/24’ );

    IP都確認過, 然後使用手耭連線到VPN,
    再連線到 10.0.0.0/phpMyAdmin

    但畫面顯示
    phpMyAdmin – 錯誤
    設定檔權限錯誤,其他人不應擁有寫入權!

    不知道問題出在哪裡呢?

  4. JoJo says:

    你好, 我較早前留了言關於”phpMyAdmin – Error”
    之後我發現了原來我修改 config.inc.php 時, 使用者由”root”變成了我登入nas 的帳號名稱, 我猜大概是這個原因導致phpMyAdmin讀取不了 config.inc.php
    而我也找不到方法把使用者設回root (沒有root 可以選擇)
    最後我把phpMyAdmin重裝了一遍….
    現在還沒有方法如何可以成功地改動config.inc.php而不會改變它的使用者

Leave a Reply

Your email address will not be published. Required fields are marked *