วันอาทิตย์ที่ 31 มกราคม พ.ศ. 2553

Generate SSL Certificate

Generate SSL Certificate

Step 1: ขั้นตอนแรก Generate a Private Key

#openssl genrsa -des3 -out server.key 1024

ถ้าไม่ต้องการใส่ password ทุกครั้งที่ Restart apache ให้ใช้ command นี้นะครับ

#openssl genrsa -out server.key 1024

Step 2: Generate a CSR (Certificate Signing Request)

#openssl req -new -key server.key -out server.csr

**ในขั้นตอนที่สองนี้ ถ้าเราต้องการจะส่ง Certificate ของเราไปให้กับทาง CA นั้นจะต้องส่ง code ที่อยู่ใน file server.csr ไปนะครับ
เมื่อทาง CA ส่ง code กลับมาให้เราถึงจะ copy ไปใว้ใน file server.crt ครับ แต่ถ้าแค่ต้องการ Gen certificate ธรรมดาก็ทำตามขั้นตอนต่อไปได้เลย

Step 3: Remove Passphrase from Key
#cp server.key server.key.org
#openssl rsa -in server.key.org -out server.key

Step 4: Generating a Self-Signed Certificate

#openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Step 5: Installing the Private Key and Certificate

#cp server.crt /usr/local/apache/conf/ssl.crt
#cp server.key /usr/local/apache/conf/ssl.key

VirtualHost HTTP

NameVirtualHost *:80


ServerName "www.chana.com:80"
ServerAdmin "chana@chana.com"
DocumentRoot "/var/www/html/emailmarketer"
CustomLog /var/www/html/emailmarketer/logs/access_log common
ErrorLog /var/www/html/emailmarketer/logs/error_log


Options +Includes +ExecCGI
AllowOverride None
Order allow,deny
Allow from all

VirtualHost SSL

LoadModule ssl_module modules/mod_ssl.so
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin



ServerName "www.chana.com:443"
ServerAdmin "chana@chana.com"
DocumentRoot "/var/www/html/emailmarketer"
CustomLog /var/www/html/emailmarketer/logs/access_log common
ErrorLog /var/www/html/emailmarketer/logs/error_log

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key


Options +Includes +ExecCGI
AllowOverride None
Order allow,deny
Allow from all


SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

grep

grep -v ^$ squid.conf.ORG |grep -v ^# > squid.conf

วันอังคารที่ 26 มกราคม พ.ศ. 2553

Traffic Shaping on Linux Gateway with tc , iptables and ipp2p

modprobe ipt_ipp2p

tc qdisc del dev eth1 root <== eth1 = internal interface
tc qdisc add dev eth1 root handle 1: htb
tc class add dev eth1 parent 1: classid 1:1 htb rate 900kbit <== max dl 900 kbits

tc class add dev eth1 parent 1:1 classid 1:11 htb rate 300kbit ceil 750kbit prio 2 <== p2p dl 300-750 kbits
tc class add dev eth1 parent 1:1 classid 1:12 htb rate 300kbit ceil 750kbit prio 1 <== www dl 300-750 kbits
tc class add dev eth1 parent 1:1 classid 1:13 htb rate 100kbit ceil 150kbit prio 0 <== ssh dl 100-150 kbits

tc qdisc add dev eth1 parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev eth1 parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev eth1 parent 1:13 handle 13: sfq perturb 10

tc filter add dev eth1 parent 1:0 prio 2 protocol ip handle 11 fw flowid 1:11 <== handle match –set-mark
tc filter add dev eth1 parent 1:0 prio 1 protocol ip handle 12 fw flowid 1:12 <== flowid match classid
tc filter add dev eth1 parent 1:0 prio 0 protocol ip handle 13 fw flowid 1:13

iptables -A PREROUTING -t mangle -p tcp -j CONNMARK –restore-mark
iptables -A PREROUTING -t mangle -p tcp -m mark ! –mark 0 -j ACCEPT
iptables -A PREROUTING -t mangle -p tcp -m ipp2p –ipp2p -j MARK –set-mark 11 <== match and mark p2p
iptables -A PREROUTING -t mangle -p tcp -m mark –mark 1 -j CONNMARK –save-mark

iptables -A PREROUTING -t mangle -p tcp –sport 80 -j MARK –set-mark 12 <== mark http
iptables -A PREROUTING -t mangle -p tcp –sport 22 -j MARK –set-mark 13 <== mark ssh

วันอังคารที่ 19 มกราคม พ.ศ. 2553

Squid

ในการเขียนกฎของ proxy
ตัวอย่างการ authen

acl name proxy_auth REQUIRED
http_access allow name

# set up the acl name for the local network
acl localnetwork proxy_auth 192.168.1.0/24
# set up the acl name for user authentication
acl localusers proxy_auth REQUIRED

# set up all the denies for those not in the local network
http_access deny !localnetwork
# set up the user authentication ;http_access deny !localusers
http_access allow localusers
# set up the allows for the local network
http_access allow localnetwork
# deny anything that passes beyond this point
http_access deny all

