自己做 Wifi Porter – 碰一下就連 Wifi

幾個月前我們家 K 大去了一趟人家公司參觀,主要的目的是什麼我也忘了,但回來後他卻深深的被人家家裡那個碰一下就可以連 Wifi 的小玩意給吸引到了。

還記得他很興奮的貼了個那個小玩意的連結,還順便嘴了一下什麼:這麼簡單的東西也可以賣到上千台幣之類的,果然設計和創意無價云云,所以我們就從善如雲,一陣子之後就做了個這樣子的東西出來:

這個… 功能性方面是有了,但是用這個 QR code 嘛,感受上不是那麼高科技,單純貼一張紙在布告欄上面和人家 Wifi Porter 比較起來,就沒那麼優雅。K 大曾經說過一句名言:如果你勉強買了支勞力士,戴手上還要擔心刮壞、擔心掉了之類的,就乾脆別戴了,你看看人家戴著勞就是那麼雲淡風輕,理所當然的自在優雅,等你有這個水準再來。所以嘍,既然我們想東施效顰,就得裝的十足像,所以就來看看這個 Wifi NFC 該怎麼自己做。

首先當然是要先來買個 NFC 的「標籤」,其實這東西在網路上很多也很便宜,有做成標籤狀的,也有卡片外型的,或是像停車場用的那種硬幣類的,族繁不及備載,但是對我這個門外漢來說,到底哪一種是可以用的?有沒有相容性問題?這些東西雖然便宜但是也都是錢啊,想著想著,就想到大家身邊不都有這個東西:

實在是拜科技進步之賜,從 2016 年甚至更早之前,iThome 就開始用這類 RFID 的標籤來作人數統計用,而且我印象很深的是,會場的工作人員就是拿著手機在做感應的,以我們公司參加研討會的頻率和人次,這東西簡直可以說是取之不盡啊,不拿來廢物利用一下實在對不起自己。

接著隨便在 Google Play 上用 NFC Tool 這個關鍵字去搜尋了一下,發現可以用的 App 還挺多的,但看起來大家第一個步驟都是要先把卡片上的資料抹去,當然我是不求甚解,找了幾個 App 之後,發現大部分的 App 都能讀,但只有這個 NFC Tools 可以把卡片上的資料抹掉,又是個免費軟體,所以就拿來用了,按了 Erase tag 按鍵之後,再去碰一下標籤就清除了:

然後用這個說是 Android 7 之後就內建的功能,把你要寫入的 Wifi 基地台給寫進去,密碼就再手動打一次 Wifi 密碼來確認,就完成寫入動作了:

接著就拿手機來試驗了,看起來這個 NFC 標籤在有 NFC 感應功能的 Android 手機上可以正常運作無誤,但是在 Apple 手機上就不支援直接感應,貌似因為安全性的緣故,iPhone 需要先開啟一個能啟用 NFC 功能的 App 才能有碰一下 Wifi 的效果。

最後沒想到原先以為很難的技術問題(因為人家賣上千台幣),真正做起來卻是那麼簡單,完全不用去了解複雜的技術細節或規格,只要手機按一按然就可以生出來了。當然除了技術上的實現之外,怎麼把外觀做得美觀的問題還是讓人頭大,總不能在公司各處擺著 iThome 的名牌讓人刷也自稱優雅吧?所以只能轉交給我們部門的首席設計師 R 姐來研究一下了,看能不能搞出一個優雅又美觀的 Wifi 感應點出來,就像 Wifi Porter 一樣實用又好看。

Dell Latitude 7400 開箱

是的,今天要來開箱的是 Dell Latitude 系列中的最新款 – 7400 ,其實這台筆電的資訊早在年初的 CES 中就已經揭露,但是他就偏偏取了個 7400 這個名字,身為一直在用 Latitude 系列的使用者,應該早就習慣了將 7440 -> 7450 -> 7470 -> 7480 -> 7490… 這樣子的命名方式稱之為 7400 系列,表示這是 Latitude 的 14 吋 Ultrabook,所以當初一看到 CES 相關報導裡提到 7400 這個名詞時,心裡就自動覺得這就是這個系列的代稱,從來沒想到新的 7400 系列不是叫 8400,也不叫 74100,而是就直接命名為 7400。

