搜尋此網誌

2014年1月10日 星期五

[工具介紹] Apache 模組 mod_security - 以阻擋造訪路徑攻擊為例

前一篇文章中,我提到網站應用程式的安全問題,光靠定期更新並不能有效加以解決。透過 Secure SDLC 與 Secure Coding 的施作,才能有效提昇系統的整體安全性。而在前兩篇文章中,我提到了這幾天遠通電信網站被發現的一個安全漏洞 - 造訪路徑攻擊,也提到了一些防護手法。
但是回到現實面,我們知道很多時候該做的事情就是沒辦法進行,所以文章中提到的防護手法不一定能夠順利實施。原因有很多,不過歸到底通常都出在人身上。正所謂樹多有枯枝,人多有白痴。那怕只是一個程式設計師的一時鬼遮眼,都有可能讓系統產生莫大的安全漏洞。針對這種狀況,通常建議的作法就是採用 Virtual Patching,白話一點來說就是導入 WAF (Web Application Firewall)。不過再次回到現實面的現實面,導入 WAF 的金錢成本相當高,通常沒有準備七位數是沒有廠商會理你的。
好消息是沒錢也有沒錢的作法,其中 Apache 的 mod_security 模組正是一個免費的好用工具。在這次的文章中,我將示範如何利用 mod_security 來阻擋造訪路徑攻擊,環境為 CentOS 6。在進行前必須提醒讀者,因為示範過程將會改變網站的存取行為,因此請不要直接在正式的環境模擬
為了完成這次的範例,我先在網站上放置了一個 PHP 程式 – get_file_content.php,其內容為
<?php
  $content = file_get_contents($_GET['path']);
  echo nl2br($content);
?>
這個程式的功能很簡單,就是讓使用者透過 path 變數指定某個檔案名稱,然後程式就會將檔案內容完整顯示出來。所以當我們呼叫 get_file_content.php?path=../../../../../../etc/passwd 時,應該會看到這個熟悉的畫面
image
接下來,就讓我們一步步完成今天的範例吧。
  • 安裝 EPEL Repository
    EPEL 提供了 mod_security 的 RPM 套件,可以大幅簡化安裝與日後更新的動作,所以我選擇透過 EPEL 來安裝 mod_security。請先在 https://fedoraproject.org/wiki/EPEL 下載並安裝適合的版本。
  • 安裝 mod_security
    指令是
    yum -y install mod_security
  • 新增造訪路徑攻擊字串的規則
    mod_security 的規則設定檔放在目錄 /etc/httpd/modsecurity.d/activated_rules 內,檔案名稱必須以 .conf 結尾。請在這個目錄產生一個稱為 testing.conf 的檔案,並在檔案內加入下列內容
    SecRule REQUEST_URI "../" "phase:1,t:urlDecode,log,deny,status:503,id:1000"
  • 重新讀取 apache 設定檔
    指令是
    service httpd reload
  • 重新載入網址
    此時畫面應該會出現錯誤訊息 (Code=503)
    image
  • 查看阻擋記錄
    我們可以在日誌檔 /var/log/httpd/modsec_audit.log 看到類似下列的訊息
    --48927b7c-A--
    [10/Jan/2014:01:24:19 +0800] Us7bQ8CoAHcAAEwAH-AAAAAB 192.168.10.11 51517 192.168.10.10 80
    --48927b7c-B--
    GET /get_file_content.php?path=../../../../../../etc/passwd HTTP/1.1
    Host: 192.168.10.10
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4
    
    --48927b7c-F--
    HTTP/1.1 503 Service Temporarily Unavailable
    Content-Length: 402
    Connection: close
    Content-Type: text/html; charset=iso-8859-1
    
    --48927b7c-E--
    
    --48927b7c-H--
    Message: Access denied with code 503 (phase 1). Pattern match "../" at REQUEST_URI. [file "/etc/httpd/modsecurity.d/activated_rules/testing.conf"] [line "1"] [id "1000"]
    Action: Intercepted (phase 1)
    Stopwatch: 1389288259978368 472 (- - -)
    Stopwatch2: 1389288259978368 472; combined=48, p1=43, p2=0, p3=0, p4=0, p5=5, sr=0, sw=0, l=0, gc=0
    Response-Body-Transformed: Dechunked
    Producer: ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/).
    Server: Apache/2.2.15 (CentOS)
    Engine-Mode: "ENABLED"
    
    --48927b7c-Z--
  • 下載 OWASP 規則
    透過一個簡單的規則,我們就可以避免造訪路徑攻擊。儘管如此,這個規則其實功能有限,因為它只檢查了 Request 字串,萬一是透過 POST (也就是 Content Body) 傳遞攻擊字串,那可就一點也派不上用場了。
    撰寫規則這種事,最好還是讓給專業的來。目前 mod_security 提供兩組規則,其中一組要錢,另外一組由 OWASP 所維護的規則則免費使用。在此我們選用 OWASP 的免費規則,指令如下
    cd /etc/httpd/modsecurity.d
    rm –f activated_rules/testing.conf
    wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master -O owasp-modsecurity-crs.master.tgz
    tar xvfz owasp-modsecurity-crs.master.tgz
  • 安裝所需規則
    我們下載的檔案內包含許多規則,一般而言,我們不會啟用全部的規則。在此範例中,我們僅會啟用示範所需的規則。指令如下
    cd activated_rules/
    cp ../SpiderLabs-owasp-modsecurity-crs-f4d33c4/modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
    ln –s ../SpiderLabs-owasp-modsecurity-crs-f4d33c4/base_rules/modsecurity_crs_42_tight_security.conf modsecurity_crs_42_tight_security.conf
  • 重新讀取 apache 設定檔
    指令是
    service httpd reload
  • 重新載入網址
    此時畫面應該會出現錯誤訊息 (Code=403)
    image
    雖然錯誤訊息有所不同,但是一樣達到阻擋造訪路徑攻擊的目的。
  • 新增其他規則
    等等,萬一駭客輸入的攻擊字串不包含 ../,而是直接輸入 /etc/passwd 呢?令人驚訝的是,呼叫 get_file_content.php?path=/etc/passwd 依舊會直接顯示出檔案內容。因為 /etc/passwd 實在太過重要,所以 OWASP 提供了其他的規則以避免這類攻擊字串,指令如下
    ln –s ../SpiderLabs-owasp-modsecurity-crs-f4d33c4/base_rules/modsecurity_40_generic_attacks.data modsecurity_40_generic_attacks.data
    ln –s ../SpiderLabs-owasp-modsecurity-crs-f4d33c4/base_rules/modsecurity_crs_40_generic_attacks.conf modsecurity_crs_40_generic_attacks.conf
  • 再次重新讀取 apache 設定檔
    指令是
    service httpd reload
  • 再次測試
    此時呼叫 get_file_content.php?path=/etc/passwd 應該也會看到錯誤訊息了
    image
