Why BootDev — Controlling Cache headers

From AWS document, when u want to cache objects at browser, From S3 or from Cloudfront, at the same time support CORs resources like font, You can use a parameter MaxAgeSeconds: http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

With all the tests i tried Chrome don’t really respect MaxAgeSeconds , you still need traditional Cache-Control: Max-age=xxx AND Expires: into header. When using AWS Cloudfront as your edge cache / CDN, and especially adding S3 as your origin, you take special care of your cache headers.

You can use API / CLI / UI to change the cache header at the metadata session of S3.

Screen Shot 2015-07-10 at 3.41.24 PM

And at your bucket policy’s permission, set CORs

Screen Shot 2015-07-10 at 3.43.35 PM

Once you success in setting up those things, you can curl -I -H to test your settings. If you use Chrome to test, REMEMBER

  1. DONT click refresh
  2. DONT click CMD +R
  3. Click another link in your website to test 

Otherwise, you will end up in lots of confusion !

run command:

curl -I http://xxxxxx.example.com/fonts/Neutra2Display-Titling.woff -H “Origin: xxxx.example.com”

Screen Shot 2015-07-10 at 3.47.35 PMScreen Shot 2015-07-10 at 3.47.59 PM

first time u will see “Miss From Cloudfront”, if it is your production site url, you may ask why ? You should have many people visiting this obejcy. As the header is different than normal browser, Cloudfront treat it as a new object. So, no worry.

At the second time you curl, you will see “HIT from cloudfront”. So with this setup your resource (this time is font), will be cached on Cloudfront a long time and then once downloaded to browser, it will locally cached as the Cache-control: max-age set.

P.S. Cloudfront respect Cache-Control, so how long your browser will cache = how long your object will stay on Cloudfront.

With MaxAgeSeconds only, your resource can keep at browser with 304.

With Cache-control and expires header, your resource can keep at 200, from cache.

Question: So what does MaxAgeSeconds do here ? Any special require that we always want 304 but not 200, from cache ? I need someone to answer me as well 🙂

Why Bootdev — Dynamic CDN

In the old days, we put images, css / js, woff etc any assets to CDN, so that clients can download somewhere that geographically optimised.

Around end of 2012 – early 2013, new idea comes out like we should CDN everything, so that we can reduce the complex architecture with memcache, page cache cluster (Varnish) or even microccache etc. Just 1 layer cache and having everything to CDN. Like architecture below.

dnamic cdn

Your website domain name will directly point to CDN with CNAME. And then the CDN will point to your load balancer address or your web server. So it is like a proxy. When you do create, it will 100% bypass CDN and goes to web server, when u do UPDATE, the CDN will update from web server then invalidate itself, when you do DELETE, the CDN will bypass request to web server and invalidate its cache. When you read, it read from the CDN, not from web server. So the CRUD action can be completed.

You will need your own cache invalidation strategy, like send update to cloudfront / using versioning object or url.

Here is a sample conf of how we bypass some URLs to go to web server, and making Drupal works.

E1EB6A9C-17EC-446D-AD59-80B471A4F962 62367506-DDC3-4E5C-8F05-24E2D20DBBBB

With AWS cloudfront, you can bypass header ORIGIN, so that you can preform CORs actions. Also you can use similar header bypass feature to detect mobile/PC. With such architecture well setup, theoretically, you can have unlimited PV, as your server wont be really hitted. Your bound will be write DB bound only, which is not a concern in most case.

If you don’t want to understand all these, but want to lower your cost and have higher traffic and faster response, contact bootdev at founders@bootdev.com ! We can deploy Dynamic CDN to you in minutes no matter you are using AWS or not. We can point our CloudFront account to your server, it can be Azure, Linode, or any bare-meter. It just need to be Drupal, and you can enjoy the best performance ever.

ref: https://media.amazonwebservices.com/blog/cloudfront_dynamic_web_sites_full_1.jpg

fastcgi with apache, virtualhost per user setup

Im showing a working conf for fastcgi per user virtualhost & php.ini on apache2

Googled some reference with lots of apache like putting FcgidInitialEnv into virtualhost does not work. Tested out a working conf for fastcgi with apache, virtualhost per user by suExec setup.

About installing dependencies on CentOS 6, reference below ***Remember to add the epel repo