整體包裝其實沒什麼變化,一貫的簡潔和… 單調。但是不知道為什麼,和小K同事自己買的 New XPS 13 類似的配置,配置的變壓器是上方的 65W 規格,而不是討喜的 XPS 小型化 45W 變壓器。

其實我不太清楚這次採購到的筆電 A 面是 Carbon 版本的,我記得以往需要 Carbon 的 A 面是需要客製的,但不管是怎麼來的,有這個 Carbon 感覺上也替全黑的 7400 帶來一些新鮮感,希望公司裡的使用者們嫌它醜的數目會因此少一點。

拍一下各個角度,這一代的 7400 已經把網路孔拿掉了,和對手的 T490s 算不約而同嗎?但是慶幸的是充電孔沒有任何改變,那表示我們家那些舊的充電器還能繼續派上用場。

值得注意的另一個改變是,這一代的上蓋掀起後可以稍微把筆電給頂起來一些些,相信這樣子的做法是為了散熱的緣故,有常在關心硬體動態的朋友一定有聽說 Intel CPU 的功耗牆限制,什麼輕薄本買 i7 和 i5 不會差多少,因為反正 i7 全速跑一下就會因過熱而降頻跑云云的言論,不過小魯自己不是專業的測試人員,也只是想開開箱而已,相關的測試還是等專業的報導來說明了。不過儘管是做成這種樣式的轉軸,這台機器還是可以 180 度打開,甚至於實際的開闔角度還比 180 度多一些些,但是已經不能像以往一樣「躺平」,由於這個機構的關係,打開之後是躺不平的。

從這一代 7400 開始,也引進了窄邊框,下圖中的 B 面有點拍壞了,但還是看得出來兩側的邊框變窄了許多。

值得讚揚的是,這一代的螢幕配上了實體的鏡頭開關,大家不用再去貼塊醜醜的貼紙來防鏡頭被駭了。

接著重點來了,我們拿了同事的上一代 7490 來比對一下,比較之下窄邊框還是挺有感的,而且可以明顯感覺到 7400 比 7490 小了那麼一點點。不過原本在 7490 上的「小藍點」和搭配的仿滑鼠左右中鍵就消失了,想要在 7400 上找到一點小黑手感的人可能要失望了。

稍微比較一下厚度,發現 7400 的上蓋厚了一些,但是整體厚度沒有太明顯的差異。。

把 7400 和 7490 疊起來看一下,這樣子比較起來真的是小蠻多的。

同事說新的 7400 散熱孔大了一些,所以來個翻面的比較,左邊是 7490,右邊是 7400,目測下的散熱孔的確是大了些。

我們都很好奇,7400 小了那麼多,該不會和 7390 差不多了? (7390 和 7290 尺寸一樣),所以再來一個 7390, 7400 及 7490 的疊疊樂,結果就如下圖了。

最後就量一下重量,1363.6g,和官方宣稱的 1.36kg 很吻合,拿起來也的確是有感變輕了(也許尺寸變小也有些感受上的幫助),看來雖然這些年 Intel 的 CPU 沒啥重大突破,但 Dell 還是有在想辦法擠出一些改變,今年的 7400 算是件有誠意的作品了。

自己換 Dell Latitude E7280 的電池

手上這台 Dell Latitude E7280 用到現在也兩年出頭了,差不多是今年初開始,這台機器就常常從電量 90% 瞬間掉到 5%,然後正在開會的我就得要手忙腳亂的把充電器找出來,聽我們 MIS 說,現在的 Dell 電池已經不像以前那麼耐用了,還記得我上一台 7240 的電池是用到滿三年還是頭好壯壯的還給公司,沒想到這一台機器類似的用法下,電池卻只撐了兩年左右的時間。

雖然當初也是買了完美保固,但仔細一查,才發現完美保固不包含電池的部分,Dell 這系列的電池預設是保固一年,若要延長電池的保固則是要加錢購買…

由於我們公司比較多人用的是 7480 系列,據 MIS 說, 7480 電池去光華商場買一顆約 1800 左右,我上了蝦皮和露天查了一下,最低有看到 1500 新台幣的,但一眼喵過去看到「出貨時間較長」的字眼,讓我又聯想到這可能又是代買淘寶貨的賣家而已,想想還是乾脆自己來淘好了。

