2010年4月17日 星期六
網路效能測試工具: iperf
iperf
Shell Script: 每日檢查硬碟的使用量,當到達90%時寄出Alert mail給root
#!/bin/bash
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge 90 ]; then
echo "Running out of space "$partition $usep%" on $(hostname) as on $(date)" | mail -s "Alert: Almost out of disk space $usep%" root
fi
done
2. # chmod 755 diskspace.sh
3. # crontab -e
-> 10 5 * * * /root/bin/diskspace.sh
這個範例用了 grep,awk與cut指令來實作,可以見得它們有多好用了 :)
參考來源: http://www.cyberciti.biz/tips/shell-script-to-watch-the-disk-space.html
Bind view
整 個named.conf的架構舉例如下:
22 view "intranet" {
23 match-clients {"192.168.1.0/24";};
24 zone "." IN {
25 type hint;
26 file "named.root";
27 };
28
29 zone "localdomain." IN {
30 type master;
31 file "localdomain.zone";
32 allow-update { none; };
33 };
34
35 zone "localhost." IN {
36 type master;
37 file "localhost.zone";
38 allow-update { none; };
39 };
40
41 zone "0.0.127.in-addr.arpa." IN {
42 type master;
43 file "named.local";
44 allow-update { none; };
45 };
46
47 zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." IN {
48 type master;
49 file "named.ip6.local";
50 allow-update { none; };
51 };
52
53 zone "255.in-addr.arpa." IN {
54 type master;
55 file "named.broadcast";
56 allow-update { none; };
57 };
58
59 zone "0.in-addr.arpa." IN {
60 type master;
61 file "named.zero";
62 allow-update { none; };
63 };
64
65 zone "example.com" {
66 type master;
67 file "example.com.zone";
68 };
69 };
70
71
72 view "internet" {
73 match-clients {"!192.168.1.0/24";};
74 zone "." IN {
75 type hint;
76 file "named.root";
77 };
78
79 zone "localdomain." IN {
80 type master;
81 file "localdomain.zone";
82 allow-update { none; };
83 };
84
85 zone "localhost." IN {
86 type master;
87 file "localhost.zone";
88 allow-update { none; };
89 };
90
91 zone "0.0.127.in-addr.arpa." IN {
92 type master;
93 file "named.local";
94 allow-update { none; };
95 };
96
97 zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." IN {
98 type master;
99 file "named.ip6.local";
100 allow-update { none; };
101 };
102
103 zone "255.in-addr.arpa." IN {
104 type master;
105 file "named.broadcast";
106 allow-update { none; };
107 };
108
109 zone "0.in-addr.arpa." IN {
110 type master;
111 file "named.zero";
112 allow-update { none; };
113 };
114 };
115
116 include "/etc/rndc.key";
其實就是多了
view "internet" {
match-clients {"!192.168.1.0/24";};
};
與
view "intranet" {
match-clients {"192.168.1.0/24";};
};
在這兩個區域內設定相關的zone/zone file就可以了。
queryperf: 測試DNS Server的效能/壓力工具
使用的語法也不難主要如下:
./queryperf -d -s
-d 是讀取測試RR文檔的意思
-s 是指定所要測試的DNS Server
RR_document的格式也是很簡單的,請參考以下 範例:
server1.example.com A -> query server1.example.com A Record
example.com MX -> query example.com domain mx Record
mail.example.com CNAME -> query mail.example.com CNAME
server1.example.com TXT -> query server1.example.com TXT Record
example.com TXT -> query example.com domain TXT Record
example.com NS -> query example.com domain NS Record
100.10.10.10.in-addr.arpa PTR -> query 10.10.10.100 PTR Record
101.10.10.10.in-addr.arpa PTR -> query 10.10.10.101 PTR Record
Note: ->是說明,不需要加入到RR_document
執行結果:
Statistics:
Parse input file: once
Ended due to: reaching end of file
Queries sent: 8 queries
Queries completed: 8 queries
Queries lost: 0 queries
Queries delayed(?): 0 queries
RTT max: 0.033874 sec
RTT min: 0.013128 sec
RTT average: 0.023992 sec
RTT std deviation: 0.007508 sec
RTT out of range: 0 queries
Percentage completed: 100.00%
Percentage lost: 0.00%
Started at: Mon Aug 25 03:33:47 2008
Finished at: Mon Aug 25 03:33:47 2008
Ran for: 0.034861 seconds
Queries per second: 229.482803 qps
緊接著來寫個簡單的script讓他不斷的執行 queryperf吧!
#!/bin/bash
while true
do
./queryperf -d dnstest -s $1 -v
done
把DNS所有的RR都寫入RR_document,這麼一來,就可以來試看看你的DNS Server耐不耐操了 XD!
2010年4月4日 星期日
Fedora 11 加速 YUM下載速度(axel,yum-fastmirror)
AXEL是使用多線(Multi-thread)方式下載檔案, 又有人寫成YUM的plugin, 所以就來用看看!
Install AXEL
#wget http://wilmer.gaast.net/downloads/axel-1.0b.tar.gz
#tar zxvf axel-1.0b.tar.gz
#cd axel-1.0b
# ./configure –i18n=1
#make
#make install
設定YUM 使用 AXEL:
將 axelget.conf 放置 /etc/yum/pluginconf.d/
#wget http://cnfreesoft.googlecode.com/svn/trunk/axelget/axelget.conf -P /etc/yum/pluginconf.d/
將 axelget.py 放置 /usr/lib/yum-plugins/
#wget http://cnfreesoft.googlecode.com/svn/trunk/axelget/axelget.py -P /usr/lib/yum-plugins/
調整 YUM-Axel plugin, 只有超過200Kbyte檔案才使用 axel:
# cat /etc/yum/pluginconf.d/axelget.conf
[main]
enabled=1
onlyhttp=1
enablesize=200000
cleanOnException=1
讓YUM自動找最快mirror site:
yum install yum-fastmirror
試試看吧:
# yum update
Loaded plugins: axelget, presto, refresh-packagekit
Setting up Update Process
…
we will try to use axel to download this big file:41031190
Before we start,clean all the key files
Execute axel cmd:
axel -a -n 10 http://free.nchc.org.tw/fedora/linux/updates/11/i386//evolution-help-2.26.2-1.fc11.noarch.rpm -o /var/cache/yum/updates/packages/evolution-help-2.26.2-1.fc11.noarch.rpm
Initializing download: http://free.nchc.org.tw/fedora/linux/updates/11/i386//evolution-help-2.26.2-1.fc11.noarch.rpm
File size: 41031190 bytes
Opening output file /var/cache/yum/updates/packages/evolution-help-2.26.2-1.fc11.noarch.rpm
Starting downloadConnection 6 finished ]
Connection 9 finished ]
Connection 0 finished ]
Connection 7 finished ]
Connection 1 finished ]
Connection 8 finished ]
Connection 4 finished ]
Connection 2 finished ]
Connection 3 finished ]
[100%] [..................................................] [ 391.4KB/s] [00:00]Downloaded 39.1 megabytes in 1:42 seconds. (391.42 KB/s)
[110/221]Ok,
2010年3月1日 星期一
監控即時通及MSN
注意事項: 請基於職業道德的使用本套件
===============================================
套件說明: Imspector 是一套 IM Proxy ,支援 MSN ICQ YAHOO IRC 的通訊協定, 通常安裝於NAT主機上
官方網址: http://www.imspector.org/
我的測試平台:
OS: CentOS 4.4
1. 先下載 http://www.imspector.org/downloads/imspector-0.3.tar.gz
2. 解壓縮 tar zxf imspector-0.3.tar.gz ; cd imspector-0.3/
3. 若要支援 MYSQL 或 SQLITE請依需求自行修改 Makefile 的這一行 (我只有使用 mysql ) 所以我改成 ADD_PLUGINS = mysqlloggingplugin.so
4. make && make install
5. 設定檔在 /usr/etc/imspector/imspector.conf 請依需求自行修改要監控的協定和 MySQL 的設定
6. 建立一個 database ,名稱同設定檔內的名稱, 內容如下:
代碼:
CREATE TABLE `messages` (
`id` int(11) NOT NULL auto_increment,
`timestamp` int(11) NOT NULL default '0',
`protocolname` text NOT NULL,
`type` int(11) NOT NULL default '0',
`localid` text NOT NULL,
`remoteid` text NOT NULL,
`eventdata` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1929 DEFAULT CHARSET=utf8;8. 將 IM 的連線導到 imspector ( 預設 tcp 16667 )
MSN: iptables -t nat -A PREROUTING -p tcp --destination-port 1863 -j REDIRECT --to-ports 16667
ICQ/AIM: iptables -t nat -A PREROUTING -p tcp --destination-port 5190 -j REDIRECT --to-ports 16667
Yahoo: iptables -t nat -A PREROUTING -p tcp --destination-port 5050 -j REDIRECT --to-ports 16667
IRC: iptables -t nat -A PREROUTING -p tcp --destination-port 6667 -j REDIRECT --to-ports 16667
9. 到 /var/log/imspector 下可以看到 IM 的對話 LOG
10. 官方並未提供web的介面來查詢觀看對話, 這部分要自己寫程式去資料庫裡面撈資料
我實測過 MSN 及 Yahoo即時通確定都可以正常, ICQ 和 IRC 我沒用過, 但應該也OK
附件 imspector_eric.tgz 為朋友 eric 幫寫的簡單 web 查詢介面, 連結在下面
http://www.badongo.com/file/3325015
2009年10月13日 星期二
CentOS 中文亂碼
/etc/sysconfig/i18n
內容換成:
LANG="zh_TW.Big5"
SUPPORTED="zh_TW.Big5:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
2009年8月28日 星期五
FreeBSD 修補已知的系統安全漏洞
#mkdir /usr/src/patch < ---先先建立一個/usr/src/patch目錄,作為更新Patch之目錄
#cd /usr/src/patch <---把目錄切換至/usr/src/patch
#fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-05:21/openssl.patch <----依照網頁說明所在之位置抓取更新檔,請至該網站下載所需版本之Patch,例如以FreeBSD 6.0-RELEASE版本 Patch為FreeBSD-SA-05:21.openssl.asc為例。
#patch < openssl.patch <----更新
..... 省略
File to patch:/usr/src/crypto/openssl/ssl/s23_srvr.c <----依照說明檔之路徑
依照修補檔的說明另外兩個檔案也是如此更新
依照這個修補檔的說明,我們必須重新編譯系統核心才算更新完成
#cd /usr/src
#make buildkernel KERNCONF=kernel_files
#make installkernel KERNCONF=kernel_files
安裝完成後,將編譯過程中使用的檔案刪除:
#rm -rf /usr/obj/usr/src/sys/kernel_files
重新開機即可
利用mysqlhotcopy 備份MySQL
先利用ports安裝mysql41_scripts,如此才能使用mysqlhotcopy功能。
#cd /usr/ports/databases/mysql41_scripts
#make install clean
安裝完成之後寫一腳本每天自動備份mysql
#!/bin/sh
DBUser=root
DBPasswd=mysql登入密碼
basedir=/home/backup
today=`/bin/date +%Y%m%d`
deldate=`/bin/date -v -1d +%Y%m%d`
echo off
cd $basedir
/usr/local/bin/mysqlhotcopy -u $DBUser -p $DBPasswd 資料庫名稱 $basedir
tar -czvf $today.ttc.sql.tgz $basedir/資料庫名稱
rm -f $deldate.資料庫名稱.sql.tgz
EOC
將上面腳本存成auto-backup.sh並更改權限
#chmod 755 auto-backup.sh # 將 auto-backup.sh 的權限改成可執行
編輯 crontab #crontab -e 加入下面這行:
30 4 * * * auto-backup.sh # 讓 Server 每天零晨4點30分做一次資料備份
2009年8月7日 星期五
防止 user 查詢觀看其他 user Processes
看了這篇:FreeBSD Prevent Users From Seeing Information About Processes Owned by Other Users, 裡面寫到如何防止其他使用者登入 ssh 觀看到其他使用者的一些動作,平常一般使用者可以利用 ps aux 指令關看到所有 Processes 的狀況,包含了系統所有使用者,這篇就是介紹如何關閉使用者查看其他不屬於自己的 Processes,作法有兩種,底下分別介紹,效果是一樣的:
1. 寫入 /etc/sysctl.conf
echo 'security.bsd.see_other_gids=0' >> /etc/sysctl.conf
2. 直接在 command line 執行
sysctl security.bsd.see_other_gids=0
兩種效果是一樣的,當然可以查詢目前的系統狀況
2009年7月25日 星期六
postfix 刪除mailq中的特定spam
mailq | grep "service@epaper.com.tw" | cut -d " " -f1 | cut -d'*' -f1 | postsuper -d -
另外, 在 header_checks 中可以加入 service@epaper.com.tw 來過濾
# vi /etc/postfix/header_checks # 加入要擋掉的來原信
/^From:.service\@epaper\.com\.tw/ DISCARD epaper Attack Mail
# postmap -q - regexp:/etc/postfix/header_checks < /etc/postfix/header_checks # 重新讓 Postfix 新 header_checks 生效
2009年7月17日 星期五
【FreeBSD】建置 NTP Server
今天同事提到我們有些 Switch 的時間有些問題,看起來是系統沒有做到時間對時的動作
查了一下資料,其實我們自行架設一台 NTP Server,而所謂的 NTP 就是 Network Time Protocol
做時間校正有什麼好處呢?舉例而言,,若發生資安事件時,需查詢多項設備的 Log 進行比對時,Log 時間的正確性、一致性就十分重要了
搜尋了一下文章,便參考此篇 OpenNTPD-網路對時 在 FreeBSD 上弄一台 NTP Server
安裝就下面2行而已
# cd /usr/ports/net/openntpd
# make install clean
接下來在 /etc/rc.conf 加入
openntpd_enable="YES"
設定一下 NTP Server 的參數,去編輯 /usr/local/etc/ntp.conf
listen on 192.168.1.1
server tick.stdtime.gov.tw
server tock.stdtime.gov.tw
server clock.stdtime.gov.tw
server watch.stdtime.gov.tw
server time.stdtime.gov.tw
server ntp.ntu.edu.tw
再修改 /etc/syslog.conf 加入下面這行,以方便我們看校正時的 Log
ntp.info /var/log/openntpd.log
當然別忘了要新增出 openntpd.log 這檔案出來
# touch /var/log/openntpd.log
好了之後就重新啟動 syslogd 這服務,並且也一起啟動 openntp
# /etc/rc.d/syslogd reload
# /usr/local/etc/rc.d/openntpd start
這樣 Server 的配置就完成了
而 FreeBSD Client 的部份僅需要在 ntp.conf 留一行 Server 的 IP 就好了,如下
server 192.168.1.1
至於像 Windows 要針對自己所架設的 NTP Server 對時的話,可下載 NTP 校時軟體 即可校正
【FreeBSD】LDAP 裡 userPassword 屬性值心得分享
這2天在思考 LDAP 的一個密碼的問題,先前我們請廠商開發程式,可以讓我批次塞資料到 LDAP Server 裡面
但是最近發現了一個小問題,當我用 PHP 去將 LDAP 裡每筆 Entry 抓出來後,發現密碼的資料被完整的抓了出來
也就是若當初我密碼給 123456 ,LDAP 就將 123456 完整抓出來 ~ 按照常理說,這是不合邏輯的
密碼應該是經過加密後再存進去才可以 ~
今天在酷學園詢問了一篇文章,才大概了解若想要讓密碼是以加密後的型態存進去該怎麼做 ( 感謝 Twu2 學長 )
答案是在塞入 LDAP 的時候就要做好加密的動作了!也就是我的 userPassword 的屬性值必須先加密,可以用2種方式 ( 以 MD5 為例 )
方法1:
在系統內產生
# slappasswd -h "{MD5}"
New password: ( 輸入新密碼 )
Re-enter new password: ( 再確認一次 )
把產生出來的值複製下來,貼到要塞入的 LDIF 裡面就可以了
方法2:
利用 PHP 產生新密碼
$newpass = "明文的密碼";
$newpassword = "{MD5}".base64_encode(pack("H*",md5($newpass)));
echo $newpassword;
一樣把產生出來的值複製下來,貼到要塞入的 LDIF 裡面就可以了
這樣子密碼就是以 MD5 加密的方式存在 LDAP 裡面了,再也不必擔心被其它人撈出原來的密碼!
【FreeBSD】LDAP Server - 安裝篇
安裝 LDAP 的需求是要給未來 E-mail、Radius、Proxy及無線網路用的 ^^
1. 安裝 LDAP Server
# cd /usr/ports/net/openldap23-server
# make install clean
2. 安裝好之後,需先設定 LDAP 管理者 root 的密碼,並記下來等會兒設定至 slapd.conf
# slappasswd ( 就會產生出利用 SSHA 編碼後的密碼 )
3. 修改 slapd.conf,此檔案為 LDAP Server 主要 Config 檔,以下是我的設定檔
【FreeBSD】讓 Openwebmail 與 LDAP 驗證
首先不用說,先把 openwebmail 裝起來!
要讓 openwebmail 可以去向 LDAP 做驗證,在安裝時記得要勾選 PAM 的選項
接下來設定 openwebmail.conf
將原本的
auth_module auth_unix.pl
改成
auth_module auth_pam.pl
另外再新增一行,這樣讓使用者登入時可以自動建立相關的目錄與檔案
create_syshomedir yes
接下來要來設定 PAM 這部份,我用的版本是 2.53,在 openwebmail 裡面有個 auth 的目錄,裡面有個 auth_pam.pl
其中裡面有一行就是說要去看 pam.d 裡面哪個檔案,預設是 login
my $servicename = $conf{'servicename'} || "login";
所以我去編輯 /etc/pam.d/login 並修改 auth 那區塊
# auth
auth sufficient pam_self.so no_warn
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth include system
改好後這樣就可以和系統做驗證了!
ps. 待補上修改密碼的設定
2009年5月1日 星期五
MySQL HA 與 Slave 的關係
上面一篇「MySQL HA」其實是要提 Mark Callaghan 所寫的「Global transaction IDs are hot」這篇文章。
在三種架構下,DRBD + Heartbeat 的系統要加掛 slave 是最容易的,因為 master server 雖然跳動,但 replication 位置不會變。
在 Master-Master 架構下,由於兩台 master 都有自己的 binlog,會使得 master 跳動時 slave 產生問題,也就是在 Mark Callaghan 文章裡所寫的三種解法 “switch and hope”、”check and lose”、”check and fix”。
這三種解法都並沒有很完滿的解決問題 (第三種解法雖然看起來有 “fix”,但是透過工人智慧手動解決)。
一種方法是引入 Global transactions IDs,這是由 Google 提出的 patch:「MySQL Hierarchical Replication & Global Group IDs」,對 binlog 每筆 transaction 都加上一組 64bits 且遞增的數字,這樣 slave 就不會受到 master 切換而產生 replication err。
先記錄下來,之後很有可能會透過 Google 又找到自己寫的文章…
Update:看到「High Availability for MySQL: Considering the Options」這篇文章,要如何做 HA。
選擇 MySQL 用的硬體
「5 Minute DBA – Database Server Hardware Selection」講了一些幫資料庫選擇硬體的方式,其實是偏向 MySQL…
簡單的說,CPU 超過 8 CPU 其實意義不大,不需要買 4*4core 或是 4*6core,因為 MySQL 目前無法利用到。
記憶體愈大愈好,記憶體現在便宜許多,如果有 I/O bound 的問題,除了改寫程式外,直接把記憶體加到 32GB 或是 64GB 通常是最划算的方法。
硬碟愈快愈好,有 Hardware RAID10 (要有電池) 會比軟體的 RAID10 好,不過這主要看需求,如果是 CPU bound 的應用,說不定 SATA 硬碟就夠用?
網卡請務必用 GigabitEthernet,最好是 bounding/trunking,除了增加 thoughput 外,也可以當作 redundant link。然後作業系統一定要選 64bits,不然會受限於記憶體可定址空間。
MySQL HA
MySQL 有幾種不同的方法實做 High Availability 架構:
- Master-Slave Replication,當 master 當掉時,將 slave 提昇為 master。
- DRBD + Heartbeat,透過網路對 Disk 層 RAID1,平常只有一台會 mount 並跑 mysql,當掉時會跳到另外一台。
- Master-Master Replication,當其中一台當掉時直接到另外一台使用。
這三種方法各有不同的缺點,舉例來說:
- Master-Slave Replication:master 當掉時可能有 transaction 已經寫入,但尚未被送到 slave 而造成不同步。
- DRBD + Heartbeat:當備援機跳起來時,記憶體內都還沒有 cache,會造成剛跑起來時 MySQL I/O bound,有時候叫做 “warm up problem”。
- Master-Master Replication:query 會有 race condition (同時在 db1 下
DELETE FROM table1;,以及在 db2 下INSERT INTO table1 SET col1=1;,有可能最後在 db1 上有資料,但在 db2 上沒有資料),這點可以用把寫入固定到某一台而避免,但由於也是 replication 類的架構,也會遇到 Master-Slave Replication 所敘述的問題。
由於資料的正確性會比其他的因素重要,現在我還是偏好用 DRBD + Heartbeat。因 query 的特性而不會有 query dependency 問題的系統才會用 Master-Master。
2009年3月25日 星期三
FreeBSD setting vlan
1.首先, 進入
/sys/i386/conf 並且拷貝 GENERIC 檔 成為你想要的檔名。例如: # cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
在 kernel 中加入
device vlan
當你完成建立或修改 kernel 設定檔時,執行以下命令來編譯你的 kernel:
# /usr/sbin/config MYKERNEL
# cd ../../compile/MYKERNEL
# make depend
# make
# make install
註:make depend; make; make install 可用 make depend all install 來替代
建完後重開機.
2.如果沒有在 kernel 中加入 vlan device 的話, 可以在 loader.conf 加入
if_vlan_load="YES"
cloned_interfaces="vlan100 vlan200 vlan300 vlan482"
ifconfig_fxp0="up"
ifconfig_vlan100="inet 102.203.98.97/28 vlan 100 vlandev fxp0"
ifconfig_vlan200="inet 102.203.98.24/28 vlan 200 vlandev fxp0"
ifconfig_vlan300="inet 102.203.98.10/29 vlan 300 vlandev fxp0"
ifconfig_vlan482="inet 102.203.98.223/28 vlan 482 vlandev fxp0"
2009年2月15日 星期日
Freebsd 找出空密碼帳號
有些系統用戶並沒有設定密碼,基於安全考慮,最好找出所有空密碼的帳號並暫時禁止登入。
在 FreeBSD 可以透過 awk 在檔案 /etc/master.password 找出空密碼帳號,切換到 root 並輸入以下指令:
以上指令會用 awk 掃瞄 /etc/master.passwd,並以 : 作為分隔字串。並且找出 password 欄位 ($2) 空白的內容。如果系統內有空密碼帳號,便會用以下格式顯示:
username::1099:1099::0:0:User &:/home/username:/bin/bash
當發現有空密碼帳號後,可以用以下指令進行 lock 及 unlock 的動作:
lock user
# pw lock username
unlock user
# pw unlock username