จากกฎด้านบนนี้จะทำใครที่เข้าไม่ได้เพราะ ip นั้นไม่ได้อยู่ใน localnetwork และจะไม่สามารถเข้าสู่หน้าให้ทำการ login ได้
นอกเหนือจากนั้นจะปล่อยผ่าน ip ให้ทำการ authen โดยการถาม user,password และจำทำการ Denied ถ้าใส่ข้อมูลผิด


หากใครที่ไม่สามารถเข้าสู่การ authen ได้เกิดจาก http_access allow localusers rule
หากที่ไม่สามารถทำการ authen ผ่านได้จะติดที่ http_access deny all

Incorrect ACL formats

ตัวอย่างต่อไปนี้ไม่ถูกต้อง เพราะทุก user ที่อยู่ใน localnetwork นั้นสามารถ access ได้แล้วทำให้ไม่สามารถตรวจสอบการ Authen
# set up the allows for the local network
http_access allow localnetwork
# set up the user authentication
http_access allow localusers

ตัวอย่างต่อไปผิดเพราะ user ที่ผ่านการ authen ได้แล้วถูก deny all
# set up the user authentication
http_access allow localusers
# deny anything that passes beyond this point
http_access deny all

How Squid processes authentication

squid ใช้ sub-processes ในการ process การ Authen ต้องการหลีกเลี่ยงโดยการ block โดยใช้ slow connection
การ authen ใช้ sub processes ในการติดต่อกับ squid ซึ่งใช้ unix pipe และ squid โดยผ่านทาง stdin , stdout
sup-process จะตอบกลับเป็น "OK","ERR" ขึ้นอยู่กับ สถานะของการ authen

เหตุว่าทุกครั้งที่มีการร้องขอจำเป็นมีการ authen. squid จะทำการเปรียบเทียบ user,password ตามว่าถูกต้องหรือไม่และ squid
จะส่งการร้องขอเพื่อทำการ authen เพียงแค่หนึ่งครั้งสำหรับการตรวจสอบ

แต่ในความเป็นแล้วมันถูกใช้งานกับหลาย user เพื่อทำการแชร์ในการ login.squid ใช้ splay tree ในการเช็คและไม่ตอบกลับถ้าเกิด
การซ้ำกันของ user

authen hearders ถูกใช้ในครั้งแรกโดย proxy ที่มันร้องขอ และบางครั้งมันไม่จำเป็นต้องใช้
ในทางกลับกัน ACL เราสามารถใช้ http_access allow localusers เป็น http_access deny !localusers.

วันอังคารที่ 12 มกราคม พ.ศ. 2553

SAN (Storage Area Network)

SAN (Storage Area Network) เป็นระบบการจัดเก็บข้อมูลโดยมีการแยก disk ออกมาจาก server หลักเพื่อการทำงานที่เร็วขึ้น เนื่องจากสามารถใส่ disk ได้เยอะ มีหน่วยประมวลผลในตัวเอง และลดข้อจำกัดเรื่องการขยายพื้นที่หรือการใช้ resource (disk) ร่วมกัน รวมถึงมีการนำ Storage เหล่านี้มาทำ emulate เป็น Virtual Tape เพื่อใช้ในการ backup ข้อมูลที่เร็วกว่า Tape ทั่วๆ ไป

ปัจจุบันการต่อเชื่อมของ SAN จะมี 2 รูปแบบ หรือ 2 Protocol คือ Fibre Channel Protocol และ iSCSI

- FC จะเป็นการต่อเชื่อมโดยใช้สายไฟเบอร์ในการเชื่อมต่อและจะต้องมี SAN Switch โดยมีความเร็วในการรับส่งข้อมูลที่ 4Gbps และ 8Gbps รวมถึงต้องมี interface card ที่เรียกว่า Host Bus Adapter (HBA)

- iSCSI จะเชื่อมต่อโดยใช้สาย LAN (RJ45) สามารถใช้ Network Switch เดิมที่มีอยู่ได้เลย ความเร็วขึ้นอยู่กับ network ที่ใช้ว่าเป็น 1Gbps หรือ 10Gbps โดยสามารถใช้ LAN Card เดิมที่มีอยู่ก็สามารถใช้งานได้ โดยจะต้องลง software iSCSI initiator (จะใช้ความสามารถของ CPU และ memory ของ server ในการประมวลผล) หรือใช้ iSCSI adapter ก็ได้ (ราคาพอๆ กับ HBA)

ปัจจุบันผู้ผลิต SAN Storage มีหลายยี่ห้อ ที่ดังและเป็นที่รู้จัก จะมี EMC, HP, IBM, SUN, NetApp, HDS
ถ้าเป็น SAN Switch จะมี Brocade, Cisco
HBA card หรือ iSCSI card จะมี Qlogic, Emulex

วันศุกร์ที่ 8 มกราคม พ.ศ. 2553

Software LoadBalance