上淘寶查了一下,對照自己之前的開箱文,發現原來 7480 的電池 (4 cell) 一樣可以用在我的 7280 上,7280 內部的空間本來就預留可以裝上 3 cell 或 4 cell 的空間,只是我原本是 3 cell 的電池,換上這顆 4 cell 的電池之後可能會重一點,想想重量可能不會差太多,不妨就淘個 4 cell 的來裝裝看。


原本的 3 cell 的零件號碼叫 DJ1J0 ,4 cell 電池的號碼則是 F3YGT,我找的這間賣家賣 RMB 188,淘寶上試算出來是新台幣 871.04,當然還得加上支付寶信用卡手續費、海外刷卡費以及運費,但我是趁 28 號淘寶會員日刷的玉山 Pi 卡,當天免信用卡手續費,Pi 卡回饋 2.5% Pi 幣,加上讓一路發集運特貨送回的運費 (含包裝 0.4kg),大概這顆電池花了 930 左右吧,有不定期去淘寶淘東西的話這樣子算是省了一個禮拜的午餐錢了。

其實東西寄來時我有點吃驚,因為算包的很完整的,紙箱內先有海綿上下包覆,再來還有氣泡帶捲了好幾層,最後才是防靜電袋。從電池上的標示可以看得出來這是 60Wh 的電池,我原本的電池則是 42Wh。可惜的是電池本身的賣相不是很好,不知道是不是因為電池並非賣給一般人的關係,我這顆電池上有個地方出現一點殘膠,上方的黑色護膜也有點像是沒鋪平整的床單。

接著就是拆機換電池了,其實我買電池之前並沒有先拆開來看,所以正在拆的時候我還一度想說會不會電池根本就沒壞,但是蓋子一打開就真相大白了。

右上圖下方的那個電池就是原本的 3 cell,對比上方的新 4 cell 就可以看出膨脹了一些,也難怪會突然掉電了。

由於新的電池並不提供連接用的排線,所以要把原本連接在 3 cell 電池上的排線拆下來使用
4 cell 的新電池裝下後就會佔滿殼內的電池室,這電池需要鎖三顆螺絲,左邊的沒問題,中間的螺絲是由蓋子上鎖下來的,但是右邊的螺絲並沒有附上,我自己是就索性不鎖了,安裝時這個電池下方其實有個小角度要卡入機殼的某個點上,沒卡進去的話外殼會蓋不起來,如果你也遇到類似狀況時千萬別硬是把 D 蓋給鎖上去

裝好電池鎖上 D 蓋之後,接上我的 Type C Dock – WD15,卻發現無法開機,後來就拿了原廠 65W 變壓器出來就好了,不過我當時並沒有繼續去測試看看 WD15 為啥開不起來,也許只是我的誤會而已,因為後來開機後顯示的容量還有 44%,並不是完全沒電的狀況。

倒是這個 44% 開始用 65W 充電器充了好久才跳到 45%,原因不明,打完收工回家後我關機讓它繼續充,目前看起來是充滿 100% 的電了,看起來一切順利,也省了五天的中餐下來。

換上 4 cell 的 7280 到底有多重呢? 1240g,比原本 3 cell 時的 1165g 多了 75g,比當時對比的 New XPS 13 (9350) 的 1227g 多了 13g,查了一下 XPS 13 (9350) 的電池容量應該是 56Wh,這麼看起來 XPS 13 倒是比 3 cell 電池的 7280 重的有道理,也許下次汰換筆電時就可以來考慮視訊鏡頭往上移的 XPS 13 了。

「開箱」訊飛翻譯機

最近公司買了一個新玩具,就是訊飛翻譯機

89f050a5-d2dc-42bf-86fd-96cf4022efdc

主要使用紙盒包裝
外盒算是有點質感的07712bd4-bf0a-48ae-90cd-3beaec968bb3打開外盒裡面也是使用紙盒作保護,算是相當的環保
而且為了避免機器刮傷
還有在與翻譯機接觸的邊緣及底部貼上絨布保護5bffde2b-0af6-463b-844f-e347eee125e4

配件我們可以看到有sim卡退卡針和mirco USB充電線
但缺點就是沒有充電頭6d94d5ff-88bf-435e-b0b3-35b44cba4a7f

這是他的開機畫面4f4914e8-2354-4edd-b3ba-841e7ea97068

