วันศุกร์ที่ 5 กันยายน พ.ศ. 2551

ipset เบื้องต้น

ตามที่มีคนถามเข้ามา ด้วยส่วนตัวใช้ ipset มาบ้างพอสมควร จึงจะลองเล่าให้ฟังละกันครับ

ipset เป็นชุดโปรแกรมที่ทำงานทั้งในส่วน kernelspace และ userspace และจากที่มีการทำงานในส่วน kernelspace จึงต้องมี module สำหรับ kernel ที่เรากำลังใช้งานอยู่ด้วย ดังนั้น การใช้งาน ipset จะต้องเตรียม 2 ส่วน ดังนี้

1. เตรียม kernel

# aptitude install netfilter-extensions module-assistant

เริ่ม build module ด้วยการเตรียมความพร้อมก่อน

# m-a prepare

build จริง

# m-a a-i netfilter-extensions

หลังจากทำการ build สำเร็จ ระบบจะติดตั้ง module ให้โดยอัตโนมัติ
2. เตรียม userspace

ขั้นตอนนี้ไม่มีอะไรมาก เนื่องจากมีคนเตรียมไว้ให้แล้วใน Debian

# aptitude install ipset

ต่อไปลองทดสอบ

# iptables -m set
iptables v1.4.1.1: You must specify `--set' with proper arguments
Try `iptables -h' or 'iptables --help' for more information.

ขึ้นลักษณะนี้ น่าจะใช้ได้แล้วครับ

วิธีใช้งาน

1. สร้าง set ก่อน ในที่นี้จะแนะนำการใช้ macipmap

# ipset -N [setnam] [settype] --from [ip1] --to [ip2]
# ipset -N myset macipmap --from 192.168.0.10 --to 192.168.0.250

2. ดู set

# ipset -nL
Name: myset
Type: macipmap
References: 0
Default binding:
Header: from: 192.168.0.10 to: 192.168.0.250
Members:
Bindings:

3. เพิ่ม ip+mac เข้าไปใน set

# ipset -A myset 192.168.0.11:AA:BB:CC:DD:EE:FF
# ipset -nL
Name: myset
Type: macipmap
References: 0
Default binding:
Header: from: 192.168.0.10 to: 192.168.0.250
Members:
192.168.0.11:AA:BB:CC:DD:EE:FF
Bindings:

จะเห็นว่ามี IP และ MAC เพิ่มเข้ามาใน set แล้ว :P
4. ใช้งานร่วมกับ iptables

# iptables -A FORWARD -m set --set myset src -j ACCEPT

ผลที่ได้คือ ถ้า packet ไหนที่ผ่านเข้ามา แล้วพบใน set ก็จะยอมให้ผ่านไปได้ครับ
5. ถ้าจะลบ ip+mac ออกจาก set ก็ทำได้ง่าย คือ

# ipset -D myset 192.168.0.11:AA:BB:CC:DD:EE:FF

เท่านี้ ก็ถูกลบออกจาก set แล้วครับ

ข้อดี ของ ipset คือ "ความเร็ว" เพราะในการตรวจสอบ ทำผ่าน iptables rule แค่ที่เดียว และอีกอย่างคือ สามารถ ควบคุม rule ได้แบบ dynamic โดยที่ไม่ต้องโหลด iptables rule ใหม่ แก้ ip+mac ผ่านทาง ipset ได้โดยตรง

ipset เป็นอีกหนึ่งชุดโปรแกรม ที่ผมใช้แล้วชอบ โดยขณะนี้ได้นำมาดัดแปลงทำเป็น NAS (Network Access Service) คือทำลักษณะเดียวกับ CoovaChilli ถ้าผ่านช่วง alpha เมื่อไร จะเปิดโปรเจกต์ให้ผู้ที่สนใจ นำไปทดสอบครับ

เก็บ IP Traffic Log ด้วย ulogd (Debian Admin Style)

