วันศุกร์ที่ 22 สิงหาคม พ.ศ. 2551

โปรแกรม portsentry

พอดีมีประสบการณ์ในด้านนี้มาบ้างเลยอยากจะแนะนำให้เพื่อนๆพี่ๆน้องได้ลองทำ ดูกัน ก็เลยนำเอาการ config โปรแกรม Portsentry มาให้ดูกัน หวังว่าคงจะเป็นประโยชน์กันบ้างไม่มากไม่น้อย ซึ่งขึ้นอยู่กับการนำไปประยุกต์กับระบบของคุณเอง

โปรแกรม portsentry เป็นโปรแกรมที่สร้างขึ้นเพื่อตรวจสอบการ scan port แบบ real time สามารถตรวจจับการบุกรุกมายัง port ต่างๆที่ server เปิดให้บริการอยู่ บางคนตั้ง server แบบไม่ระมัดระวังพอติดตั้ง NOS เสร็จก็สนใจแต่เรื่องการ config ในส่วนที่จะให้บริการกับลูกข่ายเท่านั้น สามารถหา download โปรแกรมนี้ได้จาก www.psionic.com ปัจจุบันได้เปลี่ยนแปลงชื่อโปรแกรมไปเป็นชื่ออื่นแล้ว ลองศึกษาจากเวปไซต์ดังกล่าวดูนะคับ

สมมุตว่าผมไป download เจ้าโปรแกรมนี้มาแล้วที่มีชื่อว่า portsentry-1.1.tar.gz

# cd /tmp
# gzip -cd portsentry-1.1.tar.gz | tar xvf -
# cd portsentry-1.1
# pico Makefile (เข้าไปแก้ไขไฟล์ compile โดยแก้ไขตามนี้นะครับ)

CC = cc แก้ไขเป็น
CC = egcs
(ใน server ต้องติดตั้งโปรแกรม egcs ไว้ก่อน) หรือสามารถหาติดตั้งได้ใน /usr/ports

CFLAGS = -O -Wall แก้เป็น
CFLAGS = -O3 -march=i386 -mcpu=i386 -funroll-loops -fomit-frame-pointer -Wall

INSTALLDIR=/usr/local/psionic แก้ไขเป็น
INSTALLDIR=/etc

เสร็จแล้วทำการ save ไฟล์โดยการ Ctrl+X แล้วกด Y
หลังจากนั้นแก้ไขไฟล์ portserntry_config.h

#pico portsentry.h แล้วแก้ไขตามนี้นะครับ

define CONFIG_FILE "/usr/local/psionic/portsentry/portsentry.conf" แก้ไขเป็น
define CONFIG_FILE "/etc/portsentry/portserntry.conf"
เสร็จแล้วทำการ save ไฟล์โดยการ Ctrl+X แล้วกด Y

แล้วเริ่มต้นการ compile โดยใช้คำสั่งดังนี้
# make linux
# make install

ทำการลบไฟล์ต้นฉบับทิ้ง
# cd /tmp
# rm -rf portsentry*

หลังจากนั้นเข้าไปแก้ไขไฟล์ config ของ portsentry ใน path /etc/portsentry/

# pico portsentry.conf
เพิ่มคำสั่งพวกนี้เข้าไปในไฟล์ สามารถใส่ตรงบรรทัดไหนในไฟล์ก็ได้

# กำหนดหมายเลข port ที่ป้องกันการถูก scan
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,31337,32771,32772,32774,40421,49724,54320"

#กำหนดหมายเลข Ports ว่างที่มักถูกผู้บุกรุก scan และใช้โจมตี
ADVANCED_PORTS_TCP="1023"
ADVANCED_PORTS_UDP="1023"

#กำหนด ports ต้องห้ามไม่ให้เข้าในระบบเพราะว่าเป็น port ที่ทำงานขณะที่เครื่อง boot คือบริการ ident(113) , NetBios(137-138) , RIP(520) , bootp broadcast(67)
ADVANCED_PORTS_TCP=”113,139”
ADVANCED_PORTS_UDP=”520,138,137,67”

#กำหนดตำแหน่งที่อยู่ของไฟล์ต่างๆ
IGNORE_FILE=”/etc/portsentry/portsentry.ignore”
HISTORY_FILE=”/var/log/portsentry/portsentry.history”
BLOCK_FILE=”/var/log/portsentry/portsentry.blocked”

#กำหนดค่าที่จะป้องกัน
#0=ไม่ block การ scan TCP/UDP
#1=block ทั้ง TCP_UDP
#2=block external command เท่านั้น
BLOCK_UDP=”1”
BLOCK_TCP=”1”

#คำสั่งนี้ไม่ให้ผู้อื่นส่งคำสั่งมาเพิ่ม route ใหม่ในระบบ
KILL_ROUTE=”/sbin/route add –host $TARGET$ reject”
KILL_HOSTS_DENY=”ALL: $TARGET$”

กำหนดจำนวน ports ที่ยอมให้ connect เข้ามาในระบบได้มีค่าตั้งแต่ 1-2 ถ้ากำหนดเป็น 0 จะเป็นการสั่งให้บันทึกค่าใน log file ทันทีเมื่อพบว่ามีการถูก scan port เพื่อให้ผู้ดูแลระบบทราบ
SCAN_TRIGGER=0

#กำหนดข้อความแจ้งเตือนว่ามีการบุกรุก อันนี้แล้วแต่นะครับตามความต้องการของผู้ดูแลระบบ
PORT_BANNER=”** UNAUTHORIZED ACCESS PROHIBITED ** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY”

หลังจากแก้ไขและทำการตรวจสอบความถูกต้องแล้ว ให้ทำการ save ไฟล์ แล้วทำการกำหนด Permission ให้ไฟล์ด้วย
#chmod 600 /etc/portsentry/portsentry.conf

ตรวจสอบไฟล์ portsentry.ignore ดูว่ามีค่า IP Address ตามตัวอย่างหรือไม่ ถ้าเป็น Version ใหม่โปรแกรมจะเพิ่มค่า IP Address ให้เองไม่ต้องเข้าไปแก้ไขอะไร
#pico /etc/portsentry/portsentry.ignore
127.0.0.1
0.0.0.0

จากนั้นกำหนด Permission เป็น 600
#chmod 600 /etc/portsentry/portsentry.ignore

สร้าง Scripts ไปไว้ใน /etc/rc.d/init.d ชื่อ portsentry
#pico /etc/rc.d/init.d/portsentry (path ตามที่คุณได้ติดตั้ง init เอาไว้นะครับ ลองหาดูอาจจะไม่เหมือนของผมก็ได้)

แก้ไขในไฟล์ portsentry ตามนี้นะครับ

#/bin/sh
#
#portsentry start the portsentry port scan detector
#
#source function library
./etc/rc.d/init.d/functions
#get config
./etc/sysconfig/network
#check that networking is up
if [${NETWORKING}=”no”]
then
exit 0
fi
[ -f /usr/sbin/portsentry] || exit 0

#see how we were called
case “$1” in
start)
echo –n “Starting Port Scan Detector: ”
if [ -s /etc/portsentry/portsentry.modes] ; then
modes=’cut –d “#” –f (ต่อบรรทัดล่างด้วย)1 /etc/portsentry/portsentry.modes’
else
modes=”tcp udp”
fi
for i in $modes ; do
portsentry -$i
echo –n “$i”
done
echo
touch /var/lock/subsys/portsentry
;;
stop)
echo –n “Stopping Port Scan Detector: ”
killproc portsentry
echo
rm –f /var/lock/subsys/portsentry
;;
status)
status portsentry
esac
exit 0

จากนั้นกำหนด permission ให้ไฟล์ scrips นี้
#chmod 700 /etc/rc.d/init.d/portsentry

ทำการเพิ่ม script ให้ระบบเพื่อสั่งให้ทำงานขณะที่เครื่อง reboot
#chkconfig --portsentry
#chkconfig --level 345 portsentry on

สั่งให้โปรแกรมทำงาน
#/etc/rc.d/init.d/portsentry restart

วันพฤหัสบดีที่ 21 สิงหาคม พ.ศ. 2551

all-in-one 2 (portsentry+iptables+apt-proxy+squid3)

http://www.thaitux.info/book/export/html/479

ปรับตั้ง interfaces
# vi /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.1.3
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

auto eth1
iface eth1 inet static
address 192.168.5.3
netmask 255.255.255.0
network 192.168.5.0
broadcast 192.168.5.255
gateway 192.168.5.1

เพื่อให้เครือข่ายภายในสามารถออกสู่ภายนอกได้ โดยใช้เซิร์ฟเวอร์ตัวนี้เป็นเกตเวย์ จะตั้งให้ฟอร์เวิร์ดไอพีได้
# vi /etc/sysctl.conf

...
net.ipv4.ip_forward=1

ทำให้มีผลทันที
# echo 1 > /proc/sys/net/ipv4/ip_forward

portsentry + iptables พื้นฐาน

ติดตั้ง
# aptitude install portsentry iptables

สำหรับ portsentry ใช้ค่าปริยายทั้งหมด

สำหรับ iptables จะทำเป็นแบบสคริปต์ ไว้รันเวลาเปิดเครื่อง (จริง ๆ คือ รันตอนอินเทอร์เฟส eth1 เปิดขึ้นมาใช้งาน)
มีการเพิ่มกฎในการบล๊อกไอพีนิดหน่อย ทำให้ลดภาระ web server ในการกรองไอพี

เตรียมไฟล์ข้อมูล
# mkdir -p /sys1/sysb/etc/iptables
# ln -sf /sys1/sysb/etc/iptables /etc
# echo "#BLOCKED IP LIST" >> /etc/iptables/block_ip

สร้างสคริปต์ไว้เรียกตอนเปิด eth1 คือ /usr/local/sbin/d.eth1-iptables
# vi /usr/local/sbin/d.eth1-iptables

#!/bin/bash
# SIMPLE IPTABLES
INTERFACE=eth1
INT_NET=192.168.0.0/16
BLOCK_FILE=/etc/iptables/block_ip

#DELETE OLD RULES
iptables -F > /dev/null
iptables -F -t nat > /dev/null

#NAT
iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE

#BLOCK SPECIFIC IP
#SORT IP LIST IF DATA CHANGED
touch $BLOCK_FILE "$BLOCK_FILE.bak"
cmp -s "$BLOCK_FILE" "$BLOCK_FILE.bak"
if [ $? -ne 0 ]; then
TEMP_FILE=/tmp/block_ip
touch $TEMP_FILE
mv $BLOCK_FILE "$BLOCK_FILE.bak"
cat "$BLOCK_FILE.bak" | while read LINE; do
if [ ${LINE:0:1} == "#" ]; then
echo $LINE >> $BLOCK_FILE
else
echo $LINE >> $TEMP_FILE
fi
done
cat $TEMP_FILE | sort >> $BLOCK_FILE
rm $TEMP_FILE
fi
#DO BLOCK
cat $BLOCK_FILE | grep -v "#" | cut -d \ -f 1 | while read IP; do
iptables -A INPUT -s $IP -j DROP
done

#BLOCK ssh INTRUDER BY RATE-LIMIT 4 FOR 600 SECONDS
#FROM http://www.debian-administration.org/articles/187
iptables -I INPUT -p tcp --dport 22 -i $INTERFACE -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i $INTERFACE -m state --state NEW -m recent --update --seconds 600 --hitcount 4 -j DROP

#FORWARD INTERNAL
iptables -A FORWARD -s $INT_NET -j ACCEPT
iptables -A FORWARD -d $INT_NET -j ACCEPT

#DROP REST
iptables -A FORWARD -s ! $INT_NET -j DROP

# chmod 755 /usr/local/sbin/d.eth1-iptables

สร้างไพล์ข้อมูลไอพีที่ต้องการบล๊อก ชื่อ block_ip เอาไว้ที่ /etc/iptables
# vi /etc/iptables/block_ip