很可惜的只有兩種語言介面可以選擇
1.簡體中文
2.英文
5779d0b5-e23a-4571-937f-dba7a85c6107

一開機就有更新要安裝
就讓他更新完再來測試吧6f94005c-16c0-421d-ae96-7888c32af674530e317f-1a7f-46b3-af6f-afef4b7719a1這更新一等就是半個小時
他是有雙向翻譯功能的
當你按著“中文”時,就可以說中文翻譯成他國語言
當你按著“ABC”時說將外國語言翻譯成中文
操作方式是按住按鍵說完話在放開
他就會做翻譯了7edb0f51-7095-4870-8a4f-d74c3b47bcf1

他是個觸碰螢幕
你可以在中文<=>英語的地方點選你要翻譯的語言95d0fc3d-92e0-46f1-89ed-5497ddc9a512

雖然支援的離線翻譯不多
但是大多語言只要你有網路都是可以翻譯的9738ff83-7a26-44c7-8f68-784eebd69edf

最神奇的是他還有人工翻譯的功能
但要註冊會員
它的介面感覺就是android系統
還可以開網頁上網
79f37713-ddae-4742-9a00-85588d3cb745

SOS怕他會真的打出去就沒特別試用了531cbdf3-dc4c-4f70-8054-6865ac26d5b1

也支援飛航模式帶上飛機也沒問題af6516b7-12e6-4c13-863c-bbdcb4676679

終點是他還可以當wifi分享機
出國可以把國外sim卡插在翻譯機做分享了
c509d3b6-2f2a-4b8c-9ea1-9acbdde2f724

重點他居然知道皮卡丘
還頗厲害的啊d8c553ea-2ea6-4f13-add3-7001186698c5

不知道之後跟新會不會有更多的離線語言翻譯a01d8e71-0c15-4946-a745-687a164c78ea

 

優點
1. 支援雙向翻譯
2. 有離線翻譯的功能
3. 可以使用sim卡網路
4. 可當熱點分享
5. 語言種類眾多(幾乎所有語言都有了)
缺點
1. 用語是大陸用語
2. 介面沒有繁體中文
3. 離線語言只有4種

工欲善其事,必先利其器

昨天剛好有機會跑去廠商的機房那邊做一個 POC (Prove Of Concept),雖然也是如莫非定律般的從下午搞到晚上快 11 點才出得來,而且還是個失敗的 POC。但正所謂三人行必有我師,今天還是留下個小驚喜。

驚喜就是,登登登… 這個吸在機櫃上的 LED燈

由於 POC 進行的不是很順利,有些空檔時間我就抓著對方問這個幹什麼的?吸在上面好像很酷,但實際上有什麼用途呢?

這廠商其實也挺妙,看起來他也挺自豪能想到這一招,馬上就 demo 給我看,第一,機櫃不是都有一些縱深嗎?儘管機房有公共照明,但機櫃基本上只有前後開孔,一般的公共照明是不足以照到機櫃裡面的,所以萬一有東西放比較深,或整線時剛好線藏在比較裡頭時,就可以拿來照:

這樣子是不是比較輕鬆也清楚多了?據這位老兄所述,以前他在照這類東西時,常會伸頭進去機櫃內看,那不但不符合人體工學,也容易有碰到線路的風險。當然這張圖我原本是想要照對方實際的整線狀況,但考慮到自己手殘會不小心動到線路的風險,還是用這個示意圖就好。

另外就是要看乖乖的保存期限也是很方便喔。隨著年紀越來越長,彎個腰都可能卡到的情況也都可能發生在自己身上了,LED磁吸燈這種隨處可見的東西並不怎麼高科技,但這位老兄會觀照自己的日常動作進而利用身邊的小東西來改善,的確是小弟值得學習的一點。

How to join windows node in K8S on GCP

最近在嘗試建立windows的node in K8S

以下是我的筆記,有興趣的同學可以參考一下

大部分步驟都跟微軟的文件差不多
Kubernetes on Windows

只有一小部分有些差異,主要是因為我的測試環境是在GCP上,所以在GCP firewall的設定上記得要allow pods跟service的網段,還有在建instance時在網路部分要將IP forwarding的功能開起來,以及routing要加,這樣不同node之間的pod才有辦法正常溝通