http://ruleoftech.com/2013/using-php-fpm-with-apache-2-on-centos
http://mcdee.com.au/fastcgi-with-php-apache-centos6/
http://kuaileyongshi.blog.51cto.com/1480649/648789

Beware suexec not allow to set uid < 500 ===> you cannot use apache (CentOS) www-data(Ubuntu) in SuexecUserGroup

Just add below apache conf in /etc/httpd/conf.d/anyfilename.conf, this conf run a php wrapper by FCGIWrapper

Then the wrapper can specify which php.ini to run

<IfModule fcgid_module>
  FcgidInitialEnv PHPRC "/php"
</IfModule>

# using mod_fcgid and user specific php.ini
# You can copy this part, add user and create more virtualhost on demand
<VirtualHost *:80>
  ServerName fcgi1.keithyau.com
  DocumentRoot "/var/www/keithyau"
  SuexecUserGroup keithyau keithyau

  <Directory /var/www/keithyau>
    Options FollowSymLinks +ExecCGI
    AllowOverride All
    AddHandler fcgid-script .php
    FCGIWrapper /var/www/change-this/fcgi1/fcgi1-wrapper .php
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

The fcgi1-wrapper is something like this, PHPRC is the folder to contain custom php.ini you can add more settings.

  #!/bin/sh
  PHPRC=/var/www/keithyau/fcgi1
  export PHPRC
  export PHP_FCGI_MAX_REQUESTS=5000
  export PHP_FCGI_CHILDREN=8
  exec /var/www/html/fastcgi-bin/php-cgi

Screen Shot 2014-03-12 at 6.20.10 PM

 

We can config like disable_function in this php.ini. Finally, check the loaded phpinfo

淺談叢集式電腦 ( Clustering )

當你開始接觸 clustering 時就會發覺, 原來沒學 clustering 根本等於沒有學 Unix / Linux. 
我們一般情況用到的 SERVER / Client 只是皮毛. Clustering 一個字, 內裹包含了多種技術, 
以下例子是常用的
  1. HPC – High performance computing
  2. Server Load balancing 負載平衡
    1. DNS round robin
    2. LVS – ipvsadm
  3. HA – High availability
    1. XEN cluster
    2. Heartbeat
    3. DRBD - http://www.drbd.org/
  4. Parallel computing
    1. http://en.wikipedia.org/wiki/MPICH

今天所談的是入門級的 clustering, LVS

LVS – Linux virtual server主要是用作負載平衡 與 HA,

What is the Linux Virtual Server?

The Linux Virtual Server is a highly scalable and highly available server built on a cluster of real servers, with the load balancer running on the Linux operating system. The architecture of the server cluster is fully transparent to end users, and the users interact as if it were a single high-performance virtual server.

SOURCE: http://www.linuxvirtualserver.org/ 

負載平衡的意思是把一部服務器的工作分到多部服務器之上. 由一個服務器為主人 ( Master ), 其他為幫手 ( node ). 如下圖

more_on_clustering

更可以制定負載平衡的策略

詳程參考, http://linux.die.net/man/8/ipvsadm

    1. rr – Robin Robin: distributes jobs equally amongst the available real servers.
    2. wrr – Weighted Round Robin: assigns jobs to real servers proportionally to there real servers’ weight. Servers with higher weights receive new jobs first and get more jobs than servers with lower weights. Servers with equal weights get an equal distribution of new jobs.
    3. lc – Least-Connection: assigns more jobs to real servers with fewer active jobs.
    4. wlc – Weighted Least-Connection: assigns more jobs to servers with fewer jobs and relative to the real servers’ weight (Ci/Wi). This is the default.
    5. lblc – Locality-Based Least-Connection: assigns jobs destined for the same IP address to the same server if the server is not overloaded and available; otherwise assign jobs to servers with fewer jobs, and keep it for future assignment.
    6. lblcr – Locality-Based Least-Connection with Replication: assigns jobs destined for the same IP address to the least-connection node in the server set for the IP address. If all the node in the server set are over loaded, it picks up a node with fewer jobs in the cluster and adds it in the sever set for the target. If the server set has not been modified for the specified time, the most loaded node is removed from the server set, in order to avoid high degree of replication.
    7. dh – Destination Hashing: assigns jobs to servers through looking up a statically assigned hash table by their destination IP addresses.
    8. sh – Source Hashing: assigns jobs to servers through looking up a statically assigned hash table by their source IP addresses.
    9. sed – Shortest Expected Delay: assigns an incoming job to the server with the shortest expected delay. The expected delay that the job will experience is (Ci + 1) / Ui if sent to the ith server, in which Ci is the number of jobs on the the ith server and Ui is the fixed service rate (weight) of the ith server.
    10. nq – Never Queue: assigns an incoming job to an idle server if there is, instead of waiting for a fast one; if all the servers are busy, it adopts the Shortest Expected Delay policy to assign the job.

