WordPress with AWS Cloudfront & WAF

WordPress with AWS Cloudfront & WAF

在這一兩年建站初期,這個站就很單純的放在AWS東京Region,一來台灣AWS沒有提供EC2的服務,二來其實速度也不慢。我比較過東京和新加坡速度,現在跨國頻寬算是順暢的,島內島外對我來說沒什麼感覺,而我又比較偏愛日本一點我就決定放在東京。

這幾天再研究Google Sheet網頁爬蟲的時候,發現本來能夠爬蟲的網站因為躲到Cloudflare後面,我就再也爬不到了。我稍微研究了一下Cloudflare,也就是CDN(Content Delivery Network)和WAF(Web Application Firewall)的服務。突然發現我應該能夠用在我的Blog,針對靜態內容做本地快取,會讓瀏覽的感受更好,WAF也可以增加一些安全性,畢竟其實我跟Linux並不是這麼的孰悉。

我開始註冊Cloudflare,一路設定到最後才發現必須要把Name Server整個指過去!如此會把我的整個架構打亂,因為除了Mail代管我放在Google之外,我幾乎整套都放在AWS上。Route53 / S3 / Lightsail / EC2 …如果把DNS移到CloudFlare,整合度感覺就變得很差。

所以,我想想AWS應該也是有類似的服務,所以就找到了下面三項:

AWS Cloudfront(CDN)

官網連結(新分頁)

AWS WAF

官網連結(新分頁)

AWS Shield

官網連結(新分頁)

後來去要去設定Route53,發現其實他有說明,當你開始使用Route53的時候,也就同時啟用了AWS Shield Standard了。

AWS Shield 提供兩種版本的服務:詳細請參見這裡我就不另外敖述了(新分頁)

AWS Shield Standard AWS Shield Advanced
快速偵測 增強型偵測
內嵌的攻擊降低功能 進階攻擊風險降低
  可見性與攻擊通知
  DDoS 費用保護
  專業支援
  全球可用性

標準型不另外收費,進階型的費用很嚇人,應該是商業等級的,我想我這種Blog不會需要的,所以就不繼續介紹了。

接著來說Cloudfront。WordPress 有Plug-in 跟可以直接設定Cloudfront,實在是好方便阿

安裝好之後你先按照這篇文章(新分頁)設定好AWS帳號和權限。裡面大致上的意思就是,建立一個能只能存取Cloudfront Full Access的User。在AWS的世界,所有的應用程式帳號都應該是獨立帳號而且要限縮到最小的權限這樣才能避免在網路世界中諸多的資安事件。雖然是英文,但是應該不需要我另外在寫一篇吧?看圖照做很容易。

我本來設定好帳號,然後進入Cloudfront頁面,自己手動新增,後來才發現,原來WordPress的這個Amazon AWS CDN Plug-in,非常貼心,你只要把剛剛申請的帳號的新增Access Key/Secure Key 填上去,選一下Price Class(美國/加拿大/歐洲、美國/加拿大/歐洲/中東/非洲、全部節點三種價格些許不同,可以自己去查一下),然後啟動/啟用他,如果你的帳號設置沒有問題,你的Cloudfront Console就會出現這個Plug-in幫你產生的設定而且即刻開始同步。

點開可以看一下

他預設會使用Cloudfront的SSL憑證,我個人就是喜歡用自己Domain Name的憑證,所以就在AWS的Certificate Manager申請一個自己的Domain 憑證然後掛上去。

如果你的網站有https必須要關注下面的設定(迷之音:現在還不把網站掛上SSL憑證,很快主流的瀏覽器都會擋掉了。)

他一開始狀態會是In Progress/處理中之類的,一段時間之後(端看你網站大小),他就會變成已部署。

這時候你可以用瀏覽器的私密模式去看看。網站跑完Chrome按一下F12

你就會看到很多東西是從Cloudfront傳送過來的而不是從你的網站Out put出來。

Cloudfront是用流量計費,LightSail流出也有計費。但是好加在如果從Lightsail/S3等等流出去到Cloudfront是不會計費的。所以應該不會有重複收費的問題。

如果你的網站掛上Cloudfront有些動態功能有點怪怪的

建議你可以把這兩個選擇性的勾起試試看看,我的下拉選單圖示沒勾的時候,變成方格,勾了以後才正常。

再來講AWS WAF。

AWS WAF和Shield是做在同一個Console,WAF可以選Region,如果想連結Cloudfront,請選擇,Global(Front)設定前請先先好Region不然設定錯又要重來了。

Region選定之後,按Create,名稱描述請隨意,下面選Cloudfront 

然後按下面的Add AWS resources

他會列出你所有的Cloudfront資源,選定你要的然後Add然後Next