จริง ๆ ก็ครบกำหนดการเก็บข้อมูลการจราจร (IP Traffic) ตั้งแต่วันที่ 23 สิงหาคม 2551 (1 ปี ให้หลัง จากประกาศ) แต่ด้วยวุ่น ๆ กับหลายเรื่อง (ลูกสาวก็อายุ 3 เดือนแล้วครับ :P) ก็ลองหาการเก็บ log ในแบบที่เราคุ้นเคย และพยายามไม่ให้กระทบกับ performance ของระบบ ก็เลยได้ลงเอยกับ ulogd กับ ulogd-pcap (ตอนนี้ เป็น version 1.24 ส่วน version 2 ยังเป็นรุ่นทดสอบ ที่พยายาม build แล้ว ยังไม่สำเร็จ :P)

เริ่มเลยละกันครับ

1. ติดตั้ง packages ที่จำเป็น

# aptitude install ulogd ulogd-pcap tshark

2. เขียน script มาจัดการเกี่ยวกับ log

# vi /usr/local/bin/traffic-ulogd.sh

#!/bin/sh

ULOGD_CONF_TPL=/etc/ulogd.conf.tpl
ULOGD_CONF=/etc/ulogd.conf
LOG_DIR=/home/log/ip-traffic

PARENT_DIR=`date +%Y-%m`
PARENT_DIR="$LOG_DIR/$PARENT_DIR"

DAILY_LOG=`date +%Y-%m-%d`
DAILY_LOG="$PARENT_DIR/$DAILY_LOG.pcap"


# Copy original debian ulogd.conf file to be
# the future config template.
if [ ! -f $ULOGD_CONF_TPL ]; then
echo "Copying default $ULOGD_CONF to $ULOGD_CONF_TPL"
cp $ULOGD_CONF $ULOGD_CONF_TPL
fi

# Create the directory structure for logging
if [ ! -d $PARENT_DIR ]; then
echo "Make directory $PARENT_DIR"
mkdir -p $PARENT_DIR
fi

# Edit template config file
cat $ULOGD_CONF_TPL | \
sed -e 's:^#\(plugin="/usr/lib/ulogd/ulogd_PCAP.so"\):\1:g' | \
sed -e "s:/var/log/ulog/pcap.log:$DAILY_LOG:g" > /tmp/ulogd.conf

mv /tmp/ulogd.conf $ULOGD_CONF

# Restarting to reload config file
/etc/init.d/ulogd restart

เป็น script ที่จะคอยจัดการเกี่ยวกับ directory สำหรับจัดเก็บ ในรูปแบบ 2008-08, 2008-09 และจัดเก็บ log file ในรูปแบบ 2008-08-26.pcap,...

# chmod u+x /usr/local/bin/traffic-ulogd.sh
# /usr/local/bin/traffic-ulogd.sh

สั่งให้ script จัด config ให้ และเริ่มรอการ log
3. กำหนด iptables rule ให้ทำการ log

# iptables -I FORWARD -j ULOG --ulog-cprange 100 --ulog-qthreshold 50

4. ลองดูคร่าว ๆ ว่ามี packet ผ่านเข้า log ไหม

# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 211M packets, 106G bytes)
pkts bytes target prot opt in out source destination
14M 7502M ULOG all -- * * 0.0.0.0/0 0.0.0.0/0 ULOG copy_range 100 nlgroup 1 queue_threshold 50

จะเห็นว่ามี Packet วิ่งเข้า rule นี้ด้วย :P
5. ดูแฟ้มที่จัดเก็บ log (ผมเก็บไว้ที่ /home เพราะแบ่งพื้นที่ไว้เยอะที่นี่)

# cd /home/log/ip-traffic/2008-08
# ls
2008-08-26.pcap
# file 2008-08-26.pcap
2008-08-26.pcap: tcpdump capture file (little-endian) - version 2.4 (raw IP, capture length 65535)

อ้า... ใช่แล้วครับ เป็น ลักษณะ tcpdump capture file :P (binary ด้วย ... เห็นเขาบอกให้เก็บในรูปแบบที่น่าเชื่อถือได้ ไม่รู้ตัวนี้น่าเชื่อถือพอหรือเปล่า :P)
6. ลองดู log ข้างในแฟ้มนี้ดู

