Saturday, 28 August 2010

การติดตั้ง Coova เพื่อใช้เป็น Web Login

 InstallCoovaChilli  
Install CoovaChilli

การติดตั้ง Coova เพื่อใช้เป็น Web Login

  1. เนื่องจาก Coova จะเป็น dhcp server เอง กรณีที่นำเครื่องเดิมมาติดตั้ง Coova เพิ่มจะต้องตรวจสอบว่าในเครื่องไม่มี dhcp server ทำงานอยู่ ถ้ามีการทำงานอยู่ จะต้องใช้คำสั่งหยุดดังนี้
  2. # service dhcpd stop
    # chkconfig dhcpd off 
  3. ในการติดตั้ง จะต้องกำหนดให้เครื่องซึ่งติดตั้ง Coova ทำหน้าที่เป็นเราเตอร์เพื่อ forward packet ทุกครั้งที่รีบูตเครื่อง โดยในการตั้งค่าจะต้องทำการแก้ไขแฟ้ม /etc/sysctl.conf
  4. # nano /etc/sysctl.conf
    เดิม             net.ipv4.ip_forward = 0
    แก้ไขเป็น     net.ipv4.ip_forward = 1 
  5. หลังจากขั้นตอนการติดตั้งในข้อ 2 หากต้องการให้ค่าที่เปลี่ยนแปลงทำงานได้ทันทีจะต้องกำหนดให้เครื่องทำการ forward packet โดยรันคำสั่ง
  6. # sysctl -p
  7. ในการติดตั้ง จะต้องกำหนดค่าการ์ดแลน eth1 ไม่ให้รับ dhcp จากเซิรฟ์เวอร์อื่นๆ
  8. # nano /etc/sysconfig/network-scripts/ifcfg-eth1
    ให้มีค่าดังตัวอย่างนี้
    DEVICE=eth1
    ONBOOT=yes
    BOOTPROTO=none 
  9. ทำการ Download Packet Coova โดยใช้คำสั่ง
  10. # cd /root
    # wget http://syslogserver.googlecode.com/files/coova-chilli-1.0.14.tar.gz
  11. ทำการแตก File โดยใช้คำสั่ง
  12. # tar zxvf coova-chilli-1.0.14.tar.gz
  13. เข้าไปยัง directory ที่ได้ทำการแตกไว้ในข้อที่ 6 โดยใช้คำสั่ง
  14. # cd  coova-chilli-1.0.14
  15. ทําการกําหนด Path สําหรับติดตั้งโดยใช้คําสั่ง
  16. # ./configure --sysconfdir=/etc --sbindir=/usr/sbin  --datarootdir=/usr/share  --libdir=/usr/lib  --docdir=/usr/share/doc/coova-chilli  --mandir=/usr/share/man
  17. ทําการติดตั้ง
  18. # make 
    # make install
  19. สำเนา File ที่อยู่ใน /etcโดยใช้คำสั่ง
  20. # cp /etc/chilli.conf /etc/chilli.conf.ori
  21. ทำการสร้าง File โดยใช้คำสั่ง
  22. # cp /etc/chilli/defaults /etc/chilli/config
  23. แก้ไขค่าคอนฟิกของ coova
  24. # nano  /etc/chilli/config 
    โดยแก้ไขดังนี้
    เดิม                    HS_NETWORK=10.1.0.0 แก้เป็น                 HS_NETWORK=192.168.5.0
    เดิม                    HS_UAMLISTEN=10.1.0.1
    แก้เป็น                 HS_UAMLISTEN=192.168.5.1
    เดิม                    HS_UAMSECRET=
    แก้เป็น                 HS_UAMSECRET=uamsecret  #ต้องตรงกับค่าในhotspotlogin.php
    เดิม                    HS_RADIUS=rad01.coova.orgแก้เป็น                 HS_RADIUS=127.0.0.1             
    เดิม                    HS_RADIUS2=rad01.coova.orgแก้เป็น                 HS_RADIUS2=127.0.0.1
    เดิม                    HS_RADSECRET=coova-anonymousแก้เป็น                 HS_RADSECRET=mykey      #ต้องตรงกับค่าsecret ในclients.conf
    เดิม                    HS_UAMALLOW=coova.orgแก้เป็น                 HS_UAMALLOW=192.168.5.0/24
    เดิม                    HS_UAMSERVER=coova.orgแก้เป็น                 HS_UAMSERVER=192.168.5.1
    เดิม                    HS_UAMFORMAT=https://\$HS_UAMSERVER/app/uam/chilli
    แก้เป็น                 HS_UAMFORMAT=https://192.168.5.1/hotspotlogin.php
    เดิม                    HS_UAMHOMEPAGE=http://\$HS_UAMLISTEN:\$HS_UAMPORT/www/coova.html
    แก้เป็น                 HS_UAMHOMEPAGE=http://192.168.5.1/welcome.html
    เดิม                    HS_UAMSERVICE=https://coova.org/app/uam/auth
    แก้เป็น                 HS_UAMSERVICE=https://192.168.5.1/hotspotlogin.php
  25. สร้างหน้า login ดังตัวอย่างนี้
  26. # nano  /var/www/html/welcome.html 
    ใส่หน้า login เบื้องต้นตามด้านล่าง
      Welcome to Our Hotspot, Wireless Network.title> </head> 
     
    

    TESTING ONLYfont>H1> <img src="chillispot.png"> <H3><font color="blue">Welcome to Our Hotspot, Wireless Network.font>H3> You are connected to an authentication and restricted network access point. <H3><a href="http://192.168.5.1:3990/prelogin"mce_href="http://192.168.5.1:3990">Click here to login</a>H3> Enjoy. </center> body> html>

  27. ดาวโหลดรูป chillispot.png จากอินเตอร์เน็ต แล้วคัดลอกไฟล์ไปไว้ใน /var/www/html ด้วยคำสั่งดังนี้
  28. # wget  -O /var/www/html/chillispot.png  http://syslogserver.googlecode.com/files/chillispot.png
  29. ทำการสร้างไฟล์ hotspotlogin.php และ hotspotlogin_popup.php โดยใช้งานคำสั่ง
  30. # cd /root/freeradius_webui/www
    # cp *  /var/www/html/
  31. ทำการแก้ไขไฟล์โดยเรียกใช้งานคำสั่ง
  32. # nano /etc/chilli/up.sh
  33. หลังจากเปิดไฟล์ up.sh แล้วทำการเพิ่มข้อความต่อไปนี้ต่อท้ายสุด
  34. # force-add the final rule necessary to fix routing tables 
    iptables -I POSTROUTING -t nat -o $HS_WANIF -j MASQUERADE
  35. ทำการ Start โดยใช้คำสั่ง
  36. # service chilli start
  37. สั่ง chkconfig เพื่อให้ chilli เริ่มทำงานโดยอัตโนมัติทุกครั้งที่บูตเครื่องด้วยคำสั่งนี้
  38. # chkconfig  chilli on 
  39. ทำการทดสอบการใช้งานโดยเครื่อง Client เปิดเว็บไซต์ในอินเตอร์เน็ต จะพบกับหน้าจอ login เพื่อถาม user, password