#BLOCKED IP LIST
WWW.XXX.YYY.ZZZ #COMMENT
...

เปลี่ยนตัวเลขเอาตามจริงนะครับ
เวลาเราจะเพิ่มไอพี ก็มาแก้ไขที่ไฟล์นี้

นำกฎมาใช้ตอนเปิดเครื่องใหม่ ผ่าน /etc/network/interfaces
# vi /etc/network/interfaces

...
auto eth1
iface eth1 inet static
address 192.168.5.3
netmask 255.255.255.0
network 192.168.5.0
broadcast 192.168.5.255
gateway 192.168.5.1
post-up /usr/local/sbin/d.eth1-iptables
pre-down /sbin/iptables-save > /etc/iptables/rules-backup

(เวลาจะปรับปรุงสคริปต์ เอาเนื้อความจาก /etc/iptables/rules-backup มาใช้อ้างอิงดูในการปรับปรุงได้)

สำหรับครั้งแรก ต้องรัน 1 ครั้ง ครั้งต่อไปไม่ต้องแล้ว จะรันผ่านอินเทอร์เฟส eth1 เอง
# /usr/local/sbin/d.eth1-iptables

ทำเองได้ Centralized log แถมวิวได้ด้วย PHP SYSLOGVIEWER

http://www.tpit.co.th/index.php?view=article&catid=7%3Ahowto&id=9%3A-centralized-log-php-syslogviewer&tmpl=component&print=1&page=&option=com_content&Itemid=10

ทำเองได้ centralized log แถมวิวได้ด้วย php syslogviewer Print
Written by Administrator
Thursday, 10 July 2008 02:35

ภาคแรก ทำเองได้ Centralized log แถมวิวได้ด้วย PHP SYSLOGVIEWER

หลาย ๆ องค์กรเริ่มจะตื่นตัวกับพรบ.ว่าด้วยการกระทำผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. ๒๕๕๐ ตามมาตรา ๒๖ บัญญัติให้ผู้ให้บริการต้องเก็บข้อมูลจราจรคอมพิวเตอร์ไว้ไม่ต่ำกว่า ๙๐ วัน แต่ไม่เกิน ๑ ปีไปแล้ว วันนี้จะแนะนำวิธีง่าย ๆ ที่จะทำ centralized log เซิร์ฟเวอร์ด้วยตนเอง ด้วยซอฟต์แวร์ open sourceดูสิว่าจะสู้ผลิตภัณฑ์ต่างประเทศราคาหลายแสนได้หรือไม่

นับเป็นข่าวดีมากที่ผู้เขียนได้ค้นพบซอฟต์แวร์ที่ใช้ทำการวิว ค้นหาข้อมูล เพื่อจะได้ทำรายงานเบื้องต้นได้ใหม่ ชื่อว่า “php syslogviewer” แถมเพิ่งจะอัพเดทล่าสุดเมื่อปีกลาย แจ่มทีเดียว ใครหลายคนอาจเคยได้ยินชื่อ phpsyslog-ng มาก่อน ลืมไปได้เลยครับขี้เหร่มาก

ซอฟต์แวร์ที่ใช้งาน

syslog-ng-2.0.0

phpsyslogviewer-7.2.1

speedupd-7.3.2

ผู้เขียนทดสอบโดยติดตั้งบนระบบปฏิบัติการ debian etch 4.0 รันในระบบเวอร์ชอลแมชชีน โดยซอฟต์แวร์ xen opensource ใช้เคอร์เนลเวอร์ชั่น 2.6.18-4-xen-686 นับว่ามีเสถียรภาพสูงมาก ๆ ครับ

ขั้นตอนที่ 1 เริ่มกันเลยดีกว่า หลังจากติดตั้งโอเอสเรียบร้อยให้ทำการติดตั้งซอฟต์แวร์ syslog-ng-2.0.0 โดยใช้แพ็คเกจของโอเอสเองดังนี้

# apt-get install syslog-ng

ขั้นตอนที่ 2 ดาวน์โหลดซอร์สโค๊ดจาก sourceforge ตามลิงค์ข้างล่างนี้

# wget http://jaist.dl.sourceforge.net/sourceforge/phpsyslogviewer/phpsyslogviewer-7.2.1.tar.bz2

# wget http://jaist.dl.sourceforge.net/sourceforge/phpsyslogviewer/speedupd-7.3.2.tar.bz2


ขั้นตอนที่ 3 แตกแพ็คเกจออกถ้าใครยังไม่ได้ลงโปรแกรม bzip2 ให้ทำการลงซะก่อนมิฉะนั้นจะแตกไฟล์ออกไม่ได้และทำการติดตั้งชุด lamp สำหรับเครื่องแม่ข่ายซะก่อน ขั้นตอนการติดตั้ง lamp อาจจะใช้เวลาสักนิดนึง หากใครมีประสบการณ์คงหาทางแก้ปัญหาได้จากเอกสารอื่น เนื้อหาในบทความนี้ผู้เขียนขอเล็งไปที่ซอฟต์แวร์หลัก ๆ ของระบบการจัดการข้อมูลการจราจรคอมพิวเตอร์ ตามพรบ.เป็นหลัก อาจจะทำให้มือใหม่หงุดหงิดบ้าง ดังนี้

# apt-get install bzip2

# tar xjvf phpsyslogviewer-7.2.1.tar.bz2

# cd phpsyslogviewer-7.2.1

# apt-get install mysql-client mysql-server apache2 php5

# apt-get install php5-mysql php5-ldap php5-cli libapache2-mod-php5

# apt-get install phpmyadmin

ขั้นตอนที่ 4 ในโฟลเดอร์ install จะมีสคริปที่ใช้ติดตั้งตารางต่าง ๆ ให้กับฐานข้อมูล เราจะต้องทำการสร้างฐานข้อมูลเสียก่อน มิฉะนั้นจะพบกับข้อผิดพลาดและไม่สามารถรันสคริปดังกล่าวผ่านได้

# mysql -u root -p

mysql > create database syslogng;

mysql > exit;

# mysql -u root -p syslogng <>

ขั้นตอนที่ 5 ปรบมือให้กับตัวเองเราผ่านพ้นขั้นตอนที่ต้องระวังไปขั้นหนึ่ง จากนั้นกำหนดค่าเพื่อสร้างบัญชีรายชื่อผู้ใช้และรหัสผ่านง่าย ๆ ก็ใส่ค่าข้อมูลของผู้ใช้ รหัสผ่าน ชื่อโฮสต์ และ ฐานข้อมูล คิดว่าไม่น่ายาก ดังนี้

# vi install/newuser.sql.php

# php install/newuser.sql.php

# php install/newuser.sql.php | mysql -u root -p syslogng

ขั้นตอนที่ 6 จัดการเวบไดเรคทอรีเพื่อให้สามารถเรียกดูข้อมูลผ่านเวบบราวเซอร์ ใครที่มีประสบการณ์สร้างเวบไซต์มาก่อน งานนี้กินเรียบครับ ทำตามขั้นตอนได้เลย

# cp -R htdocs /var/www/phpsyslogviewer

# vi /var/www/phpsyslogviewer/config.php

# chown root:www-data /var/www/phpsyslogviewer/config.php

# chmod 440 /var/www/phpsyslogviewer/config.php

ขั้นตอนที่ 7 ทดลองเปิดหน้าเวบไซต์ดูหน่อยว่าหน้าตาเป็นอย่างไร ไปที่ http://xxx.xxx.xxx.xxx/phpsyslogviewer

php syslogviewer

จะเห็นว่าหน้าตาดูดีทีเดียว

ขั้นตอนที่ 8 ติดตั้งแพ็คเกจ speedupd-7.3.2 เพื่อเร่งความเร็วให้เอนจิ้นป้อนข้อมูลสู่ฐานข้อมูล mysql ขั้นตอนนี้อาจยุ่งยากนิดหน่อย เพราะต้องทำการคอมไพล์แพ็คเกจด้วยตัวเองใหม่ แต่ไม่เกินความสามารถของเราหรอกครับ ขอย้ำว่าต้องทำนะครับขั้นตอนนี้ มิฉะนั้นใครที่เคยใช้ phpsyslog-ng จะรู้ซึ้งว่าอึดอัดเป็นอย่างไร

# tar xjvf speedupd-7.3.2.tar.bz2

# cd speedup-7.3.2

# apt-get install debhelper cmake libdaemon-dev libconfuse-dev fakeroot

# apt-get install build-essential libmysqlclient15-dev

# dpkg-buildpackage -rfakeroot

ขั้นตอนที่ 9 หลังจากผ่านขั้นตอนที่ 8 เราจะได้แพ็คเกจตระกูล debian ชื่อว่า speedupd_7.3.0_i386.debให้ติดตั้งแพ็คเกจและกำหนดค่าให้กับไฟล์ speedupd.confดังนี้

# cd ..

# dpkg -i speedupd_7.3.0_i386.deb

# vi /etc/speedupd.conf

# /etc/init.d/speedupd start

ขั้นตอนที่ 10 สบายใจไปอีกขั้นหนึ่งครับ ต่อไปเป็นการกำหนดค่าให้กับ syslog-ng ทำการส่งค่าไปเก็บยังฐานข้อมูลทำตามนี้เลยครับ ง่าย ๆ ผู้เขียนตัดวิธีการเก็บข้อมูลการจราจรคอมพิวเตอร์ส่วนอื่นออก เพื่อให้สามารถทำความเข้าใจได้ง่าย ๆ ครับ หากใครมีไฟล์คอนฟิคเก่าอยู่แล้วก็เพิ่มเติมเฉพาะส่วนที่ต้องการเก็บข้อมูลใน ฐานข้อมูลได้เลยครับ

# cd /etc/syslog-ng

# cp syslog-ng.conf syslog-ng.conf.org

# vi syslog-ng.conf

options {

recv_time_zone (+07:00);

send_time_zone (+07:00);

sync (0);

time_reopen (100);

log_fifo_size (1000);

long_hostnames (off);

use_dns (no);

use_fqdn (no);

create_dirs (yes);

chain_hostnames(yes);

keep_hostname (yes);

};

source s_sys {

file ("/proc/kmsg" log_prefix("kernel: "));

unix-stream ("/dev/log");

internal();

udp(ip(0.0.0.0) port(514));

tcp(ip(0.0.0.0) port(514) keep-alive(yes));

};