# tshark -r 2008-08-26.pcap -tad -c 5
Running as user "root" and group "root". This could be dangerous.
1 2008-08-26 03:31:34.464265 172.30.10.18 -> 80.252.110.146 TCP acter > kar2ouche [SYN] Seq=0 Win=16384 Len=0 MSS=1452
2 2008-08-26 03:31:34.537428 172.30.10.102 -> 64.71.134.246 TCP ft-role > https [SYN] Seq=0 Win=16384 Len=0 MSS=1452
3 2008-08-26 03:31:34.565095 172.30.10.18 -> 66.199.250.170 TCP appiq-mgmt > manyone-xml [SYN] Seq=0 Win=16384 Len=0 MSS=1452
4 2008-08-26 03:31:34.568396 172.30.10.18 -> 219.239.90.172 TCP rfa > 28221 [SYN] Seq=0 Win=16384 Len=0 MSS=1452
5 2008-08-26 03:31:34.571477 172.30.10.18 -> 72.51.37.237 TCP cxws > ospf-lite [SYN] Seq=0 Win=16384 Len=0 MSS=145

ขอดูแค่ 5 packets ก่อนละกัน

-r 2008-08-26.pcap (read from file)
-tad (Absolute date)
-c 5 (5 packets count and exit)

7. เป็นอันว่า เก็บได้ ก็น่าจะเรียบร้อย ตอนนี้ก็เหลือให้ script เราทำงานเป็นช่วง ๆ เพื่อจัดการเรื่องชื่อไฟล์ให้ถูกต้อง

# vi /etc/cron.d/traffic-log

0 */1 * * * root /usr/local/bin/traffic-ulogd.sh >/dev/null 2>&1

# /etc/init.d/cron restart

เป็นการกำหนดให้ระบบ run script นี้ ทุก ๆ ชั่วโมง (กันพลาด เดี๋ยว log ในแฟ้ม จะไม่ตรงกับวันเวลาจริง แต่ถ้าเครื่องเปิดตลอดเวลาไม่น่ามีปัญหา) เท่านี้ก็น่าจะเรียบร้อยแล้วครับผม ตอนนี้ก็เหลือดูผลว่าไฟล์ใหญ่แค่ไหน อาจจะต้องมีการมาทำ archive อีกที เดี๋ยวค่อยมาว่ากันต่อคราวหน้าละกันครับ

How to install Cacti in Debian Etch

http://www.cahilig.org/how-install-cacti-debian-etch

Cacti has a nice user interface. It is easy to install and easy to setup, don't need too much customization.
Downloading Cacti

You can download the newest version of Cacti from its website http://cacti.net/.
wget http://www.cacti.net/downloads/cacti-0.8.7b.tar.gz
Installing Cacti

Install apache webserver with php support, mysql database server, snmp, some php modules and rrdtool.
apt-get install apache2 libapache2-mod-php5 php5 php5-cli php5-mysql php5-gd php5-snmp mysql-client mysql-server libmysqlclient15-dev snmp snmpd rrdtool

Add a user account for cacti.
groupadd cacti
useradd -g cacti cacti

Untar the cacti source file and move to /var/www.
tar -zxvf cacti-0.8.7b.tar.gz
mv cacti-0.8.7b /var/www

Login to your mysql database
mysql -u root

Create a password for your mysql root account and create cacti database and user.
SET PASSWORD FOR root@localhost = PASSWORD ('your_password_here');
CREATE DATABASE cacti;
GRANT ALL ON cacti.* TO cacti_user@localhost IDENTIFIED BY 'your_password';
quit

and import the database tables
cd /var/www/cacti-0.8.7b/
mysql -u root -p cacti < cacti.sql

Change the owner of rra and log directory to your cacti account.
chown -R cacti rra/ log/

Edit the config.php file located in include directory.
vi include/config.php

Enter your mysql host, user, password and database name.

/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cacti";
$database_password = "your_password";
$database_port = "3306";

As a cacti user
su - cacti
crontab -e

add this line to your crontab

*/5 * * * * /usr/bin/php /var/www/cacti-0.8.7b/poller.php > /dev/null 2>&1

Open up your web browser and point to http://localhost/cacti-0.8.7b/, this will start cacti installation. Click Next then select NEW INSTALL and accept the default installation value. If you don't see any errors, click Finish to install.

Login to cacti, the default username and password is admin. After login, it will prompt you change your password for security reasons.
Checking

Check your syslog if the cacti's poller is running every 5 minutes.
If you will see something like this in your syslog, your cacti should work perfectly.

Jul 5 06:50:01 server1 /USR/SBIN/CRON[6543]: (cacti) CMD (/usr/bin/php /var/www/cacti/poller.php > /dev/null 2>&1)