firewall allow for K8S pods and service
enable IP forwarding when create instance
routing for K8S pods
  1. build up a master node (Linux)
    由於目前windows server只能作為K8S的work node,所以我們還是需要建立一台Linux的server作為master node,在GCP我是使用CentOS 7的 image來作為master node,至於要怎麼建立master node我相信在網路上都有很多文件,以下是我的作法
    1. update system and install docker
      yum update -y
      
      yum install docker -y
      
      service docker start
      
      chkconfig docker on
    2. 由於只是測試環境,為了方便我會關閉firewall跟SELINUX
      service firewalld stop
      
      chkconfig firewalld off
      
      setenforce 0
      
      sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    3. create repo for K8S
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      
      [kubernetes]
      
      name=Kubernetes
      
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      
      enabled=1
      
      gpgcheck=1
      
      repo_gpgcheck=1
      
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      
      exclude=kube*
      
      EOF
    4. install kubeadm
      yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
      
      systemctl enable kubelet && systemctl start kubelet
      
      cat <<EOF > /etc/sysctl.d/k8s.conf
      
      net.bridge.bridge-nf-call-ip6tables = 1
      
      net.bridge.bridge-nf-call-iptables = 1
      
      EOF
      
      sysctl --system
      
      sysctl -w net.ipv4.ip_forward=1
    5. initial master node
      kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
      
      mkdir -p $HOME/.kube
      
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
      sudo sysctl net.bridge.bridge-nf-call-iptables=1
    6. 安裝網路模組for K8S
      根據微軟的文件如果要可以跟windows server相容建議是安裝flannel並使用host-gw模式
      1. 下載flannel yml檔
        yum install wget -y
        
        wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      2. 將yml中的vxlan改成host-gw
      3. apply flannel
        kubectl apply -f kube-flannel.yml
    7. 將特定DS(daemonset)設定成只能跑在Linux node
      因為目前這些DS只能跑在Linux的container上,所以會把他們設成只跑在Linux server上
      kubectl patch ds/kube-proxy --patch "$(cat node-selector-patch.yml)" -n=kube-system
      
      kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system

      patch的yml檔可以從這下載node-selector-patch.yml

    8. 到這windows node的K8S master node就完成了,接下來就是確認kube-system pods是否都有正常運作,還有DS的設定有沒有生效跟DS是否設成rolling update
      確認pods是否running
      確認DS的是否有限制只跑在linux node
      確認DS是否設成RollingUpdate
  2. join a windows work node
    1. 這邊我是使用GCP的Windows Server version 1803 Datacenter Core image作為work node,K8S的文件上是說windows 1709以上的版本都有支援,但要注意container的image只能使用跟OS同版本號的,不然會跑不起來,以下command都是使用Powerhsell操作

    2. install docker(這邊會需要重開機)
      Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
      
      Install-Package -Name Docker -ProviderName DockerMsftProvider
      
      Restart-Computer -Force
    3. pull docker image
      請下載與你OS相同的版本,這邊根據微軟的文件是要下載microsoft/nanoserver,但我後來發現k8s的docker file image不是用microsoft/nanoserver而是用mcr.microsoft.com/windows/nanoserver,所以我這邊就直接下載mcr.microsoft.com/windows/nanoserver
      docker pull mcr.microsoft.com/windows/nanoserver:1803
    4. tag docker image
      docker tag mcr.microsoft.com/windows/nanoserver:1803 mcr.microsoft.com/windows/nanoserver:latest
    5. 準備工作目錄for K8S
      mkdir c:\k
    6. copy master node的驗證檔($HOME/.kube/config)到c:\k目錄,有了這個才可以連到master node(可以用SCP copy,現在powershell也有SCP可以用喔)
    7. 下載安裝7-zip
    8. 下載Kubernetes binaries for windwos,並用7-zip將它解壓縮到c:\k目錄,其中會包含kubectl, kubelet, and kube-proxy這些binaries,我是下載1.13.1版,可以從這下載kubernetes
    9. 設定環境變數for K8S
      $env:Path += ";C:\k"
      
      [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)
      
      $env:KUBECONFIG="C:\k\config"
      
      [Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)

      以上都設定好就可以使用kubectl連到master node

    10. 下載Flannel for window

      [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
      
      wget https://github.com/Microsoft/SDN/archive/master.zip -o master.zip
      
      Expand-Archive master.zip -DestinationPath master
      
      mv master/SDN-master/Kubernetes/flannel/l2bridge/* C:/k/
      
      rm -recurse -force master,master.zip
    11. join node
      cd c:\k
      .\start.ps1 -ManagementIP <Windows Node IP> -ClusterCIDR <pod-network-cidr> -ServiceCIDR <service-cidr> -KubeDnsServiceIP <Kube-dns Service IP>

      到這就成功join windows node到K8S了,請確定3支Powershell(kubelet, flanneld, kube-proxy)都有順利跑起來,有時Flannel 會跑不起來,需要手動再跑一次

      [Environment]::SetEnvironmentVariable("NODE_NAME", "<Windows_Worker_Hostname>")
      .\flanneld.exe --kubeconfig-file=c:\k\config --iface=<Windows_Worker_Node_IP> --ip-masq=1 --kube-subnet-mgr=1

  3. deploy a win-webserver on windows node
    wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridge/manifests/simpleweb.yml -O win-webserver.yaml
    
    kubectl apply -f win-webserver.yaml
    記得要把yml檔裡container的版本改成與你的windows node OS相同
    確認pods是否running
    確認service port
    access from internet

DevOps in Action, DevOps 日常/OpsDev 日常 – F5 DataSafe

起因來自於最近我常掛在嘴邊的一句話:誰上了雲端之後還用 F5 Load balancer 啊?上 Google Cloud 用的當然是 Google Cloud Load Balancing,上了 AWS 之後用的就當然是 Elastic Load Balancing,沒想到一句我看是理所當然的事情,同事間因為不同的角度,不同的專業背景,而有了不同的看法,也難怪有人說 DevOps 是一種文化轉變、是一種變革。由於我們公司的歷史說長不長,說短也有個十來年了,當初一開始經營時並沒有遇到雲崛起(AWS 崛起)的年代,所以僥倖的至今還幫客戶維運了不算小的自有機房,所以我們公司和一般使用純公有雲的公司不太一樣,我們有網路工程師、系統工程師甚至於值班工程師的配置。

這個故事開始於一位資深的網路工程師,何謂網路工程師?簡單的說就是那種有 CCNA, CCNP 甚至於有 CCIE 認證的專業人士,他們的日常工作項目就是在管各種硬體式的 Network Switch, Router, Firewall, ISP 線路, 流量一般來說,Load Balancer 由於功能或操作上也比較偏向於網路設備,所以在我碰到的公司裡,這設備一般也是歸網路工程師來管。

最近有天就產生了下面這個對話:我覺得 Clouding 上的 Load Balancer (Google or AWS) 固然便宜又方便,但是我不覺得 F5 比較差,而且看起來 AWS 就有提供 F5 的雲機器,也許我們可以考慮採用 AWS 上的 F5 雲機器服務,上次我去聽了 F5 的研討會,他們有個功能超神的,啟用之後就可以防 bot (機器人, 大概專指惡意的 bot, 例如來猜帳密的那種),還可以防中間人攻擊讓使用者帳密外洩之類的,最重要的是應用程式都不用改,F5 會自動地把 Javascript 插入在你的應用程式裡就可以作用了。

這位網工的伙伴講的很興奮,我聽了卻滿腦子黑人問號。我個人常習慣會把 IT 類的工作畫一條光譜線,一端是純開發端,也就是寫程式的啦,另一端就是純業務端,簡單來說就是不寫程式但懂客戶需求的,IT 相關的工程師,不管是管系統或管網路的,大抵來說可以算是在中間,意思就是網路工程師對於程式方面算是一知半解,知其然但不知其所以然,對於需求方面所知也是半桶水,當然這麼說是有點難聽了,事情總是可以從各種面像來看的,正面來說網路工程師是兼具兩者所長,所以可以遊走於自行開發和廠商解決方案之間,糅和出一個比較好的解決方案出來。

1

但是以這個例子而言,我們對於 F5 的這個 Advanced WAF 產品該如何取捨?我相信在傳統的分工情境下,大概不外乎就是網路工程師找廠商來 POC (Prove of Concept,概念驗證),以這個例子來說,我猜驗證的方式可能就是廠商去準備個攻擊的方法(當然這方法不會是廠商自己發明的,也許是來自於知名白帽駭客,也許是來自於某著名安全機構的概念性攻擊方法),然後測試看看裝載 Advanced WAF 前、後的差別,稍微大一點的組織,這件事情大概就很難邀請開發單位一起加入驗證了,一來也許是開發單位的人、產品或部門很多,不太可能都抓來一起驗證,一來可能是這公司的系統這邊也外包、那邊也外包,一般的公司就會認為這是網管自己的工作,不太可能邀請太多的關係者進來。

但是今天我們要打破這種傳統,單純從技術性的角度來分析這個產品,當然之所以能做到這件事,也是和我一向非常喜歡的 F5 的開放性有關,F5 大概是我看過文件和技術最開放的網路產品吧?文件整個豐富到不行,最重要的是這一大堆文件都還有人在維護的,有新版本時每個文件都會被重新檢視它的適用性,所以以下就開始我的技術分析。

DataSafe 算是 F5 Advanced WAF 裡的一個功能,Advanced WAF BIG-IP 13.1.0.2 開始提供,DataSafe 這功能就一併上市了。在以往的 Web Application 裡,瀏覽器端(或稱為 Client ) 其實是沒有任何保護的,既使是用了 SSL ,一旦使用者終端(PC, NB, 手機, 平版…) 被駭客入侵了,駭客就可以從瀏覽器端、從 OS 上側錄鍵盤或畫面等方式來劫持使用者的敏感資訊,以下是 F5 官方介紹關於 DataSafe 的影片及資料:

F5 DataSafe 介紹影片

F5 DataSafe 介紹文件

DataSafe 這個功能看起來是個執行在瀏覽器端的程式 (Javascript ?) ,藉由主動的置入 F5 所謂的 DataSafe Javascript 程式碼,幫你把敏感欄位在瀏覽器端就加密的方式,可以避免當前常見的 1)瀏覽器 plugin 問題 2) 中間人功能(有一些藏在本機把你信賴憑證偷換掉來偷聽的),然後在 F5 上就解密掉,所以讓你的 Web Application 不用修改就可以加上這個功能。

但是老實說,不管從文件上或 Youtube 影片上看來,這個機制不外乎是 1) 把程式上的 input box ID 給換給怪名字(F5說這個叫 Obfuscation) 2) 把敏感欄位資料 scramble 一下,我們可以想像的是,既使是入侵者,大概也不想要每天叮著你的網路流量去抽絲剝繭的找出敏感訊息,更何況是那種大量入侵一堆電腦的駭客,他們更不可能去分析那麼大的流量,所以可以做的就是去篩選出一些關鍵欄位或頁面來「偷聽」,這時候把欄位名稱亂取名或資料加密後,對於這類非針對性的駭客而言,應該會有一定的效果,這個道理就像是以前大家都會為自己的愛車加個方向盤鎖,偷車賊看到一排車子,為了怕麻煩就會懶得對有方向盤鎖的車子動手。

聽不懂嗎?這份 F5 文件對於 HTML Field Obfuscation 講得更仔細了,文中的兩張圖更是 清晰:

2.jpg
3.jpg

F5 這個機制做的好的地方是,他不用你自己動手去改程式,從影片看起來,你只要在他的管理介面上操作一下,這個機制的程式碼就會自動的插入在你的網站中,我想這對於許多的網管人員來說真是一大利器,因為我相信絕大多數的網管人員如果不是不會寫程式,就是程式和他不熟,至少那種有能力去寫出一個稍具規模網站的網管人員我是沒見過,能靠著 F5 這個產品就把網站漏洞給 patch 掉的這種外掛,相信在許多網管人員眼中都是神器了。

4.png

但實際上這件事有這麼難嗎?這不就也是支程式?人家文件裡也表明了這就是個把 Client 端欄位名稱加密然後配合 F5 server 上的解密行為,在這裡先讓我們看看 F5 自己的網站:

5.png

F5 似乎很顯然的沒有在他這個網站放入 DataSafe 的技術,因為我這個「中間人」利用 Developer tool 來觀察時可以很輕易的看到我自己的帳號和密碼,連帶的帳密的欄位名稱也很明顯,不符合 F5 文件裡的敘述

6.png

F5 網站自己沒有使用的原因我們難以得知,但從開發者的角度來看,既然知道了這種機制,那自己來實做會是困難的嗎?

讓我用 HTML Obfuscate 這個關鍵字來 google ,其實可以發現有很多網站在「教」大家怎麼做,例如這個,你可以把想要「Obfuscate 」的 HTML 語法貼上去,這網站就會幫你產生出攪亂後的語法:

7

當然如果你稍微比對一下 F5 的文件之後,會發現此 Obfuscate 並非彼 Obfuscate F5 的機制可不是這種單純把 HTML 語法攪亂丟到 client 端這麼簡單的,F5 提供的 Obfuscate 機制基本上應該是種非對稱式加密機制的「攪亂」,也就是被 F5 「攪亂」的 HTML 語法經由下一次 HTTP Post ( HTTP Get) F5 時,F5 會自己反解密回來,而且每一次「攪亂」出來的值都不會一樣(請參考這篇文章,這文章還提到可以抵禦的實際場景IP慢速攻擊猜帳碼)

所以說相較於一般網路上可以查到的 Obfuscate 方法,F5  DataSafe 的作法還是挺先進的。我們在網路上看到的都是屬於入門級的,這種入門級僅利用 client javascript HTML 語法攪亂的方法,對於 Client OS 的入侵可能有點混淆效果,但是對於 Man-in-the-browser 的攻擊效果就有限了,由於這類入門級的 Obfuscate 方法只對 Client 端攪亂,實際上要往 Server 上送 HTTP Post HTTP Get 時,還是得恢復原有的內容,這對於 Man-in-the-browser 的的攻擊就完全無效了。

所以我的結論是要說 F5 DataSafe 真的很神嗎?說難不難,說簡單嘛… 就我初步的 google 結果,網路上要找到現成類似 F5 做法的範例的確不太容易,但這並不是沒辦法自己撰寫的,只要開發人員願意,把幾個欄位名稱做個加解密機制基本上是一片小蛋糕來著,只是看你願不願意做這件事而已。

為什麼我特別要提到「願不願意」做這件事?這就得回到這種抵禦攻擊的方法是否有效了,假設一般稍有腦袋的猜帳密攻擊會用一堆IP來進行下面這類慢速動作:

8

當我們用了 F5 DataSafe 類的欄位加密機制後,攻擊者就無法很簡單的利用 ‘User’ ‘Pass’ 兩個欄位名稱來進行程式化的攻擊,因為每一次 F5 跑出來的 ‘User’ ‘Pass’ 欄位名稱都會被改變

例如由這個:

9.png

被攪亂變成這個:

10

那,把我的攻擊程式改複雜一點呢?稍微用人眼看一下這個例子,發現 username 欄位名稱都是以 <input type="username" name=" 這個 pattern 開頭,結尾於一個單引號,另一個 password 欄位以此類推,這不就也很快的破解了?

所以說到底,正所謂道高一尺,魔高一丈,這和偷車賊怕麻煩不偷有方向盤鎖的車子意思一樣,有做的可以對一般通殺型的駭客起一些阻嚇作用,但是對於那些專門特定來找你的惡意駭客,也就是所謂的針對式攻擊,不管是買 F5 來檔或是自己寫程式來檔,都很難依靠單一機制來防止入侵,那要做多少呢?我想還是回到風險/成本原則,也就是根據你所有的成本或資源,優先處理高風險的問題,我很少有看過有公司什麼資安都做到完的,就像我們不會在自己家裡弄個 108 道鎖來防小偷的意思一樣,當然這個決策只能由當事人自己做判斷,想聽 Sales 或外部顧問的意見? 你怎麼知道他們是在乎你的需求多一些還是在乎他的業績多一些?  你有看過 Sales 或顧問跑到你家好好研究你真正的需求在哪裡的經驗嗎? 就算對方肯,你敢讓他們來看嗎?!

F5 DataSafe 功能呢? 我個人認為這東西蠻適合哪種系統不是自己開發出來的公司,尤其是當你的公司有越多外包的網站越是這個樣子,由於有一些外包廠商可能根本也就沒維護合約了,或是要添加這個新的機制搞不好還比去買 F5 Advanced WAF 還更貴些,這時候就蠻適合來用 WAF 這東西,當然看是要買 F5 或其他廠牌的 WAF ,那又是另一個層次的決策了。

  • 對了 F5 Advanced WAF 還有另一個 Anti-Bot 功能似乎也常被來拿宣傳,只是目前沒時間研究,有接會再來研究下了