source: Man page of ipvsadm

負載平衡方法大致上有

  1. NAT (Network address translation)
  2. DR – direct routing
  3. Tunneling

以下是 LVS – NAT LOAD BALANCING 的參考

原意圖

VS-NAT

VS via NAT, source: http://www.linuxvirtualserver.org/VS-NAT.html

指令

Master (NAT)

echo 1 > /proc/sys/net/ipv4/ip_forward

ipvsadm -A -t 192.168.7.200:80 -s rr

ipvsadm -a -t 192.168.7.200:80 -r 192.168.7.201:80 -m

ipvsadm -a -t 192.168.7.200:80 -r 192.168.7.202:80 -m

ipvsadm -a -t 192.168.7.200:80 -r 192.168.7.203:80 -m

ipvsadm -L –stats (現時的連接情況)

Nodes:

Set default route to 192.168.7.200

route add default gw 192.168.7.000

ip 地址

名稱 意思
192.168.7.200 Master
192.168.7.201 Node
192.168.7.202 Node
192.168.7.203 Node
192.168.7.1 Default GW
80 Www – web 服務器的 port number
rr Round robin 策略
-m LVS NAT
-a ADD SERVER
-A ADD SERVICE

Thanks, 有興趣多討論請跟我連絡 keithyau@yubis.net !!

淺談網頁服務器群的設計 (A group of web server)

前陣子, 在師兄那邊聽了一個他的經驗, 一間寄存公司其中一個網頁服務器壞了的經驗.

話說一個裝有 800 客戶的網頁服務器只用 raid 5 作備份, 沒有備份服務器 (HA / heartbeat)的低成本制作,
某天一下子死掉兩個硬碟. 之後的 18 小時, 客戶服務部就 ...

在 HSBC 中學得的服務器管理知識, 告訴我任何作實戰 production 的服務器必需有備份,
而且是能夠在 15 分鐘內回復的備份. 不過, 現實情況是一些中小型機構, 沒有兩倍的成本去做備份.
所以回復時間在 18-24小時內都可以接受.

現時中小企的 IT 成本, 軟件比硬件高得多. 所以如果選用開源軟件,
再買一個 HKD $3000 的小服務器就安全得多了.

本文是以一個案例作介紹以虛擬技術把服務器模組化, 令備份 / 資源調動時方便得多.
那我師兄的故事, 如果是我的話怎樣處理 ? 先發現問題所在

問題 1: 裝有 800 客戶的服務器沒有虛擬化, 在救援 / 備份時造成不便
問題 2: 沒有備用服務器, 服務器停止的 18 小時中客戶服務部的開支比買一個小型服務器更高
問題 3: 除 raid 5 以外, 沒有資料備份. 原因可能是沒有虛擬化令備份程序複雜

所以根本問題是服務器的設計, 與技術人員的能耐無關 !

解決方法: 沒有人說備份服務器的比例一定是 1:1 的, 以一部備份多部 production 亦可.
因成本與客戶要求而定, 備份服務器不一定要有 raid, 不一定要有足夠的計算能力 (cpu power / cpw).
因此, 一部 HKD $3000 的服務器, 只要能夠作備份就足夠有餘了. 

但出現的問題是, 

1) 如果我把所有客戶的資料都備份, 資源需求很大. 這時可考慮 rsync, rsync 是增加式資料備份,
只備份已更改 / 新增檔案

以下是 rysnc 的示範, 在linux備份服務器輸入:
sudo rsync -avl --delete --exclude=/不包括的資料夾1 --exclude=/不包括的資料夾2 
來源地址:/要備份的資料夾 /本地儲存資料的位置