Friday, 6 August 2010

SFTP backup database อัตโนมัติ

ftp database อัตโนมัติ ทุก ๆ วัน โดยที่เราไม่ต้องมาสั่งงาน จะเป็นการ ftp ข้อมูลจาก freebsd ไปยัง freebsd อีกตัวหนึ่ง เพื่อเอาไว้ดึง Report
1. gen rsa key ขึ้นมา  เพื่อเอา  public key ไปไว้ในเครื่องที่เราต้องการจะ remote ไปนั่นเอง
mirror# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
1f:f8:e9:29:9f:a1:33:1b:be:5f:62:90:81:0d:28:6c root@mirror.bansang.ath.cx
The key's randomart image is:
+--[ RSA 2048]----+
| .   ..          |
|  E .  +         |
| . .  . o        |
|         +       |
|        S .      |
|         + o     |
|        . B .    |
|       .+= *     |
|        =O*      |
+-----------------+
2. เราจะได้ไฟล์ id_rsa และ  id_rsa.pub  อยู่ที่ /root/.ssh
mirror# cd .ssh/
mirror# ls
id_rsa          id_rsa.pub      known_hosts
3.copy id_rsa.pub ที่ได้ไปไว้ ใน server ปลายทาง ที่เราจะ remote ไปหา
mirror# scp id_rsa.pub root@192.168.254.4:~/.ssh/authorized_keys
Password:
id_rsa.pub                                    100%  408     0.4KB/s   00:00
mirror#
เรียบร้อย
4. สร้าง script
mirror# cd /home
mirror# pico sftpbackup.sh
#!/bin/sh
cd /home
HOST='192.168.254.4'
USER='kom'
PASSWD='ไม่บอก'
FILE='/usr/home/postgres_backup/Daily/*'
sftp  $HOST <
mget $FILE
quit
END_S
exit 0
mirror# chmod 777 sftpbackup.sh
mirror# ./sftpbackup.sh
Connecting to 192.168.254.4...
sftp>
sftp>
sftp> mget /usr/home/postgres_backup/Daily/*
Fetching /usr/home/postgres_backup/Daily/bansang39.sql to bansang39.sql
/usr/home/postgres_backup/Daily/bansang39.sql   3%   72MB  32.8MB/s   01:11 ETA
เรียบร้อย แค่นี้ก็จะได้ databse.sql มาไว้ที่เครื่อง
5. สร้าง script เพื่อ create database อัตโนมัติ
 mirror# pico restore.sh
#!/bin/sh
#su postgres
dropdb hos_v39
createdb -E UNICODE hos_v39
psql hos_v39< /home/bansang39.sql
rm /home/bansang39.sql
exit
 6.กำหนดให้ sftpbackup.sh และ restore.sh ทำงานเองโดยเพิ่มเข้าไปใน crontab ของ root และ postgres
# crontab -e
เพิ่มบรรทัดต่อไปนี้เข้าไป
@daily /home/sftpbackup.sh > /dev/null #daily backup
save และออกจาก crontab
ทีนี้ทุกๆ เที่ยงคืนเครื่องของเราก็จะทำการ backup ข้อมูลเองโดยอัตโนมัติครับ

Backup MySQL Database Method

การ backup database แบ่งออกเป็นสองประเภทหลักๆ ได้แก่
  1. Physical Backup - เป็นการ backup ข้อมูลโดยการ copy โครงสร้างข้อมูลมาทั้ง directory และ file ทั้งหมดนั่นเอง การ backup แบบนี้มีข้อดีคือสามารถ recovery คืนกลับได้รวดเร็ว และการ backup ก็ใช้เวลาน้อยกว่า Logical เนื่องจากเป็นเพียงการ copy file ธรรมดาๆ แต่มีข้อเสียคือการย้ายฐานข้อมูลจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งซึ่งเป็นคนละ OS หรือเป็น mysql คนละเวอร์ชั่น จะไม่สามารถกระทำได้ โดยปกติมักใช้ mysqlhotcopy(MyISAM), ibbackup (InnoDB) เป็นเครื่องมือในการ backup
  2. Logical Backup - เป็นการ backup ข้อมูลโดย export ข้อมูลทั้งหมดมาเป็นคำสั่ง SQL โดยมีการ CREATE TABLE และข้อมูลทั้งหมดใหม่ มีข้อดีคือสามารถโยกย้ายไปยังเครื่องอีกเครื่องอีกเครื่องหนึ่งได้ง่าย import ได้เลยทันที ไม่ว่าจะเป็น OS คนละตัวหรือไม่ก็ตาม โดยปกติแล้วมักใช้ mysqldump เป็นเครื่องมือในการ backup
ต่อไปเป็นรูปแบบการ backup แบ่งเป็น 4 แบบ
  1. Full Backup - backup database ขณะนั้นทั้งหมดทุกตาราง ข้อมูลทุกชิ้น การ Recover จะทำได้เร็วกว่า incremental เนื่องจากมีไฟล์เพียงไฟล์เดียว
  2. Incremental Backup - backup database เฉพาะการส่วนที่เปลี่ยนแปลง โดยการ backup แบบนี้ต้องมีไฟล์ full backup เป็นฐานก่อน จึงจะสามารถทำได้ การ Recover จะกินเวลามากกว่า Full Backup เนื่องจากต้อง recover ไฟล์ full backup ที่เป็นฐานก่อน แล้วจึงรัน recover ส่วนที่เปลี่ยนแปลง แต่หากมีการ backup บ่อยๆ และข้อมูลไม่มีการเปลี่ยนแปลงมากนัก วิธีนี้จะช่วยประหยัดพื้นที่ได้มากทีเดียว การ backup วิธีนี้จำเป็นต้องเปิดใช้งาน Binary Log
  3. Snapshot Backup - เป็นการ backup แบบ Logical ซึ่งเป็นในลักษณะคล้ายไฟล์ image ที่ใช้ backup ไฟล์ทั่วไปในเครื่อง เป็นการรวมไฟล์ทั้งหมด ณ เวลาหนึ่งๆ โดยจำเป็นต้องใช้ความสามารถของ OS หรือ third party software เช่น Veritas, LVM, or ZFS และ snapshot บางตัวอย่าง LVM สามารถสั่ง mount ข้อมูลออกมาเพื่อใช้เปรียบเทียบกับตัว master ได้ทันอีกด้วย
  4. Replication - เป็นการสร้าง database ขึ้นมาอีกตัวหนึ่งเรียกว่า slave ส่วน database ต้นฉบับจะเรียกว่า master โดย slave อาจอยู่ที่ server เดียวกับ master หรือคนละ server ก็ได้ มักใช้ Binary Log เข้าช่วยในการส่งข้อมูลการเปลี่ยนแปลงจาก master ไป slave เนื่องจากช่วยให้ค่อยๆ ส่งข้อมูลไปทีละน้อยๆ ได้ง่าย และหากต้องการ backup เป็นแบบ full หรือ incremental ต่อไปอาจ backup จากตัว slave ได้เลยโดยไม่จำเป็นต้องยุ่งกับตัว master ทำให้สะดวกต่อการใช้งานมาก อีกทั้งการสั่ง recover อาจ สั่งที่ตัว slave แล้วนำข้อมูลไปเปรียบเทียบกับ master ได้ทันที ค่อนข้างมีประสิทธิภาพดีมาก วิธีนี้อาจใช้คู่กับ Snapshot บางตัวได้อีกด้วย
สำหรับบทความนี้ จะสอนการ backup โดยใช้ mysqldump ไปจนถึง Incremental Backup ครับ จะไม่ครอบคลุมถึง Snapshot และ Replication
ขั้นตอนการ Backup แบบ Incremental (แก้ root และ password ในส่วนของ -u root -p password เป็น username, password ของคุณ)
  1. Enable Binary Log ด้วยการแก้ไขไฟล์ /opt/local/etc/my.cnf (หากไม่พบ กรุณาตรวจสอบ OS ที่ใช้ และลองหาดูว่าได้ติดตั้งตัว config mysql หรือก็คือ my.cnf ไว้ที่ใด) โดยเพิ่มบรรทัด log-bin = /var/log/mysql/binary.log เข้าไปภายใต้ [mysqld] เป็นการระบุตำแหน่งที่จะให้จัดเก็บ Binary Log
  2. สั่ง restart mysql แล้วตัว Mysql จะสร้างไฟล์ bin.000001 และไฟล์ใหม่ bin.000002 ให้ ณ ตำแหน่งที่ระบุไว้ในข้อ 1
  3. Backup แบบ Full Back up โดยใช้คำสั่ง
    mysqldump –flush-logs –master-data planet -u root -p password my_db | gzip -9 > fulldb.sql.gz
    จำเป็นต้องมี –master-data เพื่อเพิ่ม header พิเศษว่าเริ่มนับจาก Binary Log ไฟล์ใด และ –flush-logs เพื่อสั่งให้ขึ้นไฟล์ Binary Log ไฟล์ใหม่
  4. หากต้องการเก็บเป็นไฟล์ในรูป Logical (SQL Statement) ให้สั่ง
    cut_str=`echo “SHOW MASTER STATUS;” | mysql -u root -p password | grep bin`
    bin_file=${cut_str:0:10}
    mysqlbinlog $bin_file > logical.sql

    จะได้ไฟล์ logical.sql มา โดยคำสั่งส่วนนี้เป็นการสั่งให้แปลง Binary เป็น Logical เฉพาะไฟล์ Binary Log ไฟล์ล่าสุดเท่านั้น หากต้องการระบุไฟล์ Binary Log หลายๆ ไฟล์รวมกันอาจสั่งโดยตรงด้วยคำสั่ง
    mysqlbinlog  bin.000001 bin.000002 > logical.sql
  5. สำหรับการ Recover สามารถสั่ง recover ด้วยจุดของเวลาได้เลยด้วยคำสั่ง

    mysqlbinlog --stop-datetime="2005-04-20 9:59:59" \
    /var/log/mysql/bin.123456 | mysql -u root -p password
หมายเหตุ : สามารถสั่ง
echo “FLUSH LOGS” | mysql -uroot -p
ที่ shell เพื่อแทนการสั่ง –flush-logs ของ mysqldump ได้ เพื่อขึ้นไฟล์ Binary Log ไฟล์ใหม่โดยไม่ทำ Full Backup

Thursday, 5 August 2010

เปิดไฟล์ rar หรือ Extract ไฟล์ rar ภายใต้ Linux หรือ UNIX

Q. ไฟล์ทำอย่างไรเก็บ rar เปิดภายใต้ Linux / UNIX ระบบปฏิบัติการ? 

RAR ไฟล์ A. อยู่ในรูปแบบเก็บบีบอัดหากคุณได้ดาวน์โหลดไฟล์ rar จากอินเทอร์เน็ตคุณจะต้องเปิดออกหรือ unrar พวกเขา (แยกไฟล์ rar)
RAR เป็นรูปแบบแฟ้มที่เป็นเจ้าของการบีบอัดข้อมูลและการเก็บถาวรพัฒนาโดย Eugene Roshal
ภายใต้ Linux และ UNIX ใช้คำสั่งเรียก unrar โดย unrar เริ่มต้นไม่ได้ถูกติดตั้งบน Linux, FreeBSD หรือ UNIX oses คุณสามารถติดตั้งคำสั่ง unrar ด้วยความช่วยเหลือของ apt - get หรือ yum คำสั่ง 
(ดูด้านล่างสำหรับ Windows XP info)

ติดตั้งคำสั่ง unrar

ภายใต้ Debian Linux คุณจะต้องพิมพ์ apt - get ดังต่อไปนี้เพื่อติดตั้งโปรแกรม unrar : 
# apt-get install unrar
หากคุณใช้ Linux Fedora core yum แล้วใช้คำสั่งดังต่อไปนี้ (ดู การสนทนา ข้างล่าง) : 
# yum install unrar
หากคุณใช้ FreeBSD ใช้ : 
# pkg_add -v -r unrar
ถ้าของเหนือวิธีการไม่ทำงานให้คุณดาวน์โหลดแพคเกจไบนารีจากทางการ เว็บไซต์ rarlab : 
$ cd /tmp 
$ wget http://www.rarlab.com/rar/rarlinux-3.6.0.tar.gz
Untar file 
$ tar -zxvf rarlinux-3.6.0.tar.gz
unrar ทั้งสองและคำสั่ง rar อยู่ในไดเรกทอรีย่อย rar - เพียงไป rar directory : 
$ cd rar 
$ ./unrar
ตอนนี้และสำเนา rar unrar ยังไดเรกทอรี bin / 
# cp rar unrar /bin

วิธีใช้ unrar

คำสั่ง unrar สนับสนุนตัวเลือกต่างๆด้านล่างมีตัวเลือกทั่วไปที่คุณต้องใช้ทุกวัน

งาน : การเปิด rar แกะ () ในคำสั่งพิมพ์ไดเรกทอรีปัจจุบัน

$ unrar e file.rar
โปรดทราบว่าการเปลี่ยนชื่อไฟล์ file.rar ด้วยชื่อไฟล์จริงของคุณ

งานรายการ (l) ไฟล์ภายใน archive rar :

$ unrar l file.rar

งาน : การสกัด (x) ไฟล์ที่มีคำสั่งให้พิมพ์เส้นทางแบบเต็ม :

$ unrar x file.rar
(D) การทดสอบ t () ความสมบูรณ์ของข้อมูลที่เก็บไฟล์คำสั่งพิมพ์ : 
$ unrar t file.rar

Thursday, 8 July 2010

การกำหนดค่าทางเครือข่ายต่างๆ ผ่านทางหน้าต่าง Terminal

กรณีที่ผู้ใช้ต้องการกำหนดค่าทางเครือข่ายต่างๆ ผ่านทางหน้าต่าง Terminal โดยตรงสามารถทำได้เช่นเดียวกันโดยเข้าการเข้าไปแก้ไขไฟล์ต่างๆ เหล่านี้
o /etc/hosts ไฟล์สำหรับกำหนดชื่อโฮสต์ใช้ภายในเครือข่าย
o /etc/host.conf ไฟล์สำหรับเรียกใช้เนมเซิร์ฟเวอร์
o /etc/resolv.conf ไฟล์สำหรับตั้งค่าโดเมนเนม (DNS) ที่ใช้งานอยู่
o /etc/sysconfig/network ไฟล์สำหรับปรับตั้งชื่อเครื่องสำหรับใช้นอกเครือข่าย และหมายเลขของ Gateway
o /etc/sysconfig/network-scripts/ifcfg-eth0 ไฟล์สำหรับปรับรายละเอียดของ LAN card ใบที่ 1
o /etc/sysconfig/network-scripts/ifcfg-eth1 ไฟล์สำหรับปรับรายละเอียดของ LAN card ใบที่ 2 (กรณีมี LAN Card ติดตั้งอยู่สองใบ)
หลังจากกำหนดค่าทางเครือข่ายแล้วสามารถสั่ง Restart LAN Card ด้วยคำสั่ง
# service network restart [enter]
หรือกรณีต้องการตรวจสอบสถานะดูว่าตอนนี้เซอร์วิสอะไรถูกใช้งานอยู่บ้างสามารถใช้คำสั่ง
# service --status-all [enter]

Thursday, 24 June 2010

printk: 1 messages suppressed.


I find a lot of error log on my proxy server:
Jan 22 22:57:37 streams1 kernel: printk: 1 messages suppressed.
Jan 22 23:00:04 streams1 kernel: printk: 1 messages suppressed.
Jan 22 23:00:09 streams1 kernel: printk: 1 messages suppressed.
Jan 22 23:00:13 streams1 kernel: printk: 3 messages suppressed.
Jan 22 23:00:20 streams1 kernel: printk: 2 messages suppressed.
Jan 22 23:00:25 streams1 kernel: printk: 3 messages suppressed.
Jan 22 23:00:29 streams1 kernel: printk: 2 messages suppressed.
Jan 22 23:00:34 streams1 kernel: printk: 2 messages suppressed.
Jan 22 23:00:45 streams1 kernel: printk: 3 messages suppressed.
It’s normal after I change kernel parameters.
1.ip_conntrack_tcp_timeout
echo 180 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
2. ip_conntrack_max
echo 262144 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
3.gc_stale_time
echo 120   > /proc/sys/net/ipv4/neigh/default/gc_stale_time
4.gc_thresh1
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
5.gc_thresh2
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
6.gc_thresh3
echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
อีกตัวอย่าง
I am trying to troubleshoot messages piling up in my /var/log/messages on CentOS 5 that look like this:

Apr 18 10:04:01 sc16 kernel: printk: 3 messages suppressed.
Apr 18 10:04:06 sc16 kernel: printk: 2 messages suppressed.
Apr 18 10:04:14 sc16 kernel: printk: 3 messages suppressed.
Apr 18 10:04:17 sc16 kernel: printk: 1 messages suppressed.
Apr 18 10:04:25 sc16 kernel: printk: 3 messages suppressed.
Apr 18 10:04:31 sc16 kernel: printk: 1 messages suppressed.
Apr 18 10:04:39 sc16 kernel: printk: 2 messages suppressed.

The messages are supressed so I can't see what they are or what is causing them.

How can I disable printk supression?

I have already tried:
echo 0 > /proc/sys/kernel/printk_ratelimit_burst
echo 0 > /proc/sys/kernel/printk_ratelimit

They don't seem to disable it... Any ideas?

Monday, 7 June 2010

IPTABLES เป็น Firewall พื้นฐานของ Linux

IPTABLES เป็น Firewall พื้นฐานของ Linux เกือบทุก Distro และให้ประสิทธิภาพที่สูงมากในการ Filtering Traffic และ การป้องกันการ Attack ต่างๆ โดยที่จะมีตัวอย่างพอสังเขป ดังนี้
เปิดการใช้งาน IP Forward ป้องกัน Syn Flood และ อนุญาติให้มีการใช้งานแบบ Dynamic IP (ต่อเนต DSL ทั่วไป)
[root@localhost]#echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]#echo 1 > /proc/sys/net/ipv4/tcp_syncookies
[root@localhost]#echo 1 > /proc/sys/net/ipv4/ip_dynaddr
Drop Packet ก่อนหน้านี้ทั้งหมด[root@localhost]#iptables -F INPUT
[root@localhost]#iptables -F FORWARD
[root@localhost]#iptables -F OUTPUT
[root@localhost]#iptables -P INPUT DROP
[root@localhost]#iptables -P FORWARD DROP
[root@localhost]#iptables -P OUTPUT ACCEPT
[root@localhost]#iptables -A INPUT -i lo -j ACCEPT
อนุญาติเฉพาะ SSH, SMTP, DNS, Web Services, SSL และ POP3 ให้ผ่านเข้าออก
[root@localhost]#iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost]#iptables -A INPUT -p tcp --dport 22 --syn -j ACCEPT
[root@localhost]#iptables -A INPUT -p tcp --dport 25 --syn -j ACCEPT
[root@localhost]#iptables -A INPUT -p tcp --dport 53 --syn -j ACCEPT
[root@localhost]#iptables -A INPUT -p udp --dport 53 --syn -j ACCEPT
[root@localhost]#iptables -A INPUT -p tcp --dport 80 --syn -j ACCEPT
[root@localhost]#iptables -A INPUT -p tcp --dport 443 --syn -j ACCEPT
[root@localhost]#iptables -A INPUT -p tcp --dport 110 --syn -j ACCEPT
ป้องกันการ scan ports
[root@localhost]#iptables -N check-flags
[root@localhost]#iptables -F check-flags
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP:"
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS:"
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL ALL -j DROP
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH:"
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN:"
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags ALL NONE -j DROP
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST:"
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN:"
[root@localhost]#iptables -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
ป้องกันการ flood SSH (SSH Brute Force)
[root@localhost]#iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
[root@localhost]#iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 600 --hitcount 2 -j DROP
ห้าม ping[root@localhost]#iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j DROP
ห้าม traceroute[root@localhost]#iptables -A INPUT -p ICMP -i eth0 --icmp-type 11 -j DROP
Protect Syn Flood
[root@localhost]#iptables-N syn-flood
[root@localhost]#iptables -A syn-flood -i ppp0 -m limit --limit 75/s --limit-burst 100 -j RETURN
[root@localhost]#iptables -A syn-flood -j LOG --log-prefix "SYN-FLOOD: "
[root@localhost]#iptables -A syn-flood -j DROP
REDIRECT PORT 10080 to 80[root@localhost]#iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.xxx.xxx:10080
[root@localhost]#iptables -A FORWARD -p tcp -i ppp0 -d 192.168.xxx.xxx --dport 80 -j ACCEPT (192.168.xxx.xxx = ip ของเรา)
[root@localhost]#iptables -A FORWARD -p tcp -i ppp0 -d 192.168.xxx.xxx --sport 80 -j ACCEPT
Transparent Proxy
[root@localhost]#iptables -t nat -A PREROUTING -p TCP --dport 80 -j REDIRECT -to-ports 3128