透過 mod_security 與 OWASP 提供的規則,我們就可以輕鬆避免遭受造訪路徑的攻擊。好啦,輕鬆兩字是騙人的,儘管 mod_security 解決了金錢成本的問題,但是導入 WAF 時所可能遭遇的其他問題,還是需要好好處理才能真正發揮 mod_security 的效用

2014年1月9日 星期四

[資安觀念] 您補對了嗎?

OLYMPUS DIGITAL CAMERA         這幾天 eTag 的新聞依舊不斷,今天看到一篇來自於自由時報的新聞報導 - 國道計程變國際笑話/遠通資安凸槌 政府罰不到,報導最後提到
“根據資深網管人員康康表示,駭客可能在遠傳網址後面加上特殊字元,剛好可以進入敏感目錄,不能顯示後端資料庫資料是否外洩。但這顯示管理人員太不小心了,因為只要有定期更新修補程式,就可以避免這個問題。”
姑且不論這位康康到底是何方神聖,但是看到結論是只要定期更新修改程式就可以避免這個問題,就知道這位康康果然很資深,講的大概是10年前的觀念。
駭客的攻擊手法千百種,不過大致的趨勢是從早期的攻擊網路、攻擊作業系統、到後來針對應用程式的弱點下手。而應用程式包含所謂的套裝程式 (如 PDF Reader) 以及自行開發的程式,都是可能受到攻擊的目標。而公開的網站應用程式,更是熱門的目標。在這些應用程式之中,自行開發的網站應用程式,自是熱門中的熱門。原因無他,一是這類網站通常含有大量的有價資訊,另外一方面則是這類網站的安全防護能力通常也較差,往往用自動化工具就可以找到不少可憐的羔羊。再加上公開的特性,對駭客來說就像男人看到穿著清涼又身材曼妙的美女在沙灘上走來走去一般令人無法抗拒。
很可惜的是,對自行開發的網站應用程式而言,很多安全問題並不是靠更新系統就可以解決的。必須要從應用程式面下手,認真做好各項的防護工作後才能有效提昇安全性。更好的作法,當然就是導入類似 Secure SDLC 的制度。道理很簡單,因為一開始駭客就不是利用作業系統的漏洞取得這些機密資訊,而是利用了程式沒有做好限制的邏輯缺陷。我相信大家都知道窗戶破了就該把窗戶補好,而不是把原本的圍牆升級為高壓電網。就像我常說的,頭痛醫頭不算什麼,頭痛醫腳才是真庸醫。
所以,儘管定期更新真的很重要,但是再也別把它當成萬靈丹或唯一該做的事情了。