2) CPU 已經用來服務客人了, 怎樣做備份
這時需要 at 指令 / crontab, 可以設定只在特定時間作備份. 以前在 HSBC 時, 備份會在股市收市後進行.
以 at command 作示範

at 1900     ← 意思是當天下午 7:00
> 備份指令 (如以上的 rsync)
> 完成後 CTRL + D

除此之外, 把服務器虛擬化, 有些選擇是把服務器放到一個 img 檔案中.
這樣, 備份時把整個 img 檔案備份就能佔用較小資源.

3) 出事了, 怎樣啟動備用服務器 ?

你可以選用 HA (high availability) 設計, 並以 heartbeat 啟動, 這樣就可以作即時回復. 但成本較高.
在這文中不作詳談. 一般來說, 可以手動. 但先要為服務器作一個好的設計.

以下是一個網頁服務器群的設計

所謂服務器模組化就是一個服務器只作一種服務. 以前的日子, 成本會很高. 但在虛擬化之下就不算問題. 參考虛擬化制作: http://www.yubis.net/blog/keith/summary-virtualbox-vmware-xen-351?page=2

在服務器模組化出名的有 MICROSOFT VIRTUAL SERVER, 但使用 xen 的話更好. 在使用服務器群時會出現一個重大問題. 就是同一種服務不能有兩個服務器, 因為同一個 ip 地址 不能用同一個 port. 例如 port 80, 路由器只能指向一個服務器. 這時, 模組化就會不攻自破.

以下是一個解決方法

web_server_group1

上圖中有兩個網頁服務器. External 是給客人用的. 但如果想把公司的網頁都用同一個 ip 地址放出去, 那就要 proxy 服務器的幫助. 先在 External 中開動 apache 的 proxy modules

# a2enmod proxy*

#/etc/init.d/apache2 restart

例如公司的網頁是 abc.xyz.org, 那分別在 dns 服務器, External & Internal 中加上圖中的設定, abc.xyz.org 就可以提供服務了.

以上說的與師兄的案例有什麼關連 ?

試把圖中 internal web server 當成師兄故事中所死掉的服務器, 那不就把 External 中的設定改一下, 由 死掉的服務器指向備份中的服務器就成了嗎 ? 同樣方法可以加上更多的網頁服務器  !

如何解決MySQL 開動不到的問題 MySQL start fail

昨天在服務器搬遷時遇到問題, 就是搬遷後, Mysql Start Fail – MySQL 資料庫不能開始. 找了很久都沒有答案, 檢查程序如下

以下的例子都是在 Ubuntu 下執行, 最後就是我的解決方法

檢查MySQL 的設定檔

Sudo vi /etc/mysql/my.cnf

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

# This was formally known as [safe_mysqld]. Both versions are currently parsed.

[mysqld_safe]

socket = /var/run/mysqld/mysqld.sock

nice = 0

[mysqld]

user = mysql

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

port = 3306

basedir = /usr

datadir = /var/lib/mysql # 確定 folder 是否存在

tmpdir = /tmp

language = /usr/share/mysql/english

skip-external-locking

bind-address = 127.0.0.1# 如果這裡是其他 ip 地址, 有可能造成 MySQL start fail

key_buffer = 16M

max_allowed_packet = 16M

thread_stack = 128K

thread_cache_size = 8

query_cache_limit = 1M

query_cache_size = 16M

log_bin = /var/log/mysql/mysql-bin.log

# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!

expire_logs_days = 10

max_binlog_size = 100M

skip-bdb

[mysqldump]

quick

quote-names

max_allowed_packet = 16M

[mysql]

#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]

key_buffer = 16M

!includedir /etc/mysql/conf.d/

檢查MySQL 資料夾的權限

權限分別為

keithyau@Yubis-production:/var/lib$ sudo ls -l /var/lib/mysql

total 20612

-rw-r–r– 1 root root 0 2008-03-16 22:01 debian-5.0.flag

drwx—— 2 mysql mysql 12288 2008-08-16 02:29 drupal

-rw-rw—- 1 mysql mysql 10485760 2009-02-26 21:00 ibdata1

-rw-rw—- 1 mysql mysql 5242880 2009-02-26 21:08 ib_logfile0