destination d_mysql { \

pipe("/var/log/mysql.pipe" \

template("INSERT INTO logs \

(host, facility, priority, level, tag, datetime, program, msg) \

VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', \

'$PROGRAM', '$MSG' );\n") template-escape(yes));

};

filter f_kernel { facility (kern); };

filter f_messages { level(info..emerg) and not (facility(mail) or \

facility(authpriv) or facility(cron)); };

log {source(s_sys); filter(f_messages); destination(d_mysql); };

log {source(s_sys); filter(f_kernel); destination(d_mysql); };

ขั้นตอนที่ 11 สร้างสคริปเพื่อทำไปน์สำหรับส่งค่าสตรีมจากไปน์สู่ฐานข้อมูล งานนี้เป็น bash สคริปครับทำเสร็จต้องเปลี่ยนสิทธิให้รันได้ด้วยอย่าลืม ฟังดูวุ่นวายแต่ทำจริงง่ายมากครับ

#vi syslog2mysql.sh

#!/bin/bash

if [ ! -e /var/log/mysql.pipe ]

then

mkfifo /var/log/mysql.pipe

fi

while [ -e /var/log/mysql.pipe ]

do

mysql -u root --password=radius syslogng < /var/log/mysql.pipe >/dev/null

done

# chmod +x syslog2mysql.sh

# ./syslog2mysql.sh &

# /etc/init.d/syslog-ng start

ทำครบแล้วก็ปรบมือให้ตัวเองครับ ลองมาดูผลงานสิว่าเป็นไงบ้าง เข้าไปหน้าล็อกอินครับ

php syslogviewer

จากนั้นป้อนรหัสผู้ใช้พร้อมรหัสผ่านที่ทำไว้ในขั้นตอนที่ 5 ครับ ถ้าหากลืม จากนั้นจะได้หน้าจอต่อไปครับ

php syslogviewer

ดูต่อ อยากเห็นเรียลไทม์วิวเวอร์ครับ

php syslogviewer

ลองค้นหาดูสิ

ได้คำตอบตามนี้ครับ

php syslogviewer

ดูดีทีเดียวครับ เป็นไงครับ php syslogviewerสู้ซอฟต์แวร์แพง ๆ จากต่างประเทศได้ไหมอันนี้ต้องพิสูจน์ด้วยตนเองแหละครับ ในส่วนตัวของผู้เขียนทะเลาะได้กับ kiwi syslog service manager ของวินโดร์ได้เชียวครับ หรือจะใช้สำหรับมอนิเตอร์โปรแกรมจัดส่งข้อมูลการจราจรคอมพิวเตอร์จากอุปกรณ์ อื่น ๆ เช่น สวิตช์ เร้าเตอร์ หรือ อุปกรณ์แอคเซสพอยท์ในระบบก็ทำได้ดีครับ ใช้จริงก็ได้ครับ ผู้เขียนว่าคนไทยเก่งครับ สามารถสร้างเครื่องแม่ข่ายเก็บข้อมูลการจราจรคอมพิวเตอร์ ตาม พรบ.ว่าด้วยการกระทำผิดเกียวกับคอมพิวเตอร์ พ.ศ.2550 ได้ด้วยตนเองครับ ก็มันกฎหมายบ้านเรา ก็ทำมันซะเองสิครับ แค่นี้ก็รอดตัวจากมาตรา 26 ตามพรบ.คอมพิวเตอร์ปรับตั้งห้าแสนบาทแล้วครับ ที่สำคัญช่วยลดปัญหาการนำเข้าฮาร์ดแวร์ราคาแพงจากต่างประเทศได้ครับ สงสารพี่น้องเกษตรกรไทยครับไม่รู้จะขายข้าวสารกี่เกวียนจะพอจ่ายเงินภาษี ให้คนรัฐบาลซื้อ centralized log จากต่างประเทศสักตัว

ภาคสอง ทำเองได้ Centralized log แถมวิวได้ด้วย PHP SYSLOGVIEWER

หมายเหตุ เฉพาะเครื่องแม่ข่าย centralized log ตัวเดียวยังไม่เพียงพอต่อการคอมไพล์พรบ.ว่าด้วยการกระทำความผิดเกี่ยวกับ คอมพิวเตอร์ พ.ศ. ๒๕๕๐ หน่วยงานต้องทำอินเทอร์เน็ตเกตเวย์เพื่อทำการตรวจสอบสิทธิการเข้าใช้ งานระบบ (authentication gateway) และต้องตั้งฐานเวลาเทียบกับเวลามาตรฐานของประเทศไทย (stratum 0)ผิดพลาดไม่เกิน 10 ms ด้วย และหากหน่วยงานใดให้บริการเวป หรือ เมลล์เซิร์ฟเวอร์ต้องจัดเก็บข้อมูลการให้บริการดังกล่าวด้วย แต่ยังไงก็ตามเราก็ประหยัดเงินไปได้หนึ่งกล่องล่ะครับ

ผู้เขียนขอจบบทความทำเองได้ Centralized log แถมวิวได้ด้วย PHP SYSLOGVIEWER เพียงแค่นี้ครับ หากติดขัดในขั้นตอนใด ถามมาได้ครับที่

supakitd at yahoo dot com

บริษัท ไทยพรอสเพอรัสไอที จำกัด

42/1 ถ.พิทักษ์ชาติ ต.ประจวบคีรีขันธ์

อ.เมืองประจวบคีรีขันธ์ จ.ประจวบคีรีขันธ์ 77000

Last Updated ( Friday, 15 August 2008 03:48 )

เวอร์ชั่นเต็ม: การติดตั้ง Centralized log ตาม พรบ.ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์

http://www.thaishadow.com/archiver/?tid-589.html

การติดตั้ง Centralized log ตาม พรบ.ว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์

หลาย ๆ องค์กรเริ่มจะตื่นตัวกับพรบ.ว่าด้วยการกระทำผิดเกี่ยวกับคอมพิวเตอร์ พ.ศ. ๒๕๕๐ ตามมาตรา ๒๖ บัญญัติให้ผู้ให้บริการต้องเก็บข้อมูลจราจรคอมพิวเตอร์ไว้ไม่ต่ำกว่า ๙๐ วัน แต่ไม่เกิน ๑ ปีไปแล้ว วันนี้จะแนะนำวิธีง่าย ๆ ที่จะทำ centralized log เซิร์ฟเวอร์ด้วยตนเอง ด้วยซอฟต์แวร์ open sourceดูสิว่าจะสู้ผลิตภัณฑ์ต่างประเทศราคาหลายแสนได้หรือไม่

นับเป็นข่าวดีมากที่ผู้เขียนได้ค้นพบซอฟต์แวร์ที่ใช้ทำการวิว ค้นหาข้อมูล เพื่อจะได้ทำรายงานเบื้องต้นได้ใหม่ ชื่อว่า “php syslogviewer” แถมเพิ่งจะอัพเดทล่าสุดเมื่อปีกลาย แจ่มทีเดียว ใครหลายคนอาจเคยได้ยินชื่อ phpsyslog-ng มาก่อน ลืมไปได้เลยครับขี้เหร่มาก



ซอฟต์แวร์ที่ใช้งาน

syslog-ng-2.0.0

phpsyslogviewer-7.2.1

speedupd-7.3.2



ผู้เขียนทดสอบโดยติดตั้งบนระบบปฏิบัติการ debian etch 4.0 รันในระบบเวอร์ชอลแมชชีน โดยซอฟต์แวร์ xen opensource ใช้เคอร์เนลเวอร์ชั่น 2.6.18-4-xen-686 นับว่ามีเสถียรภาพสูงมาก ๆ ครับ



ขั้นตอนที่ 1 เริ่มกันเลยดีกว่า หลังจากติดตั้งโอเอสเรียบร้อยให้ทำการติดตั้งซอฟต์แวร์ syslog-ng-2.0.0 โดยใช้แพ็คเกจของโอเอสเองดังนี้



# apt-get install syslog-ng



ขั้นตอนที่ 2 ดาวน์โหลดซอร์สโค๊ดจาก sourceforge ตามลิงค์ข้างล่างนี้

# wget [url]http://jaist.dl.sourceforge.net/sourceforg...r-7.2.1.tar.bz2[/url]

# wget [url]http://jaist.dl.sourceforge.net/sourceforg...d-7.3.2.tar.bz2[/url]


ขั้นตอนที่ 3 แตกแพ็คเกจออกถ้าใครยังไม่ได้ลงโปรแกรม bzip2 ให้ทำการลงซะก่อนมิฉะนั้นจะแตกไฟล์ออกไม่ได้และทำการติดตั้งชุด lamp สำหรับเครื่องแม่ข่ายซะก่อน ขั้นตอนการติดตั้ง lamp อาจจะใช้เวลาสักนิดนึง หากใครมีประสบการ์ณคงหาทางแก้ปัญหาได้จากเอกสารอื่น เนื้อหาในบทความนี้ผู้เขียนขอเล็งไปที่ซอฟต์แวร์หลัก ๆ ของระบบการจัดการข้อมูลการจราจรคอมพิวเตอร์ ตามพรบ.เป็นหลัก อาจจะทำให้มือใหม่งุดหงิดบ้าง ดังนี้

# apt-get install bzip2

# tar xjvf phpsyslogviewer-7.2.1.tar.bz2

# cd phpsyslogviewer-7.2.1

# apt-get install mysql-client mysql-server apache2 php5

# apt-get install php5-mysql php5-ldap php5-cli libapache2-mod-php5



ขั้นตอนที่ 4 ในโฟลเดอร์ install จะมีสคริปที่ใช้ติดตั้งตารางต่าง ๆ ให้กับฐานข้อมูล เราจะต้องทำการสร้างฐานข้อมูลเสียก่อน มิฉะนั้นจะพบกับข้อผิดพลาดและไม่สามารถรันสคริปดังกล่าวผ่านได้

# mysql -u root -p

mysql > create database syslogng;

mysql > exit;

# mysql -u root -p syslogng < install/phpsyslogviewer.sql



ขั้นตอนที่ 5 ปรบมือให้กับตัวเองเราผ่านพ้นขั้นตอนที่ต้องระวังไปขั้นหนึ่ง จากนั้นกำหนดค่าเพื่อสร้างบัญชีรายชื่อผู้ใช้และรหัสผ่านง่าย ๆ ก็ใส่ค่าข้อมูลของผู้ใช้ รหัสผ่าน ชื่อโฮสต์ และ ฐานข้อมูล คิดว่าไม่น่ายาก ดังนี้

# vi install/newuser.sql.php

# php install/newuser.sql.php

# php install/newuser.sql.php | mysql -u root -p syslogng



ขั้นตอนที่ 6 จัดการเวบไดเรคทอรีเพื่อให้สามารถเรียกดูข้อมูลผ่านเวบบราวเซอร์ ใครที่มีประสบการณ์สร้างเวบไซต์มาก่อน งานนี้กินเรียบครับ ทำตามขั้นตอนได้เลย

# cp -R htdocs /var/www/phpsyslogviewer

# vi /var/www/phpsyslogviewer/config.php

# chown root:www-data /var/www/phpsyslogviewer/config.php

# chmod 440 /var/www/phpsyslogviewer/config.php





ขั้นตอนที่ 7 ทดลองเปิดหน้าเวบไซต์ดูหน่อยว่าหน้าตาเป็นอย่างไร ไปที่ [url]http://xxx.xxx.xxx.xxx/phpsyslogviewer[/url]

[img]http://pic.citec.us/out.php/i4335_syslogviewer1.JPG[/img]

จะเห็นว่าหน้าตาดูดีทีเดียว


ขั้นตอนที่ 8 ติดตั้งแพ็คเกจ speedupd-7.3.2 เพื่อเร่งความเร็วให้เอนจิ้นป้อนข้อมูลสู่ฐานข้อมูล mysql ขั้นตอนนี้อาจยุ่งยากนิดหน่อย เพราะต้องทำการคอมไพล์แพ็คเกจด้วยตัวเองใหม่ แต่ไม่เกินความสามารถของเราหรอกครับ ขอย้ำว่าต้องทำนะครับขั้นตอนนี้ มิฉะนั้นใครที่เคยใช้ phpsyslog-ng จะรู้ซึ้งว่าอึดอัดเป็นอย่างไร

# tar xjvf speedupd-7.3.2.tar.bz2

# cd speedup-7.3.2

# apt-get install debhelper cmake libdaemon-dev libconfuse-dev fakeroot

# dpkg-buildpackage -rfakeroot



ขั้นตอนที่ 9 หลังจากผ่านขั้นตอนที่ 8 เราจะได้แพ็คเกจตระกูล debian ชื่อว่า speedupd_7.3.0_i386.debให้ติดตั้งแพ็คเกจและกำหนดค่าให้กับไฟล์ speedupd.confดังนี้

# cd ..

# dpkg -i speedupd_7.3.0_i386.deb

# vi /etc/speedupd.conf

# /etc/init.d/speedupd start




ต่อข้างล่างนะครับ ยาวเกิน

Edkung 10-7-2008 17:52

ขั้น ตอนที่ 10 สบายใจไปอีกขั้นหนึ่งครับ ต่อไปเป็นการกำหนดค่าให้กับ syslog-ng ทำการส่งค่าไปเก็บยังฐานข้อมูลทำตามนี้เลยครับ ง่าย ๆ ผู้เขียนตัดวิธีการเก็บข้อมูลการจราจรคอมพิวเตอร์ส่วนอื่นออก เพื่อให้สามารถทำความเข้าใจได้ง่าย ๆ ครับ หากใครมีไฟล์คอนฟิคเก่าอยู่แล้วก็เพิ่มเติมเฉพาะส่วนที่ต้องการเก็บข้อมูลใน ฐานข้อมู
ลได้เลยครับ

# cd /etc/syslog-ng

# cp syslog-ng.conf syslog-ng.conf.org

# vi syslog-ng.conf

options {

recv_time_zone (+07:00);

send_time_zone (+07:00);

sync (0);

time_reopen (100);

log_fifo_size (1000);

long_hostnames (off);

use_dns (no);

use_fqdn (no);

create_dirs (yes);

chain_hostnames(yes);

keep_hostname (yes);

};



source s_sys {

file ("/proc/kmsg" log_prefix("kernel: "));

unix-stream ("/dev/log");

internal();

udp(ip(0.0.0.0) port(514));

tcp(ip(0.0.0.0) port(514) keep-alive(yes));

};

destination d_mysql { \

pipe("/var/log/mysql.pipe" \

template("INSERT INTO logs \

(host, facility, priority, level, tag, datetime, program, msg) \

VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', \

'$PROGRAM', '$MSG' );\n") template-escape(yes));

};



filter f_kernel { facility (kern); };

filter f_messages { level(info..emerg) and not (facility(mail) or \

facility(authpriv) or facility(cron)); };



log {source(s_sys); filter(f_messages); destination(d_mysql); };

log {source(s_sys); filter(f_kernel); destination(d_mysql); };



ขั้นตอนที่ 11 สร้างสคริปเพื่อทำไปน์สำหรับส่งค่าสตรีมจากไปน์สู่ฐานข้อมูล งานนี้เป็น bash สคริปครับทำเสร็จต้องเปลี่ยนสิทธิให้รันได้ด้วยอย่าลืม ฟังดูวุ่นวายแต่ทำจริงง่ายมากครับ

#vi syslog2mysql.sh

#!/bin/bash

if [ ! -e /var/log/mysql.pipe ]

then

mkfifo /var/log/mysql.pipe

fi

while [ -e /var/log/mysql.pipe ]

do

mysql -u root --password=radius syslogng < /var/log/mysql.pipe >/dev/null

done



# chmod +x syslog2mysql.sh

# ./syslog2mysql.sh &

# /etc/init.d/syslog-ng start



ทำครบแล้วก็ปรบมือให้ตัวเองครับ ลองมาดูผลงานสิว่าเป็นไงบ้าง เข้าไปหน้าล็อกอินครับ

[img]http://pic.citec.us/out.php/i4336_syslogviewer2.JPG[/img]

จากนั้นป้อนรหัสผู้ใช้พร้อมรหัสผ่านที่ทำไว้ในขั้นตอนที่ 5 ครับ ถ้าหากลืม จากนั้นจะได้หน้าจอต่อไปครับ

[img]http://pic.citec.us/out.php/i4337_syslogviewer3.JPG[/img]

ดูต่อ อยากเห็นเรียลไทม์วิวเวอร์ครับ

[img]http://pic.citec.us/out.php/i4338_syslogviewer4.JPG[/img]

ลองค้นหาดูสิ

[img]http://pic.citec.us/out.php/i4339_syslogviewer5.JPG[/img]

ได้คำตอบตามนี้ครับ

[img]http://pic.citec.us/out.php/i4340_syslogviewer6.JPG[/img]

ดูดีทีเดียวครับ เป็นไงครับ php syslogviewerสู้ซอต์ฟแวร์แพง ๆ จากต่างประเทศได้ไหมอันนี้ต้องพิสูจน์ด้วยตนเองแหละครับ ในส่วนตัวของผู้เขียนดูดีทีเดียวทะเลาะได้กับ kiwi syslog service manager ของวินโดร์ได้ดีเชียวครับ หรือจะใช้สำหรับมอนิเตอร์โปรแกรมจัดส่งข้อมูลการจราจรคอมพิวเตอร์จากอุปกรณ์ อื่น ๆ เช่น สวิตช์ เร้าเตอร์ หรือ อุปกรณ์แอคเซสพอยท์ในระบบก็ทำได้ดีครับ ใช้จริงก็ได้ครับ ผู้เขียนว่าคนไทยเก่งครับ สามารถสร้างเครื่องแม่ข่ายเก็บข้อมูลการจราจรคอมพิวเตอร์ ตาม พรบ.ว่าด้วยการกระทำผิดเกียวกับคอมพิวเตอร์ พ.ศ.2550 ได้ด้วยตนเองครับ ก็มันกฎหมายบ้านเรา ก็ทำมันซะเองสิครับ แค่นี้ก็รอดตัวจากมาตรา 26 ปรับตั้งห้าแสนบาทแล้วครับ ที่สำคัญช่วยลดปัญหาการนำเข้าฮาร์ดแวร์ราคาแพงจากต่างประเทศได้ครับ สงสารพี่น้องเกษตรกรไทยครับไม่รู้จะขายข้าวสารกี่เกวียนจะพอจ่ายเงินซื้อ centralized log จากต่างประเทศสักตัว

[b]ที่มา[/b] [url]http://www.tpit.co.th/[/url]

supakitd at yahoo dot com

บริษัท ไทยพรอสเพอรัสไอที จำกัด

42/1 ถ.พิทักษ์ชาติ ต.ประจวบคีรีขันธ์

อ.เมืองประจวบคีรีขันธ์ จ.ประจวบคีรีขันธ์ 77000

Champ 11-7-2008 11:22

อยากรู้ว่า มันมีแบบที่เป็น เครื่อง พอเราเอาเครื่องนี้ไปเข้ากับ router แล้วใช้ได้เลย อะมีป่าวครับ

Edkung 11-7-2008 12:21

อันนี้ผมก็ไม่แน่ใจเท่าไรในรายละเอียด แต่เห็นว่าแพงมากๆๆๆ เฮ้อ รัฐออก พรบ. ฉบับนี้มา เปิดโอกาสให้พวก 3rd party มีช่องทางหากิน ...

debian: iptables

  1. แบบใช้ iptables-save + iptables-restore
    รันคำสั่งเพื่อสร้างกฎต่าง ๆ
    # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    # iptables -A FORWARD -s 192.168.0.0/16 -j ACCEPT
    # iptables -A FORWARD -d 192.168.0.0/16 -j ACCEPT
    # iptables -A FORWARD -s ! 192.168.0.0/16 -j DROP

    เก็บกฎไว้ที่ไฟล์ /etc/iptables/rules
    # mkdir -p /etc/iptables
    # iptables-save > /etc/iptables

    นำกฎมาใช้ตอนเปิดเครื่องใหม่ ผ่าน /etc/network/interfaces
    # vi /etc/network/interfaces

    ...
    auto eth1
    iface eth1 inet static
    address 192.168.5.3
    netmask 255.255.255.0
    network 192.168.5.0
    broadcast 192.168.5.255
    gateway 192.168.5.1
    post-up /sbin/iptables-restore < /etc/iptables/rules
    pre-down /sbin/iptables-save > /etc/iptables/rules

    ...
  2. แบบใช้สคริปต์
    สร้างสคริปต์เก็บไว้คือ /usr/local/bin/d.iptables
    # vi /usr/local/bin/d.iptables
    #!/bin/sh
    INTERFACE=eth1
    INT_NET=192.168.0.0/16
    /sbin/iptables -F > /dev/null
    /sbin/iptables -t nat -A POSTROUTING -o $PPP_INT -j MASQUERADE
    /sbin/iptables -A FORWARD -s $INT_NET -j ACCEPT
    /sbin/iptables -A FORWARD -d $INT_NET -j ACCEPT
    /sbin/iptables -A FORWARD -s ! $INT_NET -j DROP

    # chmod 755 /usr/local/bin/d.iptables

    นำกฎมาใช้ตอนเปิดเครื่องใหม่ ผ่าน /etc/network/interfaces
    # mkdir -p /etc/iptables/
    # vi /etc/network/interfaces

    ...
    auto eth1
    iface eth1 inet static
    address 192.168.5.3
    netmask 255.255.255.0
    network 192.168.5.0
    broadcast 192.168.5.255
    gateway 192.168.5.1
    post-up /usr/local/bin/d.iptables
    pre-down /sbin/iptables-save > /etc/iptables/rules

    (เวลาจะปรับปรุงสคริปต์ เอาเนื้อความจาก /etc/iptables/rules มาใช้ในการปรับปรุงได้

  3. อ้างอิง - http://debianclub.org/node/156

สคริปท์ บล็อค keyword โดยใช้ Squid คับ เห็นมีคน ถาม

acl bad url_regex "/var/www/member/block_site.php"
http_access deny bad

ในไฟล์ /var/www/member/block_site.php

ก็จะประกอบไป ด้วยคำหรือเว็บไซต์ที่เราต้องการบล็อคคับ

เช่น
passkey
porn
xxx
bittorrent
torrent
passkey

compile ipp2p บน debian etch ไม่ผ่าน ช่วยทีครับ

apt-get install linux-headers-2.6.18-4-686 iptables-dev

http://www.thaiadmin.org/board/index.php?topic=58657.new

วันอังคารที่ 19 สิงหาคม พ.ศ. 2551

compile debian lenny support l7

http://forum.systemnetworkcare.com/index.php?topic=98.0
#ref & Big thank
# http://www.elessar.one.pl/article_kernel2.6.php
# http://suchart.wordpress.com/2008/02/02/kernel-2624-iptables-140-l7-filter-217-ipp2p-082-on-debian-40/
# http://kung1401.hi5.com/friend/profile/displayJournalDetail.do?ownerId=204560961&journalId=41474051
# http://hadyaiinternet.com
# http://siambox.com

#SiamVision Computer & network
#sncvision@hotmail.com

apt-get update
apt-get install build-essential
apt-get install kernel-package
apt-get install libncurses5-dev

cd /usr/src

apt-get install linux-source-2.6.24
wget http://iptables.org/projects/iptables/files/iptables-1.4.0.tar.bz2
wget http://nchc.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.18.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2008-04-23.tar.gz
wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20080517.tar.bz2

echo "***download complete***"
echo "***Extract archive***"
tar xvzf l7-protocols-2008-04-23.tar.gz
tar xvzf netfilter-layer7-v2.18.tar.gz
tar xvjf patch-o-matic-ng-20080517.tar.bz2
tar xvjf linux-source-2.6.24.tar.bz2
tar xvjf iptables-1.4.0.tar.bz2
echo " done"

echo -n "Start Symbolic link >>>"
ln -s linux-source-2.6.24 linux
ln -s iptables-1.4.0 iptables
echo " done"

echo -n "Patch linux kernel & iptables with l7-filter >>>"
cd /usr/src/linux
patch -p1 < ../netfilter-layer7-v2.18/for_older_kernels/kernel-2.6.22-2.6.24-layer7-2.18.patch echo -n "Patch iptables" cd ../iptables patch -p1 < ../netfilter-layer7-v2.18/iptables-1.4-for-kernel-2.6.20forward-layer7-2.18.patch chmod +x extensions/.layer7-test echo " done" echo -n "Patch-o-magic ipp2p&l7&&connlimit" cd ../patch-o-matic-ng-20080517 echo " done" ./runme --download ./runme ipp2p echo -n "config and compile kernel" cd /usr/src/linux cp /boot/config-2.6.24-1-686 ./.config make menuconfig make-kpkg clean make-kpkg --initrd --append-to-version=-siamvision kernel_image kernel_headers dpkg -i linux-image+tab dpkg -i linux-headers+tab mv /usr/src/l7-protocols-2008-04-23 /etc/l7-protocols cd /usr/src/iptables make KERNEL_DIR=/usr/src/linux make install Reboot Test iptables -m ipp2p --help iptables -m layer7 --help iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP iptables -A FORWARD -m ipp2p --ipp2p -j DROP echo -n "bittorent" echo '# Bittorrent announce (tracker)' > /etc/l7-protocols/protocols/bittorrent-announce.pat
echo 'bittorrent-announce' >> /etc/l7-protocols/protocols/bittorrent-announce.pat
echo '^get.+announce.+info_hash=' >> /etc/l7-protocols/protocols/bittorrent-announce.pat
echo " done"

echo " * iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP"
echo " * iptables -A FORWARD -m layer7 --l7proto bittorrent-announce -j DROP"

http://www.opentle.org/th/node/7854

http://www.opentle.org/th/node/7854

ลองติดตั้ง dns แบบเปลี่ยนค่าได้

http://www.thaitux.info/node/133

http://download.grisoft.cz/softw/70/update/

http://download.grisoft.cz/softw/70/update/

วันจันทร์ที่ 18 สิงหาคม พ.ศ. 2551

การติดตั้ง Samba Server

ในบทความนี้เป็นการสาธิต การติดตั้ง Samba Server ในแบบพื้นฐานครับ เป็นการ share ข้อมูล

ก่อนอื่นก็ต้องมาตรวจสอบ Package ก่อนครับ

[root@station10 ~]# rpm -qa|grep samba

samba-client-3.0.10-1.4E.6

samba-3.0.10-1.4E.6

system-config-samba-1.2.21-1

samba-common-3.0.10-1.4E.6

[root@station10 ~]# vi /etc/samba/smb.conf

Section [ global ]

Netbios name = MONTREE-SAMBA

Workgroup = Linuxgray

[TESTSHARE]

path = /share

guest ok = yes

writable = yes

comment = My First Share Folder

[root@station10 ~]# mkdir /share

[root@station10 ~]# chmod 777 /share/

[root@station10 ~]# service smb restart

Shutting down SMB services: [FAILED]

Shutting down NMB services: [FAILED]

Starting SMB services: [ OK ]

Starting NMB services: [ OK ]

smbclient –L localhost

แค่นี้ก็เป็นอันเสร็จพิธีครับสำหรับ samba server ลองทำดูครับ

My sources.list for Debian Lenny/Sid

deb http://ftp.debianclub.org/debian lenny main contrib
deb-src http://ftp.debianclub.org/debian lenny main contrib

###########################################
#Debian Lenny
deb http://ftp.nl.debian.org/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free

########################################
#Multimedia support (latest ffmpeg, mplayer, and more)
#http://debian.video.free.fr/index.html
#get the apt GPG key from here : http://www.debian-multimedia.org/faq.php

#testing (Lenny)
deb ftp://ftp.uni-kl.de/debian-multimedia/ testing main
#unstable (Sid)
deb ftp://ftp.uni-kl.de/debian-multimedia/ unstable main
##################################################
#Debian Sid:
deb http://ftp.nl.debian.org/debian/ unstable main contrib non-free
##############################################
#to use unstable repositories (Sid) of Debian to get some of the latest packages
#make an “apt.conf”
#as root:
#nano -w /etc/apt/apt.conf
#Insert this line:
#APT::Default-Release “testing”;
#after an apt-get update you can now do apt-get install -t unstable
#to get a package from the unstable(Sid) repo.
#Of course you can also use this trick for Etch > Lenny
###########################################################

NTPDate: เวลานั้นสำคัญไฉน .

ที่ ตั้งหัวเรื่องอย่างนี้ก็เพราะสิ่งที่เรากำลังจะมาดูกันก็คือเรื่อง "เวลา" และเจ้าเวลานี่เองที่เป็นต้นเหตุของการเรียนรู้ในครั้งนี้ เรื่องก็มีอยู่ว่า หากเราใช้งานเครื่องคอมพิวเตอร์เราคนเดียว ไม่ต้องติดต่อกับใคร ไม่ต้องส่งข้อมูลให้ใคร เรื่องเวลาเราจะตั้งเป็นเท่าไรก็ได้ ช้าหรือเร็วก็แล้วแต่ชอบใจ แต่เมื่อใดก็ตามที่เราต้องส่งข้อมูลไปยังเครื่องอื่น ๆ และต้องมีการเปรียบเทียบกันว่าข้อมูลตัวไหนเป็นตัวใหม่หรือเก่าแล้วหละก็ ....เกิดปัญหาแล้วสิ.... เพราะการจะเปรียบเทียบกันต้องตั้งอยู่บนฐานเวลาที่ตรงกัน หากช้า หรือเร็วกว่ากัน ก็ส่งผลให้การเปรียบเทียบผิดพลาด

วิธีแก้ปัญหา ... ก็ตั้งเองให้มันตรงกันสิ นั่นมันก็ได้อยู่หรอก แต่มีวิธีที่ดีกว่านั้น เราคงเคยได้ยินเรื่องการตั้งเวลา โดยการรับค่าเวลาจากเซิร์ฟเวอร์เวลา (Time Server) ซึ่งเครื่องที่ขอเวลาจากเซิร์ฟเวอร์ ก็จะได้เวลาที่ตรงกันเอง โดยไม่ต้องออกแรงมากมาย งั้นก็เริ่มลงโปรแกรมเลยละกันครับ

# aptitude install ntpdate

ได้โปรแกรมมาแล้ว ก็เหลือแต่ต้องตั้งค่าต่าง ๆ ให้โปรแกรม แต่ว่าไปแล้วค่าที่ระบบตั้งมาให้ก็ใช้ได้แล้ว อาจจะไม่ต้องแก้อะไรเลย

ลองขอเวลาดู

# ntpdate-debian

31 Jan 00:24:55 ntpdate[10301]: adjust time server 216.162.200.152 offset -0.000195 sec

อาฮ่า.... ได้เวลามาแล้ว แต่ค่อนข้างช้าแฮะ ... ทำไหมเหรอครับ ก็เจ้าเซิร์ฟเวอร์เวลา ที่ตั้งค่ามากับแพ็คเกจ เขาไม่ได้ตั้งสำหรับเราคนไทยใช่ไหมครับ งั้นก็มาใช้ตัวที่อยู่ใกล้ ๆ หน่อยละกันจะได้เร็วหน่อย

# echo "server th.pool.ntp.org" > /etc/ntp.conf

คราวนี้ลองดูใหม่

# ntpdate-debian

31 Jan 00:29:51 ntpdate[10329]: adjust time server 61.19.242.42 offset 0.001380 sec

รอบนี้ได้มาเหมือนกัน เร็วกว่าด้วย

แต่ทว่า โดยพื้นฐานของระบบแล้ว จะเกิดการคลาดเคลื่อนของเวลาตลอดเวลาทีละเล็กทีละน้อย เนื่องจากพื้นฐานความแตกต่างทางด้านฮาร์ดแวร์ ซึ่งมีความแม่นยำต่างกัน ดังนั้นการขอเวลาจากเซิร์ฟเวอร์เวลาตามช่วงเวลาที่กำหนด อาจจะเป็น 1-2 ชั่วโมงต่อครั้ง จึงเป็นความคิดที่ดี

งั้นก็กำหนด
/etc/crond.hourly/updatetime

#!/bin/bash
/usr/sbin/ntpdate-debian > /dev/null
/sbin/hwclock --adjust # ปรับค่าความแตกต่างเวลาระหว่าง System Time กับ Hardware Clock (RTC)
/sbin/hwclock --systohc # ตั้งค่าเวลา Hardware Clock ตาม System Time

# /etc/init.d/cron restart

ตอนนี้เครื่องของเราก็จะทำการขอเวลาทุก ๆ ชั่วโมงแล้ว

System Time คือเวลาที่ระบบใช้ในขณะที่ลินุกซ์ยังทำงาน โดยจะเป็นคนละส่วนกันกับ Hardware Clock (RTC - Real Time Clock) นั่นหมายความว่า ค่าเวลาที่อานได้จากคำสั่ง date จะมาจาก System Time ไม่ได้มาจาก Hardware Clock โดยหน้าที่ของ Hardware Clock ก็คือจะคอยให้เวลากับลินุกซ์ในขณะเริ่มทำงาน รวมไปถึงขณะที่ลินุกซ์ไม่ได้ทำงานด้วย(ปิดเครื่อง) ดังนั้น การตั้งเวลา Hardware Clock ตาม System Time จึงทำให้เรามั่นใจได้ว่า หากปิดเครื่องไปแล้ว เวลาที่เปิดเครื่องมาใหม่ เรายังมีเวลาของระบบที่ถูกต้องอยู่

มาถึงตอนนี้เราก็ได้เวลาที่ถูกต้องและค่อนข้างแม่นยำมาแล้ว ก็ทำอย่างเดียวกันกับเครื่องแม่ข่ายที่เราจะต้องส่งข้อมูลไปเก็บ และอาจจะต้องมีการเปรียบเทียบเรื่องเวลาของการใช้งาน แก้ไข ไฟล์ คราวนี้ก็ไม่มีปัญหาแล้ว :)

บทความ debian เยอะมากๆ

http://www.thaitux.info/book/export/html/472

set php บน debian

apt-get update

You can use either Apache 1.3 or the newer Apache 2. If you are using Apache 1.3, make sure you have the following packages installed

apt-get install apache php4 libapache-mod-php4 php4-gd php4-imagick php4-mysql mysql-server

If you are using Apache 2, you need the following packages instead

apt-get install apache2-mpm-prefork libapache2-mod-php4 php4-gd php4-imagick php4-mysql mysql-server

วันเสาร์ที่ 16 สิงหาคม พ.ศ. 2551

การเก็บ log

การเก็บ log ต้องแบ่งเป็น 2 ส่วน

1. traffic log

2. data log

traffic log จะเป็น log จาก internal ไปยัง external หมายความว่า user ในหน่วยงานเราไปทำอะไรที่ไหนเราต้องมีการจัดเก็บ log ครับ

data log จะเป็น log ของเครื่อง server ภายในหน่วยงานเราที่เราเปิด public ให้คนภายนอกเข้าถึงได้ เช่น mail server , ftp server , web server เพราะเครื่องพวกนี้มีโอกาสที่จะเกิดการกระทำความผิด เช่น มีคนมา post รูปภาพไม่เหมาะสม , ส่ง mail หมิ่นประมาท , อีกหลายกรณี

การจัดเก็บ

data log แค่เอาตัวโปรแกรม agent ที่ใช้ในการยิง log ไฟล์ ไป install ที่เครื่อง server ต่างๆแล้วทำการ point destination ในการจัดเก็บ log file ไปยังเครื่อง centralized log server เป็นอันใช้ได้ครับ ดังนั้น software ที่ต้องติดตั้งที่เครื่อง server ของเราก็ คือ syslog หรือ syslog-ng(syslog new generation) แต่ถ้าเป็น syslog จะมีมาให้กับ ubuntu หรือ linux ค่ายอื่นๆอยู่แล้วนะครับไม่ต้องติดตั้งเพิ่ม แต่ผมแนะนำให้ใช้เป็น syslog-ng มากกว่านะครับ เพราะ syslog-ng สามารถ filter log ได้ว่าต้องการจะจัดเก็บ log อะไรบ้าง , เก็บแค่ไหน , กรองเอาเฉพาะ log ที่ alert เรื่องใด แถมยังสามารถจัดเก็บได้ทั้งแบบ tcp และ udp ซึ่งจะต่างกับ syslog ที่เก็บได้แต่ udp พอร์ต 514 นะครับ

traffic log กรณีเป็นปัญหาหน่อยนะครับ เพราะต้อง implement เยอะมาก(ต้องทำระบบ login)

1. proxy ของโปรโตคอลต่างๆ เช่น squid (web proxy) , frox(ftp proxy) , imspector(im proxy)
* แต่ถ้าจะ implement ตัว imspector ต้องระวังปัญหาเรื่องละเมิดสิทธิส่วนบุคคลนะครับ เพราะมันจัดเก็บข้อความของ user ที่กำลัง chat กันลงไปใน log ด้วยครับ ไม่ได้เก็บแต่ข้อมูลการ connect ถ้าไม่อยากมีปัญหาให้ใช้ iptables ในการ monitor ตัว IM เอง วิธีไปหาเอาจาก net ละกันครับ คงไม่สอน ณ ที่นี้อาจจะยาวไปหน่อย

ประโยชน์: จัดเก็บข้อมูลได้ว่า ใคร ไปทำอะไร ที่ไหน เมื่อไหร่ (แต่ใครใน log ของ proxy ดันระบุเป็น ip address ที่ปลอมได้ง่ายมากถึงมากที่สุด)

2. สืบเนื่องจากข้อ 1 นะครับ ในเมื่อ ip address ไม่มีความน่าเชื่อถือในการระบุตัวตนผู้กระทำความผิด ดังนั้น เราต้องทำระบบ authentication แบบ hotspot ให้ user ในระบบ log in ก่อนเข้าใช้งาน internet ครับ ด้วยเหตุนี้เองทาง admin ต้อง implement ระบบ authentication นะครับ โดย log ของระบบ authentication มันจะเก็บในรูปแบบ

ip address username ที่ login เวลาที่ใช้งาน

ดัง นั้นเมื่อเราเอา log จากข้อ 2 ไป map กับ log จากข้อ 1 เราก็จะทราบผู้กระทำความผิดครับ(จริงๆไปอ่าน พรบ. ให้ละเอียดจะเห็นว่า พรบ.ระบุว่าเราต้องระบุตัวตนผู้ใช้งานได้นะครับ แต่คนมักคิดว่า proxy อย่างเดียวก็พอ :P)

3. ต่อมา เรื่องที่สำคัญมากจนไม่อาจข้ามไปได้ คือ time server ครับ เพราะนึกเล่นๆนะครับ พนักงานเจ้าหน้าที่มาขอ log เราโดยแจ้งมาว่า ip address ของหน่วยงานเรากระทำความผิดเมื่อวันที่ 25 สิงหาคม ช่วงเช้าๆ แต่เวลาในเครื่อง log เราดันเป็นวันที่ 11 มกราคม 2499 ยังงี้ท่านอาจซวยได้นะครับ เพราะไม่ยอม sync เวลาให้ตรงกับเครื่อง time server ดังนั้นเราต้องติดตั้งโปรแกรม ntp ที่เครื่องจัดเก็บ log และเครื่อง server ต่างๆนะครับ

ถาม: ต้อง sync เวลาเครื่อง server ของเราทุกเครื่องไปยังเครื่อง time server ที่เป็น stratum0 บน internet เลยหรือเปล่าครับ

ตอบ: ไม่ครับ ทำงั้นเดี๋ยวเวลามันจะ delay เกิน 10 ms เพราะต้อง วิ่งไป sync กับเครื่อง time server บน net หมดยังงี้ไม่ไหว ให้แก้ไขโดยตั้งเครื่อง server ในหน่วยงานมา 1 เครื่องเอาไป sync เวลาไปยัง time server ที่เป็น stratum 0 (หรืออาจจะ sync ไปยังเครื่องของ กรมอุทกศาสตร์ , สถาบันมาตรวิทยา ที่เป็น stratum1 ก็ได้ครับ ถือว่าหยวนๆ) แล้วเราค่อยให้เครื่อง server เครื่องอื่นๆ sync time กับเครื่อง internal time server อีกทีนึงเวลาจะได้ ไม่ delay



Centralized log
เครื่องนี้ควรจะต้องมี harddisk ใหญ่หน่อยนะครับเอาไว้จัดเก็บ log

software:

1. syslog-ng ---> เอาไว้รับ log จากเครื่อง server (ตาม พรบ. ถือว่าเป็น data archive)

2. openssl ---> เอาไว้ encrypt log ไม่ให้ใครเข้ามาแก้ไข (ตาม พรบ. คือป้องกันการแก้ไข)

3. md5 ---> เอาไว้ hashing ตาม พรบ.


สรุป: ต้องใช้ software ดังนี้

1. squid(web proxy)

2. frox(ftp proxy)

3. iptables(ตั้งค่าให้เก็บ log IM ซึ่งหารายละเอียดเองนะครับว่าทำไง)

4. radius server(เก็บ user account ในระบบ)

5. ระบบ authentication (มีเพียบเลย ซึ่ง 1 ในหลายๆตัวและเป็นที่นิยมใช้งาน คือ chillispot)

6. syslog-ng (เอาไว้ทำ centralized log server และเอาไว้ติดตั้งที่เครื่องลูกเพื่อยิง log)
*เอ้อ! ลืมไป ถ้าเป็นเครื่อง windows ใช้ snare หรือ kiwi syslog ในการทำ syslog server และ syslog agent ได้นะครับ

7. ntp เอาไว้ sync เวลา

เอาแค่นี้ก่อนนะครับ ลง detail มากกว่านี้จะเยอะไป ลองไปศึกษาดูก่อนค่อยว่ากันอีกที

โชคดีครับ

โครงการเก็บข้อมูลจราจร (Traffic Data) ด้วยซอฟต์แวร์โอเพนซอร์สโดย SIPA และ ATSI

โครงการเก็บข้อมูลจราจร (Traffic Data)ด้วยซอฟต์แวร์โอเพนซอร์สโดย SIPA และ ATSI

สำนักงานส่งเสริมอุตสาหกรรมซอฟต์แวร์แห่งชาติ(องค์การมหาชน) หรือ SIPA ได้ร่วมมือกับสมาคมซอฟต์แวร์ไทย
หรือ ATSI ดำเนินการจัดฝึกอบรมผู้ประกอบการในการติดตั้งและให้บริการคำปรึกษาระบบเก็บข้อมูลจราจร(Traffic Data)
ตามพรบ.การกระทำผิดด้วยคอมพิวเตอร์ พ.ศ. 2550 ด้วยซอฟต์แวร์โอเพนซอร์สโดยจัดการอบรมรุ่นละ 5 วัน
(วันพุธ-วันอาทิตย์)ตั้งแต่เวลา 8.30-16.30 น. กำหนดจัดอบรมจำนวน 6 รอบ รอบละ 30 คน โดยไม่มีค่าใช้จ่ายใดๆ
ทั้งสิ้น พร้อมอาหารว่างและอาหารกลางวัน

สามารถติดต่อจองการอบรมและส่งใบสมัครหรือสอบถามรายละเอียดได้ที่
คุณธัญฐิวา โตตณากานต์ ปุ้ย)
โทรศัพท์: 08 9051 3756
e-mail: thantiwa [-AT-] gmail.com

ดาวน์โหลดรายละเอียดโครงการและใบสมัคร

  1. รายละเอียดโครงการ
  2. ใบสมัครเข้ารับการอบรม

ดาวน์โหลดคู่มือการติดตั้ง

  1. คู่มือการเก็บข้อมูลจราจรด้วย Syslog-NG,NTP
  2. คู่มือการติดตั้งระบบยืนยันตัวตน(Authentication)ด้วย Chillispot
  3. คู่มือการติดตั้ง NTP (Network Time Protocol)

ดาวน์โหลด CD Image

  1. การเก็บข้อมูลจราจรด้วย Syslog-NG,NTP
    MD5SUMS : 1a9c3861dc5e4c1194e7184146930a11 Log Server 2.0.iso
  2. การติดตั้งระบบยืนยันตัวตน(Authentication) ด้วย Chillispot
    MD5SUMS : 2bfd9970ade6a35ed5c138634461f720 Debian 8.iso

ดาวน์โหลด Configuration Files

  1. การเก็บข้อมูลจราจรด้วย Syslog-NG

ดาวน์โหลด Slides

  1. การเก็บข้อมูลจราจรด้วย Syslog-NG,NTP
  2. การติดตั้งระบบยืนยันตัวตน(Authentication)ด้วย Chillispot

ดาวน์โหลดเอกสารอื่นๆ

  1. การแก้ปัญหา Ubuntu/Debian ไม่ Boot บน Dell Optiplex 320

Squid + Radius authentication

ดาวน์โหลด squid_radius_auth จาก

http://www.squid-cache.org/contrib/squid_radius_auth/squid_radius_auth-1.09.tgz

เมื่อได้แล้วก็

# tar -zxvf squid_radius_auth-1.09.tgz
# cd squid_radius_auth-1.09
# make clean
# make install

แก้ไข /usr/local/squid/etc/squid_radius_auth.conf

server xx.xx.xx.xx
secret yoursecret

แก้ไข /etc/services เพราะ Radius server ของเราใช้พอร์ท 1645/1646
เอาคอมเมนต์ออกหน้า

radius 1645/udp #RADIUS authentication protocol (old)
radacct 1646/udp #RADIUS accounting protocol (old)

พร้อมทั้งใส่คอมเมนต์ที่

#radius 1812/udp #RADIUS authentication protocol (IANA sanctioned)
#radacct 1813/udp #RADIUS accounting protocol (IANA sanctioned)

แก้ไข /usr/local/squid/etc/squid.conf

auth_param basic program /usr/local/squid/libxec/squid_rad_auth -f /usr/local/squid/etc/squid_rad_auth.conf
auth_param basic children 5
auth_param basic realm KBU.NET Web Authentication
auth_param basic credentialsttl 2 hours
acl AuthorizedUsers proxy_auth REQUIRED
.
.
# Allow authorized users
# ==========================
http_access allow all AuthorizedUsers

วันศุกร์ที่ 15 สิงหาคม พ.ศ. 2551

ntop โปรแกรม monitor network

วิธีติดตั้งและใช้งานก็ตามนี้เลย...
  1. # apt-get install ntop
  2. # ntop --set-admin-password เพื่อกำหนด password เวลาเข้าใช้งานในส่วนของ admin ของ program
  3. # เปิด browser พิมพ์ http://localhost:3000 เพื่อเรียกใช้โปรแกรม ntop ก็จะปรากฎว่าเข้าใช้ไม่ได้ ผ่างงง.....ง!!!! ก็มันยังไม่ได้ start service นี่เฟ้ย(ปั๊ดโธ่!)
  4. # /etc/init.d/ntop start เพื่อเป็นการstart service
  5. เปิด browser แล้วก็พิมพ์งี้ http://localhost:3000
  6. ว่ะ ฮะ ฮ่ะๆๆ! สำเร็จ
    • ถ้า จะเข้าใช้งานบางส่วนของ program (ส่วนadmin) จะมีการถาม password ให้กรอก password ตามที่ได้ตั้งไว้ตั้งแต่ต้น ส่วน username ให้กรอกว่า admin
    • ถ้า จะให้ work ควรลง program นี้ที่ gateway จะทำให้ดู traffic การใช้งานเครือข่ายของเราได้ทั้งหมด ว่าเครื่องไหนมีพฤติกรรมการใช้งานเครือข่ายยังไงบ้าง เช่น เครื่อง 192.168.20.11 มีพฤติกรรม ยิง packet ออก internet เป็นจำนวนมากอย่างต่อเนื่อง ในฐานะ admin ก็ block ซะ หมั่นไส้!!! เวลาเรียกใช้งานก็ไม่ต้องไปนั่งหน้า gatewayนะ ใช้comเครื่องไหนก็ได้ แล้วก็พิมพ์ http://192.168.20.254:3000 (สมมติว่า ip นี้เป็น ip ของ gateway)

วันพุธที่ 13 สิงหาคม พ.ศ. 2551

ติดตั้ง Shorewall บน Ubuntu

อ้างอิง http://www.ubuntuclub.com/node/529
ติดตั้ง Firewall - อันนี้เป็นสิ่งจำเป็นเช่นเดียวกัน คุณสามารถบล๊อกการติดต่อทั้งหมดจากภายนอกได้ ยกเว้นพอร์ตที่คุณต้องการจะเปิดไว้ เวปเซิฟเวอร์จะใช้พอร์ต 80 และ ssh ใช้ พอร์ต อะไรก็ได้ที่คุณตั้งใน /etc/ssh/sshd_config (ค่าปกติอคือ 22 )

สำหรับ firewall ใน Ubuntu จะมีให้เลือกอยู่ 2 ตัว ถ้าคุณยังคงใช้เครื่องนี้เป็น desktop ต่อไปด้วย คุณอาจใช้ FireStarter เป็น graphical firewall manager แต่ถ้าคุณใช้เครื่องนี้เป็นเซิฟเวอร์อย่างเดียว คุณอาจเลือก Shorewall เพราะคุณสามารถแก้ไขจาก command line (ไม่แน่ใจว่า Firestarter จะสามารถใช้ command line ได้หรือเปล่าไม่เคยลอง) ในการติดตั้ง Shorewall ให้พิมพ์บันทัดต่อไปนี้:

sudo apt-get install shorewall

จากนั้นพิมพ์คำสั่งต่อไปนี้:

cd /usr/share/doc/shorewall/default-config
sudo cp interfaces /etc/shorewall/
sudo cp policy /etc/shorewall/
sudo cp rules /etc/shorewall/
sudo cp zones /etc/shorewall/

โดยการใช้คำสั่งในการแก้ไข (เช่น sudo nano หรือ sudo gedit) คุณต้องแก้ไขไฟล์ 4 ไฟล์ ให้เพิ่มบันทัดนี้ก่อนบันทัดสุดท้ายของ /etc/shorewall/interfaces:

net eth0 detect

เพิ่มบันทัดนี้ก่อนบันทัดสุดท้ายของ /etc/shorewall/zones:

net ipv4

คุณจะต้องมีบันทัดที่เขียนว่า "fw firewall" อยู่ใน zones file ให้ใส่บันทัดต่อไปนี้ก่อนบันทัดสุดท้ายของ /etc/shorewall/policy:

fw net ACCEPT net all DROP info all all REJECT info

และเพิ่มบันทัดเหล่านี้ไปยังไฟล์ /etc/shorewall/rules ของคุณหลังจาก SECTION NEW line:

#change "22" to the port you used for ssh if not the default one: ACCEPT net fw tcp 22 ACCEPT net fw tcp www,https

เปลี่ยนจาก 22 ไปเป็นพอร์ตที่คุณจะใช้สำหรับ ssh ให้เอาคำว่า ",https" ออก ถ้าคุณไม่คิดว่าจะติดตั้ง ssh module ใดๆ สำหรับ apache
webserver (เพื่อความปลอดภัยในการทำธุรกรรมซื้อขาย) สุดท้ายแก้ไขไฟล์ /etc/default/shorewall โดยเปลี่ยนบันทัดที่มีคำว่า startup=0 เป็น:

startup=1

คุณสามารถเปิด firewall โดยใช้คำสั่ง:

sudo invoke-rc.d shorewall start

ส่วนตัวเลือกอื่นๆ คุณสามารถผ่านไปยัง invoke-rc.d รวมถึงการ start, stop, และ restart
หมวดหมู่: วิทยาศาสตร์ เทคโนโลยี

ผมจะทำ Server สำหรับให้บาง user สามารถเข้าอินเตอร์เน็ตได้

# iptables -A FORWARD -m mac --mac-source A1:B1:C1:D1:E1:F1 -s 192.168.0.11 -j ACCEPT
# iptables -A FORWARD -m mac --mac-source A2:B2:C2:D2:E2:F2 -s 192.168.0.12 -j ACCEPT
# iptables -A FORWARD -j DROP


คำสั่งเฝ้ามองระบบ Linux

  1. vmstat เช่น vmstat -d
  2. lsof เช่น lsof /bin/bash
  3. ps เช่น ps -aF , ps -ef
  4. คำสั่ง top
  5. คำสั่ง htop ให้ติดตั้งโปรแกรม htop ก่อนด้วยคำสั่ง apt-get htop จากนั้นเรียกใช้งาน htop ผ่าน command line ได้เลย
  6. คำสั่ง fuser
  7. คำสั่ง w และ who
  8. คำสั่ง last
  9. คำสั่ง iptables -L -v
  10. คำสั่ง netstat เช่น netstat -lnup
  11. คำสั่ง iptraf ต้องติดตั้งโปรแกรม iptraf ก่อนด้วยคำสั่ง
    apt-get install iptraf จากนั้นเรียกใช้งานด้วยคำว่า iptraf
  12. คำสั่ง watch เช่น watch arp -e

สงสัยเรื่อง ไฟล์วอล

# iptables -L

หรือจะถามถึงพอร์ตที่เปิดรับ service ทั้งหมด ณ ปัจจุบัน?
$ apt-get install nmap
$ nmap 127.0.0.1
$ nmap your ip

วันอังคารที่ 12 สิงหาคม พ.ศ. 2551

IPTABLES เป็น Firewall พื้นฐานของ Linux เกือบทุก Distro

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

ดูข้อมูลของ CPU

cat /proc/cpuinfo

Ubuntu : iptables rule

เป็นความรู้ที่ได้รับจากพี่ต๊อกถ่ายทอดมาให้อีกที เป็นเรื่องเกี่ยวกับการตั้งกฏของโปรแกรม iptables ใน Ubuntu

ซึ่งโดยปรกตินั้นเจ้า Ubuntu มันก็จะมีโปรแกรม iptables ติดตั้งมาให้เลยตอนที่ลงโปรแกรม แต่ว่ามันไม่ได้สร้างกฏเกณฑ์อะไรมาให้ทั้งนั้น ซึ่งก็คือมันไม่สามารถป้องกันอะไรได้เลย (แล้วมันจะติดมาให้ทำไมหว่า)

เมื่อก่อนเคยใช้ linux ตระกูลพวก Red hat ซึ่งถ้าหากต้องการเขียนกฏเกณฑ์อะไรของ Firewall ก็เข้าไป edit กฏเอาตรงเลยที่ /etc/sysconfig แล้วเปิดไฟล์ iptables edit กฏกันตรงๆ เลย

แต่พอมาใช้ Ubuntu มันกลับไม่มีเจ้าไฟล์นี้มาให้ คราวนี้ก็ไปไม่ถูกเลยสิครับท่าน เลยไม่ได้ทำอะไรกับ firewall ทั้งนั้น

แล้วความซวยก็มาถึง เหมือนนิยายนำ้เน่าเลย

เหมือนโดนล้วงคอ

คุมเครื่่อง Server อยู่มาเป็นปีเป็นชาติ

สุดท้ายโดนจนได้ เจอมือดีมันเข้ามาล้วงข้อมูลในเครื่อง Server เลยแถมมันยังลบข้อมูลเราด้วย

สุดท้ายจับไม่ได้ไล่ไม่ทัน ก็ต้องยอมมันไป ต้องเสียเวลามากู้ระบบอีก เอาข้อมูลกลับมาอีก เหนื่อยเลย

แล้วสุดท้ายก็ถึงบางอ้อว่า นี่เองความสำคัญอย่างหนึ่งของ Firewall ก็เลยต้องหันมาให้ความสำคัญกับมันแบบจริงๆ จังๆ อย่างมากๆ เลย สุดท้ายก็ได้พี่ต๊อกมาสอนเรื่องการสร้างกฏเพื่อป้องกันขึ้นพื้นฐานเอาไว้ให้ พออุ่นใจได้บ้างก็ดีว่าไม่มีเลย

สำหรับ Ubuntu มันไม่มีไฟล์ /etc/sysconfig/iptables ก็ไม่เป็นไร ก็สร้างไฟล์ขึ้นมาเองเลย สร้างไว้ที่ไหนก็ได้ยกตัวอย่างเช่น สร้างไว้ที่ home ของ user ก็ได้ ตั้งชื่อว่า iptables.firewall ก็แล้วกัน โดยการสร้างไฟล์นี้ทำได้โดย

# sudo iptables-save >  iptables.firewall

เราก็จะได้ไฟล์ iptables.firewall ซึ่งจะบรรจุ pattern ของกฏเปล่าๆ ขึ้นมา จากนั้นก็ทำการแก้ไฟล์โดยใสกฏป้องกันเบื้องต้นดังนี้

# pico /home/phisan/iptables.firewall

จากนั้นทำการ edit file นี้โดยใส่ pattern ต่างๆ ดังนี้เช่น


# Generated by iptables-save v1.3.5 on Mon Feb 19 21:47:01 2007
*filter
:INPUT ACCEPT [1665:126682]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [911:121420]
# Completed on Mon Feb 19 21:47:01 2007

#@Allow httpd service ------------------------------------------------
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT

#@Allow admin computer to remote login -----------------------------
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -s xx.xx.xx.xx -j ACCEPT

#@Allow ftp service from any where -----------------------------------
-A INPUT -i eth0 -p tcp -m tcp --dport 21 -s 0/0 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j DROP
-A INPUT -i eth0 -p icmp -j DROP
-A INPUT -i eth0 -j DROP
COMMIT

อธิบายกฏอย่างคร่าว คือ

-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT

คือบริการให้เครื่องต่างๆ สามารถเรียกใช้บริการ ผ่าน port 80 ได้ซึ่งก็คือ port ของ web

-A INPUT -i eth0 -p tcp -m tcp --dport 22 -s xx.xx.xx.xx -j ACCEPT

คือเปิดบริการให้เฉพาะเครื่องที่มีหมายเลย ip xx.xx.xx.xx สามารถทำการ ssh เข้ามาได้เท่านั้น

-A INPUT -i eth0 -p tcp -m tcp --dport 21 -s 0/0 -j ACCEPT

คือเปิดบริการ ftp ได้จากทุกที่ และทุกเครื่อง สามารถเรียกใช้บริการนี้ได้

-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j DROP

คือการปิดให้บริการ ssh ในกรณีที่มี request ที่นอกเหนือจากการอนุญาติโดยกฏข้างบน

-A INPUT -i eth0 -p icmp -j DROP

คือการปิดการให้บริการ ping ไม่ว่าเครื่องใดๆ ที่ทำการ ping เข้ามาจะไม่มีการตอบรับจากเครื่องนี้

-A INPUT -i eth0 -j DROP

คือส่วนที่ใช้สำหรับเก็บตกจากฏต่างๆ ข้างบน คือถ้านอกเหนือจากกฏข้างบนแล้วจะทำการ Drop package ที่วิ่งเข้ามาทั้งหมดทิ้งไป

ความจริงยังมีกฏอีก แต่เอาแค่นี้ก่อนแล้วกัน เดี๋ยวชาวบ้านรู้ไต๋หมดไม่ได้

แต่แค่นี้ยังไม่จบ ต้องทำให้เจ้าตัว iptables รับรู้กฏที่เราสร้างขึ้นโดยการใช้คำสั่ง

# sudo iptables-restore <>

หรือว่าจะคำสั่งนี้ไปใส่ใน rc.local ก็ได้จะได้ทำการ load rule นี้ให้กับ iptables แบบอัตโนมัติ ทุกครั้งที่ boot เครื่องเลย

Iptables : SSH Brute force attack

สำหรับคนที่ใช้ iptables นะครับ กรณีที่ยังไม่ได้ใช้ความสามารถ ของ recent module ใน iptables การป้องกันในอีกวิธีหนึ่งคือ นับจำนวน connection ในช่วงเวลาหนึ่งและ block ซึ่งก็เป็นวิธีที่ใช้การได้ดีในระดับหนึ่ง
ลองเอาไปใช้ดูนะครับวิธีการมีมากมาย ขึ้นอยู่กับความเหมาะสม และ การนำไปใช้นะครับ แต่ไม่ได้หมายความว่าจะดีที่สุด เราก้ต้องศึกษาหาข้อมูลกันต่อไป

iptables -A INPUT -m tcp -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m tcp -p tcp -s My.local.Lan.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -m tcp -p tcp -s Trusted.Internet.Machine --dport 22 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 22 -m state --state NEW -m limit --limit 1/min --limit-burst 2 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 22 -j LOG --log-prefix SSHBRUTE
iptables -A INPUT -m tcp -p tcp --dport 22 -j DROP

ความหมายคร่าวๆ
The effect is that the firewall will only admit two (for example) incoming new SSH connections per minute (it will reset the “burst” counter every minute).

My Firewall Config:

################################
iptables -A INPUT -p tcp --dport 80 -j ACCEPT //apache
iptables -A INPUT -p tcp --dport 443 -j ACCEPT //apache ssl
iptables -A INPUT -p tcp --dport 53 -j ACCEPT //dns - udp for large queries
iptables -A INPUT -p udp --dport 53 -j ACCEPT //dns - udp for small queries
iptables -A INPUT -p tcp --dport 953 -j ACCEPT //dns internal
iptables -A INPUT -p tcp --dport 1080 -j ACCEPT //dante socks server
iptables -A INPUT -d 136.201.1.250 -p tcp --dport 22 -j ACCEPT //sshd
iptables -A INPUT -d 136.201.1.250 -p tcp --dport 3306 -j ACCEPT //mysql
iptables -A INPUT -d 136.201.1.250 -p tcp --dport 8000 -j ACCEPT //apache on phi
iptables -A INPUT -s 136.201.1.250 -p tcp --dport 8080 -j ACCEPT //jboss for ejc
iptables -A INPUT -d 136.201.1.250 -p tcp --dport 993 -j ACCEPT //imaps
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 111 -j ACCEPT //to speed up mail via courier. Identified via logging
iptables -A INPUT -d 136.201.1.250 -p tcp --dport 139 -j ACCEPT //samba
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 143 -j ACCEPT //squirrelmail
iptables -A INPUT -p tcp --dport 4949 -j ACCEPT //munin stats
iptables -A INPUT -p tcp --dport 25 -j ACCEPT //incoming mail
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT //squid
iptables -A INPUT -p udp --dport 161 -j ACCEPT //snmpd
iptables -A INPUT -p icmp -j ACCEPT //Allow ICMP Ping packets.
iptables -A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED -j ACCEPT
iptables -A INPUT -j REJECT
#################################
iptables-save > rules-saved
iptables-restore rules-saved

เอาคำสั่ง iptables-restore <>

ตัวอย่างประมาณนี้ครับ โดยจะมี keyword 4 อันครับคือ pre-up post-up pre-down post-down
รายละเอียด ลอง $ man interfaces ดูครับ

auto eth0
iface eth0 inet static
address blablabla
netmask blablabla
gateway blablabla
post-up iptables-restore < rulesfile
pre-down iptables-save > rulesfile




debian: iptables

iptables บนเดเบียน มี 2 วิธี (จริง ๆ มีหลายวิธีมาก)

  1. แบบใช้ iptables-save + iptables-restore
    รันคำสั่งเพื่อสร้างกฎต่าง ๆ
    # iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    # iptables -A FORWARD -s 192.168.0.0/16 -j ACCEPT
    # iptables -A FORWARD -d 192.168.0.0/16 -j ACCEPT
    # iptables -A FORWARD -s ! 192.168.0.0/16 -j DROP

    เก็บกฎไว้ที่ไฟล์ /etc/iptables/rules
    # mkdir -p /etc/iptables
    # iptables-save > /etc/iptables

    นำกฎมาใช้ตอนเปิดเครื่องใหม่ ผ่าน /etc/network/interfaces
    # vi /etc/network/interfaces

    ...
    auto eth1
    iface eth1 inet static
    address 192.168.5.3
    netmask 255.255.255.0
    network 192.168.5.0
    broadcast 192.168.5.255
    gateway 192.168.5.1
    post-up /sbin/iptables-restore < /etc/iptables/rules
    pre-down /sbin/iptables-save > /etc/iptables/rules

    ...
  2. แบบใช้สคริปต์
    สร้างสคริปต์เก็บไว้คือ /usr/local/bin/d.iptables
    # vi /usr/local/bin/d.iptables
    #!/bin/sh
    INTERFACE=eth1
    INT_NET=192.168.0.0/16
    /sbin/iptables -F > /dev/null
    /sbin/iptables -t nat -A POSTROUTING -o $PPP_INT -j MASQUERADE
    /sbin/iptables -A FORWARD -s $INT_NET -j ACCEPT
    /sbin/iptables -A FORWARD -d $INT_NET -j ACCEPT
    /sbin/iptables -A FORWARD -s ! $INT_NET -j DROP

    # chmod 755 /usr/local/bin/d.iptables

    นำกฎมาใช้ตอนเปิดเครื่องใหม่ ผ่าน /etc/network/interfaces
    # mkdir -p /etc/iptables/
    # vi /etc/network/interfaces

    ...
    auto eth1
    iface eth1 inet static
    address 192.168.5.3
    netmask 255.255.255.0
    network 192.168.5.0
    broadcast 192.168.5.255
    gateway 192.168.5.1
    post-up /usr/local/bin/d.iptables
    pre-down /sbin/iptables-save > /etc/iptables/rules

    (เวลาจะปรับปรุงสคริปต์ เอาเนื้อความจาก /etc/iptables/rules มาใช้ในการปรับปรุงได้)

ICMP iptables

หลังจากลงเสร็จ เราก็มาเริ่มกันเลยดีกว่า
ก่อนอื่น สมมุติว่าเราอยากจะปิดเครื่องเราโดยสมบูรณ์แบบ แบบว่าชาตินี้ข้าไม่ต้องการคุยกะชาวบ้าน ชาวช่องอีกเลย ก็ให้สั่งว่า
> iptables -A INPUT -i eth0 -j DROP
ถ้าสั่งแบบนี้ แปลว่าเราไม่รับ package ใดๆ ที่เข้ามาทาง eth0 เลย (ก็ไม่ฟังชาวบ้านหน่ะละ)

note: eth0 ก็คือ LAN Card ตัวที่ 1 ของเรา ถ้ามีตัวอื่นๆ อีกก็ไล่ไปเรื่อย
note2: ถ้าไม่ได้อยู่หน้า console อย่าไปสั่ง command นี้เชียว เดี๋ยวจะเป็นเรื่อง

ที นี้มันเป็นไปได้หรือ? ที่จะไม่คุยกะชาวบ้านชาวช่องเลย คำตอบคือ เป็นไปไม่ได้ครับ แล้วทีนี้จะทำไงละ? ก็ต้องปิดเป็นจุดๆ ไป เช่น สมมุติว่า เราไม่อยากให้ชาวบ้านเค้า ping เราเจอ เราก็จะสั่งว่า

> iptables -A INPUT -p icmp -j DROP
มัน แปลว่า ถ้ามีอะไรก็ตามที่เป็น icmp เข้ามา ก็ให้ drop ทิ้งไป ไม่ต้องสนใจ ที่นี้ ถ้าสมมุติว่าเรามี LAN Card หลายตัว เกิดอยากปิดแค่บางตัวจะทำยังไง เราก็ต้องผสมคำสั่งเข้าไปซิครับ ย้อนกลับไปดูอันบนกันหน่อย ผมมี -i eth0 อยู่ใช่ม่ะ? เราก็เอาไอ้ -i eth0 นี่ละ มาใส่เข้าไปเลย กลายเป็น

> iptables -A INPUT -i eth0 -p icmp -j DROP
คราวนี้มันก็จะแปลได้ว่า ถ้ามี icmp เข้ามาทาง eth0 เมื่อไหรให้ drop ทิ้งไป แต่ถ้ามาทางอื่นๆ ก็ไม่ต้องทำอะไร (คือปล่อยไปตามปกติ)

คราวนี้มาดูความหมายกันมั่งว่าไอ้ parameter แต่ละตัวเนี่ย มันคืออะไรกันบ้าง? เริ่มจาก

: -A INPUT ไอ้เข้า -A INPUT เนี่ย มันหมายถึงขาเข้า ทีนี้มีขาเข้ามันก็ต้องมีขาออก ก็เปลี่ยนจาก -A INPUT เป็น -A OUTPUT เท่านั้นเองครับ ถ้าเราใช้ -A ต่อๆ กันหลายๆ คำสั่ง มันก็จะเอา rule ไปต่อท้ายเรื่อยๆ ถ้าหากต้องการแทรก ให้ใช้ -I INPUT 1 แทน ซึ่งถ้าใส่ 1 มันจะเติมเข้าไปเป็นตัวแรกสุดเลย

: -i eth0 ใช้ได้กะ -A INPUT เท่านั้น เอาไว้ระบุว่าจะให้ดู package ที่ LAN Card ตัวไหน อีกตัวที่เป็นไปได้คือ -o eth0 ก็จะใช้ได้กะ -A OUTPUT เท่านั้นเหมือนกัน

: -p icmp ไอ้ตัวนี้ละที่จะเป็นตัวกำหนดเลยว่าเราจะ monitor protocal ประเภทไหน เช่น icmp (ping), tcp, udp หรือว่าอื่นๆ ถ้าเป็น tcp หรือว่า udp เราสามารถกำหนด port เพิ่มเติมได้ด้วย parameter -dport 80 หรือ -sport 80 สองตัวนี้ต่างกันตรงที่ว่า ตัวนึงไว้ใช้กะ -A INPUT (-dport 80) ส่วนอีกตัวไว้ใช้กะ -A OUTPUT (-sport 80)

: -J DROP ไอ้เจ้าตัวนี้ละสำคัญที่สุด มันจะเป็นตัวที่บอกว่า ถ้ามี package เข้ามาตามเงื่อนไขที่ระบุไว้ในบรรทัดนี้แล้ว จะให้ทำยังไง เป็นไปได้คือ DROP, ACCEPT, REJECT, REDIRECT ซึ่งที่เราสนใจจะมีสองตัวคือ DROP กะ ACCEPT ความหมายก็ตามชื่อมันเลย DROP ก็ช่างหัวมัน ทิ้งไปโล้ด ส่วน ACCEPT ก็รับมาเข้ามาแล้วจะจัดการยังไงต่อเป็นอีกเรื่องนึง

: -F อันนี้รุนแรงสุดละ มันคือคำสั่งที่จะลบ rule ทั้งหมดที่เคยทำไว้ ถ้าเกิดทำๆ ไปแล้วเจ๊งก็สามารถ reset ได้ด้วยวิธีนี้ครับ

วิธี set iptables บน linux แบบง่ายๆ

ACCEPT = ยอมให้ผ่าน
DROP = ไม่สนใจแพ็กเกต
REJECT = ไม่สนใจเหมือนกัน แต่ จะแจ้งให้ เราทราบ
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.0.0/24 -j DROP
iptables -A OUTPUT -p tcp -d 192.168.0.0/24 -j DROP
#### ถ้าต้อง การให้ firwall ปล่อยให้ port ไหน ผ่าน ให้ เปลี่ยน ตัวเลขของ port
iptables -A FORWARD -p tcp -s 192.168.0.0/24 --destination-port 80 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.0.0/24 --destination-port 80 -j ACCEPT
#### Block MSN
iptables -A INPUT -p tcp -s 192.168.0.0/24 --destination-port 1836 -j DROP
iptables -A INPUT -p tcp -d 192.168.0.0/24 --destination-port 1836 -j DROP
iptables -A FORWARD -p tcp -s 192.168.0.0/24 --destination-port 1836 -j DROP
iptables -A FORWARD -p tcp -d 192.168.0.0/24 --destination-port 1836 -j DROP

คลังบทความของบล็อก