接著新增Rule,這裡要說明一下Managed rule group,是指AWS或第三方廠商維護的Role,Managed rule一條一個月一塊美金,如果是AWS自己維護的Rule不在另計時數費用,如果是第三方廠商維護的Rule端看他的時數費用怎麼計算。

因為我只是小小的Blog,所以我就選用AWS管理的Role

然後下面的Default action通常是Allow,如果你選到Block意思是預設阻絕..沒人能連你的網站。

如果你有多條Rule,可以調整判斷順序

這裡我有加入CloudWatch,看你需不需要

最後Review完你就可以Create web ACL

回到Web ACL,可以看一些統計資料

以上打完收工。

要注意雲端很多服務都是計費的,有計流量、計時間的、計數量的,使用之前請詳閱價格說明書,以免收到帳單的時候傻掉。

用Powershell取代Diskpart

用Powershell取代Diskpart

一直以來都很習慣使用Diskpart來執行磁碟機操作,利用呼叫Diskpart搭配參數給他txt檔,很放便可以做成批次執行。當然用Powershell也能這樣呼叫Diskpart帶參數也可以。不過如果能用Powershell直接對磁碟進行操作當然是更好的。

列出所有磁碟


1
Get-Disk

列出所有分割區


1
Get-Partition

列出磁碟 0 的分割區


1
Get-Partition -DiskNumber 0

清除磁碟【警告:清除之前請確認磁碟號碼


1
Get-disk 4 | Clear-Disk -RemoveData

建立分割區,使用全部空間


1
New-Partition -DiskNumber 4 -UseMaximumSize

建立分割區,先使用部分空間32GB,然後再使用剩下空間
(分割為兩個磁碟區)


1
New-Partition -DiskNumber 4 -Size 32GB

1
New-Partition -DiskNumber 4 -UseMaximumSize

格式化磁碟4分割區1為NTFS


1
Get-Partition -DiskNumber 4 -PartitionNumber 1 | Format-Volume -FileSystem NTFS

格式化磁碟4分割區2為FAT32


1
Get-Partition -DiskNumber 4 -PartitionNumber 2 | Format-Volume -FileSystem FAT32

指定磁碟4分割區1磁碟機代號為L
指定磁碟4分割區2磁碟機代號為M


1
2
Set-Partition -DiskNumber 4 -PartitionNumber 1 -NewDriveLetter L
Set-Partition -DiskNumber 4 -PartitionNumber 2 -NewDriveLetter M

更換磁碟機代號L為Q


1
Set-Partition -DriveLetter L -NewDriveLetter Q

下面是一段我寫在批次檔裡面使用Diskpart 叫用文字檔當參數的內容
環境大概是主機裡有一顆500G硬碟,已經切了200G做C,剩下的尚未指定。
當下的隨身碟是D,因此我必須先將隨身碟變更磁碟機代號為E,然後將本機硬碟剩下的空間分割為D並快速格式化NTFS,本機硬碟磁區0/1為EFI/還原用保護磁區,磁區3為C,所以選擇磁碟4來分割操作。


1
2
3
4
5
6
7
8
9
select disk 1
select partition 1
assign letter=e
select disk 0
create partition primary
select partition 4
FORMAT FS=NTFS LABEL="DATA" quick
assign letter=d
exit

換成Powershell,兩行搞定


1
2
Set-Partition -DriveLetter D -NewDriveLetter E
New-Partition -DiskNumber 0 -UseMaximumSize -IsActive -DriveLetter D  | Format-Volume -FileSystem NTFS -NewFileSystemLabel Data

關於MBR / GPT轉換,Powershell預設操作Clear-Disk完就是GPT,要轉回MBR目前看來只能找Diskpart


1
2
Select disk 4
convert mbr
Cisco AnyConnect Failed to load preferences

Cisco AnyConnect Failed to load preferences

當使用Cisco AnyConnect Secure Mobility撥接VPN時,一直出現Failed to load Preferences。請確認下面所列的資料夾也沒有多餘的檔案或目錄
1. C:\Programdata\Cisco\ 只能包含下面兩個資料夾:
— Cisco AnyConnect Secure Mobility Client
— Cisco AnyConnect VPN Client
– 如果有其他的,請刪除

2. C:\Programdata\Cisco\Cisco AnyConnect Secure Mobility Client\Profile\ 只能包含下面兩個檔案:
— AnyConnectProfile.xsd
— global-machine-ca-profile.xml
– 如果有其他的,請刪除 (例如:userConfiguration.xml)

3. 接著請重通知區域找到Cisco AnyConnect圖示右鍵>修復網路。


Citrix按鈕選單位移/一半黑畫面

Citrix按鈕選單位移/一半黑畫面