-rw-rw—- 1 mysql mysql 5242880 2008-03-16 22:01 ib_logfile1

drwxr-xr-x 2 mysql root 4096 2002-01-13 17:16 mysql

-rw——- 1 root root 6 2008-03-16 22:01 mysql_upgrade_info

keithyau@Yubis-production:/var/lib$ sudo ls -l /var/lib

total 176

drwxr-xr-x 4 root root 4096 2008-03-14 20:39 apt

drwxr-xr-x 2 root root 4096 2008-03-14 20:41 aptitude

drwxr-xr-x 2 root root 4096 2002-01-26 19:48 dhcp3

drwxr-xr-x 4 root root 4096 2008-03-14 20:52 dictionaries-common

drwxr-xr-x 2 root root 4096 2006-10-24 03:27 discover

drwxr-xr-x 7 root root 4096 2009-02-26 20:45 dpkg

drwxr-xr-x 3 root root 4096 2008-03-14 20:53 gstreamer

drwxr-xr-x 2 root root 4096 2008-03-14 20:39 initramfs-tools

drwxr-xr-x 2 root root 4096 2007-01-31 06:27 initscripts

drwxr-xr-x 2 root root 4096 2009-02-26 19:17 lib_mysql

drwxr-xr-x 2 root root 4096 2008-03-14 22:32 logrotate

drwxr-xr-x 6 root root 4096 2009-01-03 14:12 menu-xdg

drwxr-xr-x 2 root root 4096 2006-10-28 22:06 misc

drwxr-xr-x 10 mysql mysql 4096 2009-02-26 21:08 mysql

drwxr-xr-x 2 root root 4096 2008-01-27 19:46 mysql-cluster

檢查後依然不能開始MySQL 服務器 ……

打開 /var/log/syslog 看看有沒有以下一行

Feb 26 20:45:59 Yubis-production /etc/init.d/mysql[6254]: ^G/usr/bin/mysqladmin: connect to server at ‘localhost’ failed

Feb 26 20:45:59 Yubis-production /etc/init.d/mysql[6254]: error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’

Feb 26 20:45:59 Yubis-production /etc/init.d/mysql[6254]: Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists!

Feb 26 20:45:59 Yubis-production /etc/init.d/mysql[6254]:

Feb 26 20:46:04 Yubis-production mysqld_safe[6319]: started

Feb 26 20:46:04 Yubis-production mysqld[6328]: 090226 20:46:04 InnoDB: Started; log sequence number 0 43665

Feb 26 20:46:04 Yubis-production mysqld[6328]: 090226 20:46:04 [ERROR] Binlog has bad magic number; It’s not a binary log file that can be used by this version of MySQL

如果存在的話, 應該是你的 MySQL 服務器沒有正常關上, 那就 …

打開 /var/log/mysql

keithyau@Yubis-production:/var/lib$ sudo ls -l /var/log/mysql/
total 295696
-rw-rw—- 1 mysql adm 104885450 2009-02-18 12:36 mysql-bin.000077
-rw-rw—- 1 mysql adm 105175310 2009-02-24 11:27 mysql-bin.000078
-rw-rw—- 1 mysql adm 83164522 2009-02-26 19:24 mysql-bin.000079
-rw-rw—- 1 mysql adm 98 2009-02-26 19:56 mysql-bin.000080
-rw-rw—- 1 mysql adm 9233377 2009-02-27 16:10 mysql-bin.000081
-rw-rw—- 1 mysql adm 160 2009-02-26 21:08 mysql-bin.index

把最後一個 bin 檔案刪除

sudo rm /var/log/mysql/mysql-bin.00081

再打開 mysql-bin.index 把最後一行刪除

sudo vi /var/log/mysql/mysql-bin.index

/var/log/mysql/mysql-bin.000077

/var/log/mysql/mysql-bin.000078

/var/log/mysql/mysql-bin.000079

/var/log/mysql/mysql-bin.000080

/var/log/mysql/mysql-bin.000081

重新打開 MySQL 資料庫就完成了

Sudo /etc/init.d/mysql restart

how to maintain a SME class network如何維護一個中小企的網絡 Agility 靈活性