Piranha is the IP Load Balancing solution in Redhat Enterprise Linux (layer-3 switching)
IPVS implements transport-layer load balancing (layer-4 switching)
KTCPVS implements application-level load balancing (layer-7 switching)

วันพฤหัสบดีที่ 7 มกราคม พ.ศ. 2553

device mapper multipathing บน SAN/NAS

เป็นบทความเก่าเอามาปัดฝุ่นใหม่ครับ เนื่องจากคิดว่าบางท่านอาจจะไม่ทราบว่าเอาไว้ืทำอะไร device-mapper multipathing มีไว้เพื่อใช้งานเพื่อทำ multipathing ควบคู่กับอุปกรณ์ที่เป็นพวก storage ครับ เช่น SAN หรือ NAS ครับ โดยเจ้าตัว device-mapper multipathing มีความสามารถที่จะทำงานในลักษณะ Load-Balance หรือ Fail-Over เพื่อใช้ในการ access storage ครับ ขอยกตัวอย่างเพื่อไม่เป็นไม่ให้งงกันไปใหม่แล้วกันนะครับ
ตัวอย่าง เรามีอุปกรณ์ SAN อยู่และการเชื่อมต่อกับอุปกรณ์จะใช้สาย Fiber 2 เส้นด้วยกัน(เพื่อป้องการเหตุที่สายอีกเส้นใช้งานไม่ได้)เมื่อเชื่อมต่อกับ Linux เรียบร้อยแล้ว Linux จะเห็น HDD จากตัว Linux เพิ่มเป็น 2 เท่าจากเดิม เนื่องจากว่ามีสาย Fiber 2 เส้นเชื่อมต่อไปยัง SAN นั้นเอง ดังนั้นถ้าเราแบ่งเนื่อที่ให้กับ Linux 1 LUN ด้วยกัน (LUN A) Linux จะเห็น HDD เป็น 2 ลูก คือ 2 ลูกของ LUN A เมื่อทำการเชคดู HDD แล้วจะพบว่ามี device sda, sdb ด้วยกัน แต่ sda และ sdb เป็น LUN เดียวกันทำให้เมื่อเวลา access จะสามารถ access ตัวใดก็ได้ ดังนั้นถ้าเรา Mount sda ขึ้นมาแต่ใช้ไปนานๆเกิดสายของ sda เสียขึ้นมาก็ไม่สามารถใช้งานได้จะต้อง Mount sdb ขึ้นมาแทน ด้วยเหตุนี้จึงมีโปรแกรมพวก multipath เกิดขึ้น เพื่อสร้าง virtual device สำหรับ sda, sdb เพื่อเป็นตัวแทนของ sda, sdb โดยที่นิยมใช้งานกันก็จะมี Option Fail-Over และ Load-Balance โดยในบทความนี้จะกล่าวถึงการ configure device-mapper multipathing แบบ Fail-Over ครับ โดยมีขั้นตอนดังนี้

แก้ไขไฟล์ /etc/multipath.conf โดยเอาใส่ comment เข้าไปดังตัวอย่างข้างล่าง

# devnode_blacklist {
# devnode "*"
# }
ต่อจากนั้น ucomment
defaults {
multipath_tool "/sbin/multipath -v0"
udev_dir /dev
polling_interval 10
default_selector "round-robin 0"
default_path_grouping_policy failover
default_getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
default_prio_callout "/bin/true"
default_features "0"
rr_min_io 100
failback immediate
}
blacklist {
wwid 26353900f02796769
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"

}
ต่อมา Save file
จาก config ด้านบนการทำงานของ multipathed จะเป็นแบบ failover
ต่อจากนั้นพิมพ์คำสั่งตามขั้นตอนต่อไปนี้ตามลำดับ

modprobe dm-multipath
modprobe dm-round-robin
service multipathd start
multipath -v2

พิมพ์คำสั่งด้านล่างเพื่อให้เวลา reboot ใหม่ก็ยังสามารถใช้งานได้

chkconfig multipathd on

จาก config ข้างต้นระบบจะสร้าง device /dev/dm-X เมื่อ X คือ multipathed group
และถ้าต้องการ fdisk เราจะไม่สามารถ fdisk ที่ /dev/dm-X ได้ ดังนั้นจึงต้องไปทำ
fdisk กับ device จริง เช่น /dev/sda เป็นต้น

ที่มาhttp://www.ezylinux.com/hdd-management/


วันจันทร์ที่ 4 มกราคม พ.ศ. 2553

สร้าง Database บน MySql และ สร้าง User ใช้งาน

#mysqladmin -u username -p create databasename
หรือ
mysql>CREATE DATABASE databasesname CHARACTER SET utf8 COLLATE utf8_general_ci;

หลังจากนั้น login เข้าไปใน MySql

mysql>GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON databasename.* TO 'username'@'localhost' IDENTIFIED BY 'password';

เท่านี้ก็จะได้ User ที่สามารถใช้ร่วมกับ Database ที่สร้างขึ้น

mysql#>FLUSH PRIVILEGES

mysql>DELETE FROM mysql.user WHERE User = 'user';