這是我們公司在使用Citirx跑應用程式的時候發現的問題。
通常症狀會是,想點選的按鈕點不到,往旁邊一點卻又點得出來。
或著是,雙螢幕的時候,拖到另外一個螢幕變成有一半畫面是黑的。
通常這種原因大部分都是雙螢幕或是有調整過螢幕縮放(DPI)

碰到這種狀況,只能讓CW1強制調回原生解析度和原生的DPI,但又不需動到系統本身的DPI。
到通知列找Citrix Receiver 右鍵 Advanced Preferences > High DPI(高DPI)
選擇第二項:No,use the native resolution(使用原生解析度)

如此一來,執行Citrix的程式時,就會用原生的100%的畫面來執行。

Powershell : 印表機服務重啟

Powershell : 印表機服務重啟

有些時候,要排除印表機的問題,例如:無法列印、列印工作卡住。
下面的Script需要有管理員權限,他會停止列印服務,清除列印中的工作,然後啟用列印服務。


1
2
3
Stop-Service -Name Spooler -Force
Remove-Item -Path "$env:SystemRoot\System32\spool\PRINTERS\*.*"
Start-Service -Name Spooler
讀取資料夾權限並列表為CSV

讀取資料夾權限並列表為CSV

經歷過很多年代的檔案伺服器是最不容易管理的。
尤其裡面很多資料夾有的有繼承權限有的沒有,一個一個進去點開來看十分痛苦也浪費時間。所幸透過Powershell可以一次把Folder下面所有的資料夾全權一次蒐集出來匯出的CSV,這樣就可以透過Excel來打開看了。
當然Excel有資料筆數限制,所以如果大到打不開請勤勞一點拆分子資料夾蒐集。

下面是Powershell程式碼:請自行替換變數$path和$reportpath


1
2
3
4
$path = "F:\XXXX\AA" #define path to the shared folder
$reportpath ="F:\temp\XXXX_AA_ACL.csv" #define path to export permissions report
#script scans for directories under shared folder and gets acl(permissions) for all of them
dir -Recurse $path | where { $_.PsIsContainer } | % { $path1 = $_.fullname; Get-Acl $_.Fullname | % { $_.access | Add-Member -MemberType NoteProperty '.\Application Data' -Value $path1 -passthru }} | Export-Csv $reportpath

下面就會列出資料夾下所有的ACL,這樣是不是很方便稽核呢!

Powershell:與Batch讀取txt檔內容作為變數

Powershell:與Batch讀取txt檔內容作為變數

如果你寫了很多Powershell或批次檔是放在Fileserver/ShareFolder給大家用,
那麼FileServer搬家對你來說肯定是個痛苦,因為如果當初你的路徑是寫死的,髂麼肯定是很痛苦的。

最早,我都是在Powershell/Batch檔頭做變數宣告,例如:


1
2
3
Dos command / Batch
%Srv_A% = \\1.2.3.4
%Srv_B% = \\5.6.7.8

1
2
3
Powershell
$Srv_A = \\1.2.3.4
$Srv_B = \\5.6.7.8

但是如果這類的Script越來越多,某一天Share Folder搬家的時候也是改得很痛苦。所以我就萌生了如何可以一次改好的方式。把路徑的變數放在某個TXT檔案,需要的時候去讀出來就好了。

下面是文字檔的部分,我自己命名為GlobalVar.txt


1
2
FSRV_A=\\1.2.3.4
FSRV_B=\\5.6.7.8

Dos Command / Batch讀取方式,在檔頭放這一行利用 %~dp0的方式來讀取同目錄的txt檔案


1
for /f "delims== tokens=1,2" %%G in (%~dp0GlobalVar.txt) do set %%G=%%H

Powershell讀取方式,在檔頭放這一行,利用$PSScriptRoot來讀取同目錄txt檔案。


1
2
3
4
Get-Content $PSScriptRoot\GlobalVar.txt | Foreach-Object{
   $var = $_.Split('=')
   New-Variable -Name $var[0] -Value $var[1]
}

如果你沒有把Script放的太多目錄,這樣應該可以減少你Share Folder搬家時的困擾。

Excel關閉時,沒有提示存檔直接關閉。

Excel關閉時,沒有提示存檔直接關閉。

這一題幾乎沒甚麼技術性,只是提供方向去解決問題。

當Excel檔編輯完要關閉的時候應該都會自動檢查是否需要存檔,但是某一天開始,突然Excel關閉的時候不存檔也不提示了,這對於User真的很惱人!

你可以先嘗試使用Excel的安全模式來打開Excel隨意編輯後關掉試試看會不會存檔。
Tips:Excel安全模式:執行Excel.exe /safemode ,或是按住Ctrl再點Excel也可以

如果會出現存檔那就是Excel某個Add-in(增益集)再作怪,試著把增益集關閉或移除後,很有機會讓這個功能恢復正常。