Agility 靈活性

    1. IT Risk Management , 最煩惱的一定是靈活性, 不單是說技術上的靈活性, 還得要配合商業角度考慮. 例如寫出來的程序 code 不能循環再用, 就會造成 man power 的靈活性問題. 又例如知識的管理. 只有小部份員工擁有相關知識, 不能夠隨時互相交換工作, 亦會做成靈活性的問題. 靈活性問題是不能夠解決的, 只可以從一開始系統設計 / 方案管理中著手.
      1. Infrastructure design 系統設計

        一套 IT solution 的系統設計決定了它的靈活性, 例如有多少組 backup, 有多少組預備, 如何做系統轉移, 需要多少 hard code 和硬件, 需求的維護人手與成本. 特別要小心一些不可再用的資源 (non-reusable cost). 一套完整的 entreprise class IT Solution 價錢可以是數千萬.

        給大家一個好例子就是 DHL UPS 這些物流公司所用的物流系統, 自己追蹤每一件貨物位置, 每一員工和貨物手上都有相應的硬件. 硬件雖為 non-reusable cost, 但可以在多方面應用, 減低捐失. 對客戶方面 (client side), 它用了網站作為平台, 客戶可以 24小時追查自己的貨品位置. 有了這樣的系統, 貨物一接收到後就能 不停步移動, 減低存倉的成本.

        單以一個網站來說, 如果可以自動收客, 出單, 統計, 月結報告, 廣播新消息 已經是一個可以等同兩個員工的 IT solution.

      2. Virtualization 虛擬化

        在眾多IT 技術中, 虛擬化對 agility 的幫助特別大. 一般情況下, 要搬動服務器內的東西需要以每一個 application 計算. 但如果虛擬化後, 整台服務器都在一個檔案 file 之中, 可以方便地把它移到其他服務器而不需關掉電腦. 在安全性方面, 修復一台虛擬機比修復一台實體電腦來得容易. 而且系統資源會更容易分配, 達到更高的靈活性.

      3. Server independent software 跨平台軟件

        需要員工學會一套新軟件是十分昂貴的, 所以同一套軟件能夠在多個平台上使用十分重要.. 近年, 跨平台技術有 Java jvm, LAMP / WAMP. 其實是說一些程序語言的支援. 最常用的當然是網上牌軟件. 因為溜覽器的普及, 差不多所有平台都有溜覽器. 即使轉換了平台, 員工都可以照常的使用網上牌的軟件.

        在服務器上, Apache 所支持的軟件已經足夠應付大部份的需要. 世界上約有 80% 的網頁服務器都是使用 Apache .

      4. Modulization 模組化

        模組化意思是在程序 / 系統建立的時候, 以功能把硬件 / 軟件分類組成模組. 在下一次 / 在另一 project 需要相似東西時, 可以即時應用. 模組化可以減低相同功用的硬件 / 軟件重購的機會. 當模組儲存到一定量的時候, 還可以把它 productize / 做成一個資料庫, 形成一間公司最有價值的部份你的經驗

      5. Reusable resource 可再用資源

        可再用資源的例子有程序, 作業系統, 電腦, 知識, 書籍, 人才 …. 為什麼要注重可再用資源?除了金錢外當然還有時間, 使用可再用資源可減省生產時間, 而且可以比之前做更好. 即使你的公司是靠賣服務的, 例如寫網站. 使用可再用的資源才能令你真正賺錢. 否則之前所付出的時間都會白費了