You can start monitoring your servers, routers and other networking devices with cacti

วันอังคารที่ 2 กันยายน พ.ศ. 2551

How to install PHP5,Apach2.2,MySQL5 by manual compile.

How to install PHP5,Apach2.2,MySQL5 by manual compile.
ได้รับมอบหมายให้ Install OS พร้อม Software จำพวก Apache, PHP5 แล้วก็ MySQL5 เริ่มแรกเราก็ไปหา source file มาก่อน เตรียมๆ เอาไว้ ดังนี้
Apache 2.2
MySQL 5.0.37
PHP 5.2.1
ลำดับการติดตั้ง ก็ตามนี้ครับ
การติดตั้ง Apache 2.2
การติดตั้ง MySQL 5.0.37 : http://laffers.net/howtos/howto-install-mysql
การติดตั้ง PHP 5.2.1
*** ไอ้ Apache กะ MySQL เนี้ยจะอันไหนก่อนก็ได้นะครับ แต่ PHP ขอเป็นอันท้ายสุดละกัน..เวลา Compile มันต้องทำให้ PHP รู้จักกับ Apache&MySQL ด้วยอ่ะครับ (การ set prefix) มาเริ่มกันเลยดีกว่าครับ…
1. การติดตั้ง Apache 2.2# tar xvfj httpd-2.2.4.tar.bz2 -> อันนี้ถ้าเรา Download มาเป็น .tar.gz ก็ใช้ tar xvfz httpd-2.2.4.tar.gz ครับ# cd httpd-2.2.4# ./configure –prefix=/usr/local/apache2 -> prefix ตรงนี้เป็น option ที่ให้เรากำหนดว่าเราจะเอา ไฟล์ที่ จะ install ไปไว้ที่ path ไหน# make -> เริ่มทำการ Compile# make install -> install ครับ
เป็นอันเสร็จสิ้นในส่วนของ Apache
2. การติดตั้ง MySQL 5.0.37
อันนี้ก็คล้ายๆ กับ apache ครับ
# tar xvfz mysql-5.0.37.tar.gz# cd mysql-5.0.37# ./configure –prefix=/usr/local/mysql5 -> ถ้าอยากรู้ว่า default เป็นอะไร ก็ให้ลองพิมพ์ ./configure –help# make -> เริ่มทำการ Compile# make install -> install ครับ# cp support-files/my-medium.cnf /etc/my.cnfเมื่อถึงขั้นตอนนี้ให้คุณเข้าไปแก้ไขไฟล์ /etc/my.cnf โดยให้เพิ่ม user = mysql ไปที่บรรทัดใต้คำว่า [mysqld] อ่ะแล้วก็ Save# cd /usr/local/mysql5# bin/mysql_install_db –user=mysql# chown -R root .# chown -R mysql var# chgrp -R mysql .# bin/mysqld_safe –user=mysql & -> Start ครับผมทำการทดสอบว่า mysql ทำงานได้เปล่า ก็ ใช้คำสั่งนี้ดู# /usr/local/mysql5/bin/mysqladmin versionถ้าออกมาเป็น version ต่างๆของ mysql ก็ถือว่า ผ่าน ต่อไปก็เป็นการ set password ให้กับ user root โดยต้อง Login เข้าไปเป็น root ก่อนดังนี้# /usr/local/mysql5/bin/mysql -u rootเมื่อเข้าไปแล้วก็ใช้คำสั่งตามนี้DELETE FROM mysql.user WHERE User = ”;FLUSH PRIVILEGES;SELECT Host, User FROM mysql.user;SET PASSWORD FOR ‘root’@'localhost’ = PASSWORD(’new_password’);SET PASSWORD FOR ‘root’@'host_name’ = PASSWORD(’new_password’);quitหลังจากนั้นก็ ทำการ Restart Mysql อีกซักรอบ โดย# /usr/local/mysql5/bin/mysqladmin -u root -p shutdown# /usr/local/mysql5/bin/mysqld_safe –user=mysql &เป็นอันเสร็จสิ้น ในส่วนของ mysql
3. การติดตั้ง PHP 5.2.1
สำหรับ PHP เวลาติดตั้งคุณจำเป็นต้อง บอก path ของ apache กับ mysql ด้วยครับ โดยตอนที่คุณบอก ก็คือตอนใช้ คำสั่ง configure นั่นเอง ตามนี้ครับ# tar xvfz php-5.2.1.tar.gz# cd php-5.2.1# ./configure –prefix=/usr/local/php5 —-with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr/local/mysql5# make# make installเป็นอันเสร็จพิธีทั้งหมด..
หลังจากนี้เราก็มาดูวิธีการ Start Service แต่ละตัวกันครับมาเริ่มที่
apache : /usr/local/apache2/bin/apachectl start ** อันนีเราสามารถเปลี่ยนได้เป็น start/stop/restart ครับ
mysql : /usr/local/mysql5/bin/mysqld_safe –user=mysql &
php : อันนี้ไม่ต้อง start ครับมันจะถูกผูกให้โดยอัตโมมัติ ตอนที่เรา compile นั่นเอง
คราวนี้เราก็มาดูกันครับว่า..ไอ้ที่เรา ติดตั้งไป มันใช้ได้เปล่า…ก็ให้ลอง เขียน script php ขึ้นมาซักอันครับเช่นphpinfo();?>save เป็นชื่อไฟล์ว่า noi.php (noi เป็นชื่อสาวครับ..ผมจีบอยู่ อิๆ) แล้วก็เอาไปวางไว้ที่ path /usr/local/apache2/htdocs/ หลังจากนั้นก็ไปเครื่องอื่น..แล้วลองใช้โปรแกรม Web Browser เรียกหน้าดังกล่าวดู เช่น http://192.168.168.12/noi.php
ถ้าได้หน้าตาเว็บเป็นแบบนี้ก็แสดงว่า..โอเคครับ
จบ..ครับ เดี๋ยวคราวหน้าจะมาพูดถึงการติดตั้ง ProFTFD กันพร้อมกับ ตัวอย่างการ Config สำหรับคราวนี้เอาไว้แค่นี้ก่อนละกันครับพี่น้องงงงงงงง สวัสดี

