利用 Amazon EC2 micro instance free tier ,你可以一年內得到免費以下的東西。

AWS 免费试用套餐(每月):

Elastic Compute Cloud (EC2)

  • 750 小时的 Amazon EC2 Linux† 微型实例使用时间(配置为 613 MB 的内存、32 位和 64 位平台支持),足够整月持续运行*
  • 750 小时的 Amazon EC2 Microsoft Windows Server‡ 微型实例使用时间(配置为 613 MB 内存和 32 位和 64 位平台支持),足够整月持续运行*
  • 750 小时的 Elastic Load Balancing 加上 15 GB 数据处理*
  • 30 GB 的 Amazon Elastic Block Storage,加上 200 万个 I/O 和 1 GB 的快照存储*

以上資訊來源於 (http://aws.amazon.com/cn/free/?nc1=h_ls)

一個 micro instance (t1.micro),根據amazon官方網頁的描述,只是一台這樣運算能力的伺服器:

  • t1.micro: (Default) 613 MiB of memory, 1 vCPU, EBS storage only, 32-bit or 64-bit platform

這樣級數的伺服器,因為沒有local storage,所有I/O都要在 EBS 內進行,而且內存只有613 MB,基本上OS起動後(32bits),大概也只剩下400MB左右。由於EBS的 I/O是要收費的 (雖然Amazon free tier 免您一個月二百萬個 I/O),所以要小心運用,何況我根本不知道是怎樣計算一個 I/O的。

Amazon EC2 的官方documentation有介紹如何建立一台用WordPress blog 網站
Tutorial: Installing a LAMP Web Server

Tutorial: Hosting a WordPress Blog with Amazon EC2

大家只要有一定Linux/Unix操作經驗,按照以上的方法,相信不用一、兩個小時就可以建立了一個blog website。
但大家千萬要小心,Amazon提供的兩個 tutorials,只是教曉大家怎樣在Amazon EC2 建立WordPress blog。如果就這樣用來production use,其實很危險的,因為基本沒有把網站hardening,如果網站遭到攻擊,而且Amazon EC2是跟用量收費,後果可能好嚴重,國外就有人試過用micro instance收了Amazon $10,000美金的賬單。

Be Careful with Amazon EC2’s Micro Instance

Beware of Amazon EC2 Micro Instances

網站保安是十分重要,大家都不想把興趣變成負累吧。
所以我有一些心得介紹給大家去harden自己的workpress blog

1. EC2 Security Group

EC2 本身提供了一個類似防火牆的功能的東西叫Security Group,要好好利用它來過一些沒有用的traffic。

Inbound Security Group
inbound rule

 Outbound Security Group
outbound rule
由於網站主要用 HTTP 80 port 來通訊,所以inbound security group 只容許任何來源IP (0.0.0.0/0)訪問。
SSH 22 port 和 HTTPS 443 port 主要是用來做web site administration ,所以建議只讓自己家中 IP 來訪問。
Outbound security group 就暫時容許所有TCP 連接吧。

2. HTTP 流量控制

雖然Security Group可以過濾一些沒有service開啓的traffic,但要開通的HTTP 80 port始終要對外開放,如果給人DoS,後果亦會很嚴重。
當然最好的情況是 Amazon 有提供load balancer 或  firewall來控制網站流量,但在google 找了很久,始終找不到Amazon EC2 提供任何 traffic rate control 的設置,那麼就只好在Linux VPC 上做手腳吧。

從Linux 2.4 kernel 開始,有原生提供的防火牆(firewall)工具 iptables (十幾年前的事),可以做到一定程度的traffic rate control,不過是software level。

以下是我的一些基本設置

iptables -N LOGGING
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "HTTP traffic dropped: " --log-level 7
iptables -A LOGGING -j DROP

詳細iptables 如何運作和設定,大家要參照 Netfilter project.

由於大部份的packet filtering 工作已經交給EC2 Security Group ,為了降低VPC的負荷,這裡只做了一些簡單針對HTTP 80 port 的 rate control。

大概上,這裡的設定是只容許平均每分鐘 25 個 TCP HTTP connections 和 100 個 burst connections。如果超出這個traffic rate,Kernel netfilter就會紀錄這些package (平均每分鐘2個)並把 packet 砍掉。
被砍掉的packet ,可以在dmesg 命令中查看,如下

[6984486.012641] HTTP traffic dropped: IN=eth0 OUT= MAC=06:4e:53:ca:ad:c4:06:41:xx:xx:xx:xx:xx:xx SRC=14.198.xxx.xxx DST=172.31.xxx.xxx LEN=40 TOS=0x00 PREC=0x00 TTL=117 ID=18241 DF PROTO=TCP SPT=49219 DPT=80 WINDOW=256 RES=0x00 ACK FIN URGP=0

實際測試後,這個是一個非常保守的rate control,基本上容納不了超過兩個人同時瀏覽我的網站。不過,在blog 成立初期,應該可以足夠應付,遲些再按情況調節。

3. Bill Monitoring

除了Security Group 外,Amazon 還提供了Billing and Cost Management 。簡單而言,您可以設定一些Alert,如果當EC2綜合用量而導致賬單超過某一個金額,Amazon就會發出一封電郵給閣下,告知閣下已經超標了。
對於我這些只為興趣的博客來說,賬單的警告金額自然是 $0 USD

billing_alert

4. Workpress Hardening

然後就要參照Workpress 官方的hardening tutorial 去 harden 自己的blog 網站

Hardening WordPress

還有參照以下連結介紹的方法

WORDPRESS HOW TO Protect WordPress sites with .htaccess

值得注意的事情是,原生的AMI 的 apache httpd.conf 設定是不容許目録 .htaccess override 的。

所以以上連結所有提及利用.htaccess 實行的方法,只好直接於 httpd.conf 中實行,這個亦是 apache 官方documentation所推廌的。

.htaccess 是當您沒有web server 主 httpd.conf 的權限才使用,直接於.htaccess中修改有關設定,於效能上(performance)也比用 local .htaccess 為佳。

5. SSL Administration

因為這只是一個私人blog,暫不容許外來用家登記和登入,而且workpress administration console 是保安重鎮,當然要好好防衛。

上文已經有提及用Security Group ,令家中的IP才可以訪問 HTTPS port ,現在就把 WordPress login page 和 administration page 強行使用 SSL 。方法是修改 wp-config.php,加入以下的語句

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

其中第一句要加在 /* That’s all, stop editing! Happy blogging. */ 之前,否則不會生效。

設定後,現在 WordPress 登入和administration page ,就必定要運行於HTTPS之上,而由於HTTPS只接受家中的IP,即變相只容許自己使用吧。

Amazon EC2 架站 – Security 篇 Part 1
Tagged on:                         

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

zh_HKChinese (Hong Kong)