how to maintain a SME class network如何維護一個中小企的網絡 – ACCESS

    1. Access 安全性

      相信不少朋友都會以為 IT risk , 最大問題的存在就是網絡安全. 其實非也. 造成捐失的多數都是穩定性與準確性不足. 被人入侵系統而造成的損失只作小數.

      而在這少數的入侵當中, 80% 以上都不是因為防毒系統 / 防火墙漏洞. 反而是網絡釣魚. 在本文將會講解一下.

      1. Firewall 防火牆

        其實什麼是防火墻 ? 防火墻可以阻擋不明要求 request 直接到達伺服器. 在家中, 如果希望多台電腦同時上網,則需要一台路由器. 這個路由器的配置 NAT firewall 都是防火墻的一種. Linux , 常用的防火墻軟件叫 iptables.

        防火墻還有多種功能如 Port forwarding, port redirect, load balancing …

        中小企中, 常用的少不了 NAT network address translation. 目的是令公司多台電腦可以同時上網 / 同一個地址使用多間網絡公司. 防火墻設定不到家可能避不過以下攻擊

        DDOS flooding – 傳送大量封包倒窒網絡
        Fire walking – 防火墻被穿透, 秘密暴光
        middle man attack – 認證資料被盜

        網絡安全與資源拉上很大關係. 沒有一本書可以教人完全防避攻擊, 因為這是一項比賽, 當有新技術/ 新服務時就必有新漏洞. 需要資金上的投資去維持高程度的網絡安全.

        中小企來說, 建議把 IT 成本上的 20% 放於網絡安全之上.

      2. User access control 權限管理

        除駭客入侵外, 員工的權限管理不完善亦會造成資料外洩. 不要讓一般員工看見經理的文件這個簡單的道理, 事實不是容易達到的.

        希望完善的管理權限, 需要 Role based access control. 大部份 ERP 軟件– entreprise resource planning 應該有預備的.

        除此之外, 因為密碼容易口傳口的流失, 應該強制性要求員工定期更改密碼. linux 做例子, passwd -x 這個指令已經有這個效果.

        在重要的文件上應該加上多重認證, 除密碼外, 還可考慮指紋, 電子證書, 問答題等認證方法.

        Data deletion 資料移除

        資料在電腦上按刪除後就會消失嗎 ? 當然不會了 ! 在磁碟上寫過的東西是永遠不會失去的 ! 隨便把它棄置就會造成資料流失.

        除燒掉磁碟外有什麼做法 ? 這是最容易的做法. 你還可以考慮市面上一些禎料危急回覆公司, 他們亦會幫客人刪除資料. 還有data deletion software 可以幫手.

      3. Anti-virus 防毒

        差不多每個 Windows系統都跟著一個防毒軟件吧. 大家有沒有想過為什麼老是中毒, 什麼是電腦病毒 ? 大部份所謂的電腦病毒就是為 windows 而設的程式, 令你的 windows 造成混亂. 如一些錯誤訊息 (硬碟已滿, cpu 過高, 網絡沒回應).

        但裝上防毒系統後就不停有些過敏徵狀.如不停彈出的危險警告. 員工不知道這些警告是什麼時, 就會影響工作效率.

        其實現在的 linux 除了玩電腦遊戲外, 不當機, 高效能,免費軟件等方面早就比windows 做得出色. 現在的 open office 已經支援絕大部份的文件處理工作. 最重要的最 Virus-free. 做老闆的不會再有中毒的煩惱.

        還不打算用 linux ? 可以考慮病毒過濾的防火墻, 亦有不錯的效果.

      4. Wireless lan security 無線網絡安全

        無線網絡安全是近年熱門的話題. 因為有別於一般線性的網絡, 無線網絡安全有以下幾點要特別小心.

        1. 網絡可達範圍
          就是說你的無線網絡天線的射程. 因為你的網絡是向四周廣散, 能夠接觸到的人遠比你想像的多. 即是說受攻擊機會亦愈多.

        2. 認證方式

          一般常用的認證在無線路由器上會用 pass phrase 表示. 切記要在16 個字符之上並包括英文/ 數字/ 符號.否則就很容易被強行破解.

          在家上網時, 經常會發現周圍有一些沒有打開認證功能的上網點 ap – access point. 即是說可以除時用這些 ap 來上網. 做老闆的你可要特別小心, 因為不法份子用了你的戶口上網後, 警察第一個就是來找你了!

        3. 資料加密方式

          常用資料加密方式有 wep / wpa / wpa2. 現時, wep 已經不是安全的加密方式, 駭客軟件例如 aircraft 已經有相當高的成功率擊破 wep. 以後在設定路由器時不要再選擇 wep !

          使用無線網絡時需要特別小心的是, 有時你會發覺網絡不停的斷線. 其實不是你的儀器問題. 而是一些駭客軟件在記錄你的登什數據.當有一定份量時, 就可以登入你的網絡.所以發現無線網絡斷線時,最後等一下才再登入 ap.

      5. phishing 網路釣魚

        什麼是 網路釣魚? 網路釣魚其實跟IT 技術沒有關係. 最簡單的網絡釣魚例子是打電話以交談方式騙得系統密碼. 更可以是真接走到系統主機前盜坎資料.

        這些 網路釣魚才是中小企中最常出現損失的原因.更佔整體的 80%.

        防避 網路釣魚需要加強員工陪訓,加強保安意識 – Risk awareless culture . 技術方面, 可以考慮把重要的資料分給兩個以上的員工保管. 例如一個檔案需要兩個開啟密碼.

        聽過以上的介紹後, 相信大家對網絡安全有了初步的認識.如有任何問題, 歡迎與我聯絡

        MSN: funnykeith@msn.com