วันจันทร์ที่ 1 กันยายน พ.ศ. 2551

การ mount Handy drive

http://bluestulip.blogspot.com/2006/02/how-to-mount-usb-handy-drive-in-nix.html

mkdir /mnt/sdb1/
mount -t vfat /dev/sdb1/ /mnt/sdb/

การ mount Handy drive บน FreeBSD

บน FreeBSD 5.3 หรือสูงกว่านะครับ แต่คาดว่า 5.0 ก็น่าจะได้นะ

1. เสียบ handy drive ที่ server
2. ที่ command line พิมพ์ mount -t msdos /dev/da0s1 /mnt
2. cd /mnt เราก็จะเจอข้อมูลครับ

หมายเหตุ เมื่อ da0s1 คือ ชื่ออุปกรณ์ที่ freebsd รายงานออกมาให้เราทราบตอนทำขั้นตอนที่ 1
ส่วน /mnt คือไดเรกทรอรีที่เราต้องการชี้ไปยังข้อมูลที่ต้องการ

ผมคิดว่าก่อนดึง handy drive ออก สามารถใช้คำสั่ง

umount /dev/da0s1

หรือ

umount /mnt

ได้ครับ (ถ้าใช้คำสั่งเดียวกันกับ Linux นะครับ)

RH9 ก็ไม่ต่างกันนักครับ

mkdir /mnt/usbdisk
mount -t vfat /dev/sda1 /mnt/usbdisk

หรือจะเพิ่มออพชันด้วย เพื่อให้สามารถอ่านภาษาไทย และให้ผู้ใช้งานที่ไม่ใช่ root เขียนข้อมุลได้ด้วย

mount -t vfat /dev/sda1 /mnt/usbdisk -o iocharset=utf8,umask=000

mount /dev/da1st1 /mnt/hdd1 <<< hdd ตัวที่ ลง window 2k3 ไว้แล้วก็ แบ่ง เป็น c กะ d da1st1 = drive c da1st2 = drive d
แล้วก็ สร้าง /mnt/hdd1 ซะ
เสร็จแล้ว /chmod -R 777 /mnt/
หง่ะ แค่นั้น

Ref :: http://www.thaibsd.com/webboard/show.php?Category=thaibsd&No=1451&page=1