2014年1月7日 星期二

[交戰守則] 避免造訪路徑攻擊 (Path Traversal Attack),免得成為下一個遠通電收

unnamed這幾天對開車族而言,一個很重要的新聞就是國道全面採用計程收費。而說到計程收費,就不得不提到  eTag 這個東西。一直以來,eTag 就充滿了各式各樣的爭議,不過爭議再多,終究還是一個既定的政策。只是開車族可能發現,eTag 本來提供了查詢的功能,但是從去年底全面上線以來,卻一直處於無法查詢的狀態。至於原因?從一開始說的系統轉移,到後來包含頻寬不足、受到駭客攻擊等說法,讓人摸不清真相。如果是一般的企業,敢承認自己被駭客攻擊,大概民眾都不太會去懷疑,畢竟這對公司的信譽可是會產生很嚴重的負面影響。但是對遠通電收這樣一家公司而言,反而有不少人懷疑這只是他們的推托之詞。

事情的真相,大概只有三個人知道。不過就在昨天,有人在 pastebin.com 貼了一個分享,網址是 http://www.fetc.net.tw/portal/front/staticPage?articleId=402880fd1eafaeee011eafefd1d60005&path=../../../../../../../../../../../../../../etc/passwd,內容是”疑似”遠通電收網站主機的 passwd 檔!雖然這個檔案實際上不包含密碼,但是這個安全漏洞的影響可大可小。如果稍有不慎 (其實已經很不慎了),別說是主機的密碼,就連資料庫的密碼也是整串帶走。在針對網站的攻擊手法中,這類攻擊稱之為造訪路徑攻擊,英文是 path traversal attack。又因為攻擊字串中往往帶有 ../ 字串,所以又稱為 dot-dot-slash attack。

嚴格來說,這並不是一種很新的攻擊手法,甚至已經可以算得上是老掉牙的東西。而要避免這種攻擊手法也不是很困難,在 OWASP 的網站上,針對造訪路徑攻擊有提到下列幾種防護手法:

  • Prefer working without user input when using file system calls
    不要把使用者的輸入帶入有關 file system 的函式呼叫參數中。
  • Use indexes rather than actual portions of file names when templating or using language files
    使用代號來表示檔案,而不要使用實際的檔案名稱/路徑。
  • Ensure the user cannot supply all parts of the path – surround it with your path code
    避免使用者可以輸入完整的檔案名稱與路徑。實務上,此點要做的好其實並不容易,務必要搭配下一個建議手法。
  • Validate the user’s input by only accepting known good – do not sanitize the data
    驗證使用者的輸入。不要使用清除非法字元的方式,而是只接受合法的輸入。
  • Use chrooted jails and code access policies to restrict where the files can be obtained or saved to
    使用 chroot 的機制以避免網站程式讀取到系統的其他檔案。除此之外,如果網站框架允許設定程式的權限,也可以用來避免此一問題。

以造訪路徑攻擊而言,其實也可用源碼檢測工具加以偵測,效果通常不錯。而黑箱工具,往往也可以達到一定的成效。可想而知,遠通電收應該是連這類工具都沒用就大膽上線。遠通電收不是第一個出包的網站,我相信也不會是最後一個。重點是,這種事情千萬不要發生在你跟我的身上。

[迷你好兔] 利用 CMAN+Pacemaker 建立不中斷的網路