how to maintain a SME class network如何維護一個中小企的網絡 – Accuracy

  1. Accuracy 準確性
    1. Information accuracy 資訊準確性
      1. 資訊準確性其實不太關係於IT 系統的部署, 而是員工的陪訓, 資料整理的流程, 客戶/ 股東所提交的資料,行業的知識/資訊 更有關係. 企業的資料庫就是建基這些資訊 information之中. 基於這些流程, IT 技術人員才可以為企業打造獨有的資料庫.確定了商業流程後, 則需要一個可靠 又 準確的關係圖 ER diagram

        673px-er_diagram_mmorpg

        來源: http://ogrebear.com/?p=201

        為什麼要設計一個資料庫 ? 當資料收到資料庫, 經過整理可得出不同的結論而作有不同的用途. 例如作市場調查 / 統計. 這方面的科學叫 Data mining.

        所以從一開始就要把資料庫設計得好小心, 否則小小的誤差可引致日後的大錯誤. 生意上的預算失準就造成重大損失.

      2. non-system source accuracy 來源準確性

        non-system source 的例子有員工的技能/ 知識, 人手再輸入資料, 輸入資料核對流程. 這些來源都有可能造成錯誤.

        大型企業都會在重要的資料上進行多重核對, 銀行在準確性這方面特別到家.資源較少的中小企之中, 最容易出錯的地方相信是員工的技能/ 知識. 一個部門隨時只有一位員工負責, 並沒有機制 / 資源去核對資料的來源. 引致決定錯誤. 比如說IT 部門, 相信很多中小企都只有一至兩位IT 部員工, 這情況下什麼資訊最客易不準確呢 ? 簡單說數個例子

        1. 伺服器繁忙,需要更換, 可能只是設定有問題

        2. bandwidth 不夠, 可能只是郵件伺服器不斷發電郵

        3. windows linux , 可能只是技術不夠好

          以上的不準確造成了什麼後果? 當然是作為老闆的您花多不少錢了
          找出名的IT consultant 就可以了嗎? 那一樣是需要付很多錢.

          還未開始部署? 那您就是幸運的一位. 這裹有免費的 IT 部署資詢
          Http://yubis.net

        3. Control accuracy 管理準確性

        管理在這裹是指為內部管理, 自動化管理, 管理流程 / 機制, 監察系統.

        相信大家都知道 effective efficient 的分別, 就是說要快捷有效地把事情做好. 要令事情發展順利, 監察系統尤其重要. 管理準確性是指在準確充足的資料提供下可造出正確的決定. 別以為這是一件容易的事. 例如說 ERP system. 企業要出年報 financial report , 什麼會影響年報的準確性 ?

        1. 員工錯誤輸入資料
        2. 員工越權更改資料 (例如一般員工擁有經理的權限)
        3. 上有政策下有對策 (正確指令未能下達 / 報告未能反映實制情況)有什麼解決方法 ? Machine wont fick. 可以考慮引入電腦系統, 減省能接觸重要資料的人手. 人手減省後作員工陪訓與建立可信任關係亦相對容易. 當然亦需要權限管制. 選用 ERP 時可考慮有 role based access control 的產品. role based access control 就是說在 ERP system 之中, 使用者權限以實際職級定義. 例如, CEO 比經理高級, 管理員可更改系統設定, 但不可以查看資料.

          管理系統有什麼介紹, 在開源社群中, 注名的有 dotproject, drupal + ERP / CRM, tinyERP, openERP, vtiger .. 當然, 希望有絕佳的效果, 得花一點錢去設計.

          有了良好的監察 / 管理系統, 相信您的生意定必蒸蒸日上, 投資都會得到回報.

          如有任何問題 / 建議, 歡迎聯絡 MSN: funnykeith@msn.com