3410-24-hours-services閘道器是一種很常見的網路裝置,包含路由器與代理伺服器都可算是閘道器的一種。以下圖而言,標示為 Gateway 的設備提供了包含內部 IP 上網用 NAT 機制 (SNAT)、HTTP Reverse Proxy 與 Virtual Server (DNAT) 等功能,可說是一台多功能的閘道器。這些功能對於一個網管人員來說,並不是什麼新奇的概念與技術。但是這個架構有一個致命的缺點,那就是閘道器 Gateway 掌管了所有資料的交換,所以一旦 Gateway 出了問題,那可就真是一場大災難了。而這正是所謂的單點失效 (Single Point of Failure, 簡稱SPF) 問題。
cluster - before
為了解決這個問題,許多中高階的網路設備都提供了高可用性的備援機制 (High Availablity, 簡稱 HA),其中比較簡單的一種架構稱之為 Active/Passive 模式。在此模式中,至少會佈署兩台提供相同功能的設備,其中一台為主 (Active),另外一台為輔 (Passive)。當主要的設備失效時,輔助的設備會自動接手繼續提供服務,以確保服務不會因為設備失效而中斷。而當主要的設備恢復運作後,可以選擇繼續由輔助的設備提供服務,或是自動切換回主要的設備。可惜的是,這樣的功能通常只見於中高階的設備,而這些設備本來就所費不貲,所以採用此架構往往不但成本相對高昂,而且平常備用的設備並沒有提供服務,再再降低了設備的使用效率
在今天在範例中,我將利用 CentOS 6 內建的 CMAN+Pacemaker 建立一個高可用性的閘道器,用低廉的成本解決單點失效的網路問題。與原本的架構相較,需要增加為兩台主機以提供 Active/Passive 模式,而且每個主機僅需配置一個內部用的 IP 位址。本範例假設兩台主機原本就已經分別設定好 Routing/DNAT/SNAT/Reverse Proxy 等網路功能,以下就讓我們一步步完成今天的範例吧。
cluster - after
  1. 設定主機的網路 (Gateway01 與 Gateway02)
    兩台主機的 IP 位址分別為 192.168.10.21 (Gateway01) 與 192.168.10.22 (Gateway02)。此兩台主機各配置兩張網卡,在範例中內部網路皆連結至網路介面 eth1。在此架構中,我們不需要設定外部網卡 (也就是 eth0) 的 IP 位址,所以請設定成手動指定但不輸入 IP 位址等資訊
  2. 設定 /etc/hosts 檔 (Gateway01 與 Gateway02)
    在兩台主機的 /etc/hosts 分別加上下列兩行設定
    192.168.10.21 gateway01
    192.168.10.22 gateway02
  3. 安裝所需套件 (Gateway01 與 Gateway02)
    在兩台主機分別安裝所需套件,指令為
    yum install ccs cman pacemaker pcs resource-agents
  4. 設定 CMAN 參數 (Gateway01 與 Gateway02)
    分別在兩台主機執行下列指令
    echo "CMAN_QUORUM_TIMEOUT=0" >> /etc/sysconfig/cman
  5. 設定防火牆 iptables (Gateway01 與 Gateway02)
    我們需要用到 UDP Port 5404, 5405 與 TCP Port 11111,請在兩台主機分別進行設定,以便兩台主機能夠順利進行溝通。
  6. 設定預設路由 (Gateway01 與 Gateway02)
    因為在此架構中,備援主機本身不具備對外的 IP 位址,因此與其他內部設備一樣必須透過配置於主要主機的 IP 位址 192.168.0.254 進行網際網路的連結。為了避免當備援主機身分轉換成為主要主機後兩個路由產生衝突,所以我們降低此路由的優先順序,使其轉換成主要主機後,可以順利使用對外 IP 位址作為預設路由。我們在兩台主機分別執行下列指令
    route add default gw 192.168.0.254 metric 99
  7. 設定開機自動新增預設路由 (Gateway01 與 Gateway02)
    分別在兩台主機的 /etc/rc.local 加上下列設定
    route add default gw 192.168.0.254 metric 99
  8. 設定 Cluster (Gateway01)
    在 gateway01 執行下列指令
    ccs -f /etc/cluster/cluster.conf --createcluster pacemaker1
    ccs -f /etc/cluster/cluster.conf --addnode gateway01
    ccs -f /etc/cluster/cluster.conf --addnode gateway02
    ccs -f /etc/cluster/cluster.conf --addfencedev pcmk agent=fence_pcmk
    ccs -f /etc/cluster/cluster.conf --addmethod pcmk-redirect gateway01
    ccs -f /etc/cluster/cluster.conf --addmethod pcmk-redirect gateway02
    ccs -f /etc/cluster/cluster.conf --addfenceinst pcmk gateway01 pcmk-redirect port=gateway01
    ccs -f /etc/cluster/cluster.conf --addfenceinst pcmk gateway02 pcmk-redirect port=gateway02
  9. 同步 Cluster 設定 (Gateway01)
    將 gateway01 下的 /etc/cluster/cluster.conf 同步至 gateway02,指令為
    rsync /etc/cluster/cluster.conf gateway02:/etc/cluster/
  10. 啟動 cman 服務 (Gateway01 與 Gateway02)
    在兩台主機分別執行下列指令
    service cman start
  11. 啟動 pacemaker 服務 (Gateway01 與 Gateway02)
    在兩台主機分別執行下列指令
    service pacemaker start
  12. 設定 cman 與 pacemaker 開機自動執行 (Gateway01 與 Gateway02)
    在兩台主機分別執行下列指令
    chkconfig cman on
    chkconfig pacemaker on
  13. 關閉 fencing 與 STONITH (Gateway01)
    執行下列指令
    pcs property set stonith-enabled=false
    pcs property set no-quorum-policy=ignore
  14. 確認 Cluster 狀態 (Gateway01)
    執行指令
    pcs status
    應可以看到類似下列資訊
    Cluster name: pacemaker1
    Last updated: Tue Jan  7 17:27:30 2014
    Last change: Tue Jan  7 12:55:21 2014 via crm_attribute on gateway01
    Stack: cman
    Current DC: gateway01 - partition with quorum
    Version: 1.1.10-14.el6_5.1-368c726
    2 Nodes configured
    0 Resources configured
    
    
    Online: [ gateway01 gateway02 ]
  15. 設定網路資源 (Gateway01)
    執行下列指令
    pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.0.254 cidr_netmask=24 nic=eth1 op monitor interval=3s
    pcs resource create ClusterPublicIP ocf:heartbeat:IPaddr2 ip=168.95.10.10 cidr_netmask=28 nic=eth0 op monitor interval=3s
    pcs resource create ExternalDefaultRoute ocf:heartbeat:Route destination="0.0.0.0/0" gateway="168.95.10.1"
    其中網路相關參數 (192.168.0.254/24, 168.95.10.10/28 與 168.95.0.1) 請依據實際的環境加以調整。
  16. 設定 Email 通知 (Gateway01)
    如果我們希望知道何時發生資源轉移 (如從 gateway01 轉移到 gateway02),可以執行下列指令
    pcs resource create EmailNotification ocf:heartbeat:MailTo email=cyril.hcwang@gmail.com op monitor timeout=10 interval=3s
  17. 設定資源群組 (Gateway01)
    利用資源群組的設定,我們可以確保所有的資源同時進行轉移,而不會出現內部 IP 位址 192.168.0.254 配置於 Gateway01 但外部 IP 168.95.10.10 位址卻配置於 Gateway02 的錯誤狀況。指令如下
    pcs resource group add Gateway ClusterIP CusterPublicIP ExternalDefaultRoute EmailNotification
  18. 設定資源啟用順序 (Gateway01)
    指令如下
    pcs constraint order ClusterIP then ClusterPublicIP
    pcs constraint order ClusterPublicIP then ExternalDefaultRoute
    pcs constraint order ExternalDefaultRoute then EmailNotification
    設定完畢後我們可以透過下列指令確認啟用順序
    pcs constraint order show --full
  19. 設定主要設備 (Gateway01)
    在此範例中,我希望主要由 Gateway01 提供服務,因此需設定其擁有較高的優先權。指令如下
    pcs constraint location Gateway prefers gateway01=10
    pcs constraint location Gateway prefers gateway02=5
    設定完畢後我們可以透過指令
    pcs constraint location show --full
    確認是否有其他的優先權設定會影響到此一判斷,並在必要時透過指令
    pcs constraint location Gateway remove [resource-id]
    加以移除。
  20. 確認設定
    除了透過上述指令進行單一項目的顯示與確認,我們還可以透過指令
    pcs config
    顯示全部的設定,執行後應可以看到類似下列訊息
    Cluster Name: pacemaker1
    Corosync Nodes:
    
    Pacemaker Nodes:
     gateway01 gateway02
    
    Resources:
     Group: Gateway
      Resource: ClusterIP (class=ocf provider=heartbeat type=IPaddr2)
       Attributes: ip=192.168.0.254 cidr_netmask=24 nic=eth1
       Operations: monitor interval=3s (ClusterIP-monitor-interval-3s)
      Resource: ClusterPublicIP (class=ocf provider=heartbeat type=IPaddr2)
       Attributes: ip=168.95.10.10 cidr_netmask=28 nic=eth0
       Operations: monitor interval=3s (ClusterPublicIP-monitor-interval-3s)
      Resource: ExternalDefaultRoute (class=ocf provider=heartbeat type=Route)
       Attributes: destination=0.0.0.0/0 gateway=168.95.10.1
       Operations: monitor interval=60s (ExternalDefaultRoute-monitor-interval-60s)
      Resource: EmailNotification (class=ocf provider=heartbeat type=MailTo)
       Attributes: email=cyril.hcwang@gmail.com
       Operations: monitor interval=3s timeout=10 (EmailNotification-monitor-interval-3s)
    
    Stonith Devices:
    Fencing Levels:
    
    Location Constraints:
      Resource: Gateway
        Enabled on: gateway01 (score:10) (id:location-Gateway-gateway01-10)
        Enabled on: gateway02 (score:5) (id:location-Gateway-gateway02-5)
    Ordering Constraints:
      start ClusterIP then start ClusterPublicIP (Mandatory) (id:order-ClusterIP-ClusterPublicIP-mandatory)
      start ClusterPublicIP then start ExternalDefaultRoute (Mandatory) (id:order-ClusterPublicIP-ExternalDefaultRoute-mandatory)
      start ExternalDefaultRoute then start EmailNotification (Mandatory) (id:order-ExternalDefaultRoute-EmailNotification-mandatory)
    Colocation Constraints:
    
    Cluster Properties:
     cluster-infrastructure: cman
     dc-version: 1.1.10-14.el6_5.1-368c726
     no-quorum-policy: ignore
     stonith-enabled: false
  21. 確認 Cluster 執行狀態
    再次執行指令
    pcs status
    應可看到類似下列資訊
    Cluster name: pacemaker1
    Last updated: Tue Jan  7 17:52:42 2014
    Last change: Tue Jan  7 12:55:21 2014 via crm_attribute on gateway01
    Stack: cman
    Current DC: gateway01 - partition with quorum
    Version: 1.1.10-14.el6_5.1-368c726
    2 Nodes configured
    4 Resources configured
    
    
    Online: [ gateway01 gateway02 ]
    Full list of resources:
     Resource Group: Gateway
         ClusterIP  (ocf::heartbeat:IPaddr2):       Started gateway01
         ClusterPublicIP    (ocf::heartbeat:IPaddr2):       Started gateway01
         ExternalDefaultRoute       (ocf::heartbeat:Route): Started gateway01
         EmailNotification  (ocf::heartbeat:MailTo):        Started gateway01
  22. 測試資源的轉移 (Gateway01)
    因為目前資源配置於 Gateway01,因此測試時我們需要將資源轉移至 Gateway02。方法有二,一個是直接將 Gateway01 進行關機的動作,另外一個更為方便的方式則是將 Gateway01 設為備用,指令如下
    pcs cluster standby gateway01
    我們再次執行指令
    pcs status
    可以看到類似下列資訊
    Cluster name: pacemaker1
    Last updated: Tue Jan  7 18:10:31 2014
    Last change: Tue Jan  7 18:10:22 2014 via crm_attribute on gateway01
    Stack: cman
    Current DC: gateway01 - partition with quorum
    Version: 1.1.10-14.el6_5.1-368c726
    2 Nodes configured
    4 Resources configured
    
    Node gateway01: standby Online: [ gateway02 ] Full list of resources:  Resource Group: Gateway      ClusterIP  (ocf::heartbeat:IPaddr2):       Started gateway02      ClusterPublicIP    (ocf::heartbeat:IPaddr2):       Started gateway02      ExternalDefaultRoute       (ocf::heartbeat:Route): Started gateway02      EmailNotification  (ocf::heartbeat:MailTo):        Started gateway02
  23. 測試 Gateway01 重新上線 (Gateway01)
    透過指令
    pcs cluster unstandby gateway01
    可以重新讓 Gateway01 上線,因為我們已經設定 Gateway01 擁有較高的優先權,所以再次執行指令
    pcs status
    應可以看到類似步驟 21 的訊息,表示資源配置再次回到  Gateway01。
  24. 確認通知信
    因為我們剛剛做了兩次資源轉移的動作,所以你應該會收到相關的通知信。
透過 CMAN+Pacemaker,我們就可以輕鬆建立一個不中斷的網路連線服務。其實 CMAN+Pacemaker 所支援的服務不僅於此,有興趣的人可以透過指令
pcs resource list
列出所有支援的項目,進一步找出適合你的支援項目。

About