แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - golfreeze

Pages: 1 ... 140 141 [142] 143 144 ... 146
2116
command , shell script ,tool , crontab / Re: tcpdump and tshark howto na ja
« on: มกราคม 23, 2011, 12:55:50 AM »
### มี tool อีกตัวครับมาแนะนำ ชื่อ

mtr

เป็นการผสมผสาน ระหว่าง traceroute และ ping ถ้าคุณชอบใช้ traceroute ในการเช๊ค hop ของ link แล้วละก็
น่าจะชอบตัวนี้ ครับ มันสามารถ ping ไปยัง node ที่ traceroute ไปถึงได้อีก

ลองดูน่ะครับ

### BSD
#mtr google.co.th

My traceroute [v0.72]
ns1.packetlove.com (0.0.0.0) Thu Feb 25 10:40:09 2010
Keys: Help Display mode Restart statistics Order of fields quit
Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 203.146.215.124 0.0% 3 2.0 25.5 2.0 57.0 28.3
2. 210.1.0.164 0.0% 3 2.1 2.2 0.4 3.9 1.7
3. 210.1.3.225 0.0% 3 1.5 2.3 1.5 3.9 1.4
4. 210.1.46.228 0.0% 3 1.6 5.6 1.6 10.0 4.2
5. 202.183.136.134 0.0% 2 10.0 9.9 9.8 10.0 0.2
6. 202.183.136.77 0.0% 2 321.2 195.6 69.9 321.2 177.8
7. 202.183.136.82 0.0% 2 38.5 46.7 38.5 54.9 11.6
8. 202.183.136.98 0.0% 2 36.1 40.5 36.1 44.9 6.2
9. 209.85.243.156 0.0% 2 37.0 39.7 37.0 42.4 3.8
10. 209.85.254.179 0.0% 2 47.6 42.2 36.8 47.6 7.6
11. sin01s01-in-f104.1e100.net 0.0% 2 37.3 41.2 37.3 45.2 5.6


##Tshark for freebsd
command

#tshark -i bce0 -f "host xxx.xxx.xxx.xxx or host yyy.yyy.yyy.yyy " -w file.cap

2117
command , shell script ,tool , crontab / tcpdump and tshark howto na ja
« on: มกราคม 23, 2011, 12:55:32 AM »
วันนี้ ได้ลองใช้ tshark ดูครับ

การทำงานคล้ายๆ tcpdump แต่มีในส่วนของ data และก็ header packet ที่ค่อนข้างละเอียดกว่า tcpdump ครับ

การใช้งานก็คือ เริ่มลงไปก่อน ผมลงกับ debian นะครับ

#apt-get update
#apt-get install tshark

ก็เรียบร้อยครับผม

ต่อมาเริ่ม capture packet ที่มาจาก ip 192.168.33.1 port 25 แล้วก็เก็บไฟล์ ที่ capture ได้ที่ ไฟล์
ไฟล์หนึ่งเพื่อนำไปวิเคราะห์ ผลโดย

#tshark -i eth0 tcp port 25 and host 192.168.33.1 -w /tshark/tshark_19_20100217_03.cap

แต่ถ้าใช้เป็น tcpdump ก็ดูได้จาก command โดยที่จะ filter source ip ที่มาจาก 192.168.33.1 นี้นะครับ
แล้วเก็บไฟล์ไว้ที่ test.cap เพื่อไปวิเคราะห์ต่อไป
#tcpdump src host 192.168.33.1 and port 8080 -w test.cap

หรือต้องการ เก็บเป็นไฟล์ที่สามารถดูเป็นข้อมูลได้เลยก็

#tcpdump src host 192.168.33.1 and port 8080 > test.txt

ในกรณี ต้องออกจาก screen ก่อนนะครับ ไม่งั้นมันจะ print ข้อมูลออกมาเลย

2118
Mail issue , problem , configuration / Re: update clamav in debian and freebsd
« on: มกราคม 23, 2011, 12:55:07 AM »
##update by yum

cd /root
wgethttp://dev.ffpx.org/download/clamav-toaster-0.96.0-1.3.35.src.rpm
yum install rpm-build
yum install bzip2-devel gmp-devel zlib-devel curl-devel libidn-devel
rpmbuild --rebuild --with cnt50 clamav-toaster-0.96.0-1.3.35.src.rpm
mv /usr/src/redhat/RPMS/i386/clamav-toaster-0.96.0-1.3.35.i386.rpm .
rpm -Uhv clamav-toaster-0.96.0-1.3.35.i386.rpm

2119
Mail issue , problem , configuration / update clamav in debian and freebsd
« on: มกราคม 23, 2011, 12:55:00 AM »
ทั้งสอง os ผมจะให้มันอัฟเดทผ่าน source กับ port นะครับเพื่อง่ายและเป็น มาตรฐานของ packetlove.com

##Debian

เพิ่มใน sources.list

#clamav
deb http://volatile.debian.org/debian-volatileetch/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatileetch/volatile main contrib non-free

แล้วสั่ง
#apt-get install clamav clamav-daemon clamav-freshclam clamav-base

แค่นี้ มันก็จะทำการ อัฟเดทให้ครับ

ส่วน option ที่ถามให้ตอบว่า update configuration ไปด้วยเลยน่ะครับ

แล้วลองใช้ dpkg -l | grep \"clamav\"

ก็จะได้ version ใหม่มาแล้วครับผม

###Freebsd
สั่งอัฟเดท port ก่อนนะครับ
#portsnap fetch
#portsnap extract

#cd /usr/ports/security/clamav
#make deinstall

#make install clean (เลือก option 5 ตัวบนครับ มี ARC,ARJ,LHA,UNZOO,UNRAR)

#/usr/local/etc/rc.d/clamav-clamd restart

2120
สมมติเวลา สั่ง

#apt-get update

แล้วเกิด error อย่างข้างล่างนี้ น่ะครับ

Fetched 58.9kB in 15s (3780B/s)
Reading package lists... Done
W: GPG error: http://volatile.debian.orgetch/volatile Release: The following signatures couldn't
be verified because the public key is not available: NO_PUBKEY DFD993306D849617
W: Duplicate sources.list entry http://volatile.debian.orgetch/volatile/main Packages
(/var/lib/apt/lists/volatile.debian.org_debian-volatile_dists_etch_volatile_main_binary-amd64_Packag
es)
W: Duplicate sources.list entry http://volatile.debian.orgetch/volatile/contrib Packages
(/var/lib/apt/lists/volatile.debian.org_debian-volatile_dists_etch_volatile_contrib_binary-amd64_Pac
kages)
W: Duplicate sources.list entry http://volatile.debian.orgetch/volatile/non-free Packages
(/var/lib/apt/lists/volatile.debian.org_debian-volatile_dists_etch_volatile_non-free_binary-amd64_Pa
ckages)
W: You may want to run apt-get update to correct these problems

เหมือนกับว่า เครื่อง server เราไม่มี key แก้ไขโดย

#gpg --keyserver subkeys.pgp.net --recv-keys DFD993306D849617

#gpg --armor --export DFD993306D849617 | apt-key add -

#apt-get update

ก็หายแล้วครับ

แล้วถ้าจะอัฟเดท package ใหม่ๆ ก็ ex.clamav

#apt-get install clamav clamav-daemon clamav-base clamav-freshclam

เดี๋ยวมันจะวิ่งอัฟเดท version ให้ครับผม

2121
### ถ้าจะใช้ syslog-ng ต้องลบ syslog ออกน่ะครับผมเพราะไม่งั้น os จะสับสนกันเองครับ

install syslog-ng
#apt-get install syslog-ng

ลบ script syslog ออกไม่ให้รัน ตอน reboot server
#update-rc.d -f syslog remove

ต่อไป เริ่ม config syslog-ng.conf
#vi /etc/syslog-ng/syslog-ng.conf

หาว่ามี config mail.log หรือไม่
destination df_mail { file("/var/log/mail.log"); };

#mail.* -/var/log/mail.log
log {
source(s_all);
filter(f_mail);
destination(df_mail);
};

ถ้ามีครบ ก็ ไป config logrotate ได้เลยครับ
#vi /etc/logrotate.d/syslog-ng

/var/log/mail.info {
rotate 90
daily
missingok
notifempty
compress
}

/var/log/mail.log {
rotate 90
daily
missingok
notifempty
compress
# delaycompress
}

/var/log/mail.warn {
rotate 90
daily
missingok
notifempty
compress
}

แค่นี้ ครับ

ข้อแม้ ห้ามมีไฟล์ที่ เขียน config อย่างงี้ซ้ำกันใน path "/etc/logrotate.d/"

น่ะครับไม่งั้น เวลาสั่ง logrotate มันจะขึ้นว่า log file มัน duplicate กัน

เสร็จแล้วการ test สั่งให้ logrotate ทำงาน

#logrotate /etc/logrotate.conf

รอสักพัก แล้วไปดูใน path /var/log ก็จะเห็นมัน lorate log ให้ครับผม

ส่วน log file ตัวอื่นก็ทำในลักษณะเดียวกันน่ะครับ

ส่วนการรัน log rotate จะทำงานใน cron.daily ทุกวันอยู่แล้ว ไม่ต้องไป set crontab เพิ่มน่ะครับผม
ถ้าจะเช๊คก็ดูได้ที่
#more /etc/cron.daily/logrotate




ถ้ามีข้อสงสัยก็โฟสไว้ได้น่ะครับผม
golfreeze[at]packetlove.com

2122
all application on unix knowledges by golfreeze / Re: install heartbeat on freebsd
« on: มกราคม 23, 2011, 12:53:39 AM »
initdead 30
ระบุว่า อีก host ตายในเวลา 30 วินาที กรณี boot เครื่องมาใหม่ แล้วไม่เจออีก node

ให้ทำการ restart service heartbeat พร้อมกันใหม่
แล้วทั้งสองเครื่องจะได้ share connection กัน

2123
all application on unix knowledges by golfreeze / install heartbeat on freebsd
« on: มกราคม 23, 2011, 12:53:18 AM »
##heartbeat port
cd /usr/ports/sysutils/heartbeat/

make config
make install clean


config on ha.cf
#vi /usr/local/etc/ha.d/ha.cf

logfile /var/log/ha-log
debugfile /var/log/ha-debug
logfacility local0
bcast bce1
baud 9600
serial /dev/cuad0
auto_failback on
node mysql0.test.server
node ldap01.test.server
ping 10.0.0.1
respawn hacluster /usr/local/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
keepalive 2
deadtime 10
warntime 5
initdead 30

-----------------------------------------------------------------
อธิบาย ค่า config

logfile /var/log/ha-log
ให้เปิด logfile ไปที่ไฟล์ /var/log/ha-log
debugfile /var/log/ha-debug
ให้เปิด debugfile ไปที่ไฟล์ /var/log/ha-debug
logfacility local0
ให้กำหนดการโชว์ log เป็น 0
bcast bce1
ให้ broadcast packet สำหรับ heartbeat ไปถึงกันผ่าน bce1
baud 9600
ให้เปิดใช้งาน serial port ผ่าน rate 9600
serial /dev/cuad0
ให้เปิดใช้งาน device serial port ที่ cuad0 ปกติ freebsd ใช้ตัว device นี้
auto_failback on
กำหนดให้ทำการ auto failback กรณีตัว master ที่ตายกลับมาทำงานได้ใหม่
node mysql0.test.server
node mysql1.test.server
ชื่อ เครื่องที่ทำการ รัน heartbeat และใช้งาน heartbeat
ping 10.0.0.1
ให้เช็คปิงไปที่ gateway node ถ้า master ping ไม่ได้จะ swap การทำงานไปที่ slave node
respawn hacluster /usr/local/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
เปิดให้ใช้งาน ipfail ในการเช๊ค heartbeat ด้วย
keepalive 2
deadtime 10
ค่าตัวนี้ ใช้ในการระบุหาก master node ตาย ให้ทำการรอประมาณ 10 วินาที แล้วจะย้าย vip ไปที่ slave
node
warntime 5
เตือนเวลา heartbeat ไม่สามารถคุยกันได้
initdead 30
ระบุว่า อีก host ตายในเวลา 30 วินาที กรณี boot เครื่องมาใหม่ แล้วไม่เจออีก node

-----------------------------------------------------------------
###create authkeys file , input below command on shell prompt
( echo -ne "auth 1\n1 sha1 "; \
  dd if=/dev/urandom bs=512 count=1 | openssl md5 ) \
  > /etc/ha.d/authkeys

chmod 0600 /usr/local/etc/ha.d/authkeys

หรือเข้าไป ทำ md5 ที่ link ข้างล่างนี้ก็ได้ครับ
http://7thspace.com/webmaster_tools/online_md5_encoder.html
-----------------------------------------------------------------

#### create file \"haresources\" to share packet
mysql0.test.server 10.0.0.2

ทำการ config ที่ mysql1 ให้มีค่า config เหมือนกันทั้งสามไฟล์
ha.cf
authkeys
haresources

2124
เคยเจอ case ว่าเครื่องเพื่อน โดน hack จาก script
แล้วทำการเปลี่ยนค่า permission ของไฟล์ ls ครับ
เช๊คจากคำสั่ง
#cd /bin
#lsattr
------------------ ./tar
------------------ ./netcat
------------------ ./bzcat
------------------ ./dd
------------------ ./true
------------------ ./zforce
------------------ ./mt
s---ia------------ ./ls

พบว่าค่า attribute ของ command ls ถูกเปลี่ยน
แก้ไขโดย
#chattr -i ls
#chattr -a ls
#chown root:root ls

ผมทำการ copy ไฟล์ ls จากเครื่องอื่นที่เป็น distro เดียวกันมาลงครับ
#cp ls_backup ls
#chattr -s ls

ปกติไฟล์พวกนี้ ไม่สามารถเปลี่ยน owner ได้ตรงๆ เพราะมันติดสิทธิ์ของไฟล์อยู่ ต้องแก้ไขด้วยวิธีข้างบน

แค่นี้ก็ใช้งานได้แล้ว

แล้วก็ตามหาตัวผู้ร้ายต่อไป อิอิ

2125
1 Preliminary Note

In this example I use a Debian Sarge system, and I will show how to convert the mysql-zrm rpm
package to a .deb file and install that one. The procedure is the same for Ubuntu.


2 Alien Installation

Alien is available in the normal Debian repositories, so we can install it like this:

apt-get install alien


3 Converting .rpm To .deb

Next we download the current mysql-zrm rpm package (1.1-1 at the time of this writing):

cd /tmp
wget http://www.zmanda.com/downloads/community/ZRM-MySQL/1.1/Linux/MySQL-zrm-1.1-1.noarch.rpm

To convert it into a .deb package, we simply run

alien MySQL-zrm-1.1-1.noarch.rpm

Afterwards, run

ls -l

in the /tmp directory, and you'll see that alien has created the file mysql-zrm_1.1-2_all.deb.
You'll also notice that alien has counted up the version number, it's now 1.1-2 instead of
1.1-1. If you want to keep the original version number, you must use the -k switch:

alien -k MySQL-zrm-1.1-1.noarch.rpm

will create the file mysql-zrm_1.1-1_all.deb.

To install the new .deb file, we use dpkg -i:

dpkg -i mysql-zrm_1.1-1_all.deb

Now mysql-zrm is installed and fully functional (you still might have to edit its configuration file
though).

If you want to save the dpkg -i step, you can have alien install the package. The command

alien -i MySQL-zrm-1.1-1.noarch.rpm

would convert the original rpm package and immediately install it.

You see, converting .rpm files to .deb files is very easy. You can have a look at

man alien

to learn about what else you can do with alien.

2126
all application on unix knowledges by golfreeze / Re: set iptables by golfreeze
« on: มกราคม 23, 2011, 12:50:19 AM »
Iptables command

Iptables คืออะไร???

Iptables คือเครื่องมือของผู้ดูแลระบบที่ช่วยในการ packet filteringและการทำNAT ครับ
ซึ่งตัวiptablesไ้รับการยอมรับว่ามีประสิทธิภาพที่สูงมาก ถูกใช้งานในการตรวจสอบตารางของ ip packet
filter rule ใน Linux kernel

การใช้งานนั้นสามารถป้อนคำสั่งได้โดยตรงผ่านทาง command line หรือจะเซฟเป็น firewall script ใน dd-wrt
administration panel ก็ได้ แต่ที่เรารู้ๆกันอยู่ว่าคำสั่งของ iptables นี้มีค่อนข้างมาก
วันนี้ผมเลยรวบรวมเอามาฝากกันครับ

เริ่มที่การใช้งานทั่วๆไปครับ

iptables -[AD] chain rule-specification [options]
iptables -[RI] chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LFZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)

command ทั่วๆไป

–append -A chain Append to chain
–delete -D chain Delete matching rule from chain
–delete -D chain rulenum
Delete rule rulenum (1 = first) from chain
–insert -I chain [rulenum]
Insert in chain as rulenum (default 1=first)
–replace -R chain rulenum
Replace rule rulenum (1 = first) in chain
–list -L [chain] List the rules in a chain or all chains
–flush -F [chain] Delete all rules in chain or all chains
–zero -Z [chain] Zero counters in chain or all chains
–new -N chain Create a new user-defined chain
–delete-chain
-X [chain] Delete a user-defined chain
–policy -P chain target
Change policy on chain to target
–rename-chain
-E old-chain new-chain
Change chain name, (moving any references)

Options

–proto -p [!] proto
protocol: by number or name, eg. `tcp’
–source -s [!] address[/mask]
source specification
–destination -d [!] address[/mask]
destination specification
–sport [!] port[:endport]
source port (use `:’ when specifying range)
–dport [!] port[:endport]
destination port
–in-interface -i [!] input name

network interface name (
  • for wildcard)

–jump -j target
target for rule (may load target extension)
–match -m match
extended match (may load extension)
–state state
connection states to match:
INVALID NEW ESTABLISHED RELATED
–tcp-flags [!] mask
match when the TCP flags are as specified:
SYN ACK FIN RST URG PSH ALL NONE
–numeric -n numeric output of addresses and ports
–out-interface -o [!] output name

network interface name (
  • for wildcard)

–table -t table table to manipulate (default: `filter’)
–verbose -v verbose mode
–line-numbers print line numbers when listing
–exact -x expand numbers (display exact values)
–fragment -f match second or further fragments only
–modprobe= try to insert modules using this command
–set-counters PKTS BYTES set the counter during insert/append
–version -V print package version

MAC v1.3.7 options:
–mac-source [!] XX:XX:XX:XX:XX:XX
Match source MAC address

ทีนี้เรามาลองใช้งานจริงๆกันบ้าง อันแรกเลยคือ ทำ Port forwarding ไปที่ IP ที่เรากำหนด จะได้ command
ดังนี้ครับ

iptables -t nat -I PREROUTING -p tcp -d $(nvram get wan_ipaddr) –dport 443 -j DNAT –to
192.168.1.2:443
iptables -I FORWARD -p tcp -d 192.168.1.2 –dport 443 -j ACCEPT

Block IP ที่กำหนดไม่ให้เราเข้าไป access

iptables -I FORWARD -d 123.123.123.123 -j DROP

อันนี้คือห้ามไม่ให้เครื่องของเราทำการติดต่อกับ IP ที่กำหนดหากมีการพยายามแหกกฎก็ให้ทำการเก็บ log
ไว้ด้วย

iptables -I OUTPUT -d 239.255.255.250 -j logdrop

ทำการ block SMTP trafiic ขงทุกเครื่องยกเว้นเฉพาะเครื่องที่เรากำหนดเท่านั้น

/usr/sbin/iptables -I FORWARD 1 -p tcp -d safe.server1.com –dport 25 -j logaccept
/usr/sbin/iptables -I FORWARD 2 -p tcp -d safe.server2.com –dport 25 -j logaccept
/usr/sbin/iptables -I FORWARD 3 -p tcp –dport 25 -j logdrop

ิblock SMTP ฝั่งขาออก

iptables -I FORWARD 1 -p tcp -s 192.168.1.2 –dport 25 -j ACCEPT
iptables -I FORWARD 2 -p tcp -s 192.168.1.1/24 –dport 25 -j REJECT

อนุญาตเฉพาะโดเมนที่กำหนดเท่านั้นที่ให้ติดต่อทาง HTTP ได้

iptables -I FORWARD 1 -p tcp -d dd-wrt.com –dport 80 -j ACCEPT
iptables -I FORWARD 2 -p tcp –dport 80 -j DROP

ฺBlock ทุกๆ traffic ยกเว้น http, https และ ftp

iptables -I FORWARD 1 -p tcp -m multiport –dport 21,80,443 -j ACCEPT
iptables -I FORWARD 2 -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 3 -j DROP

จำกัดการเข้าใช้งานโดย MAC Address

insmod ipt_mac
iptables -I INPUT -p tcp –dport 80 -m mac ! –mac-source 00:12:34:56:78:9A -j REJECT –reject-with
tcp-reset

เปลี่ยนค่า Time To Live (TTL)

iptables -t mangle -I POSTROUTING -o vlan1 -j TTL –ttl-set 128

ขอบคุณเว็บhttp://www.easyzonecorp.net

2127
all application on unix knowledges by golfreeze / Re: set iptables by golfreeze
« on: มกราคม 23, 2011, 12:50:02 AM »
#-----------------------------IPTABLES-ZONE------------------------------
#Flush
iptables -F
iptables -X

#NAT
iptables -t nat -A POSTROUTING -d ! 192.168.1.0/24 -j MASQUERADE
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT

#DROP
iptables -A FORWARD -j DROP

#Transparent Proxy
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 8080

#Firewall
iptables -A INPUT -s 192.168.1.0/24 -d 0/0 -p tcp --dport 8080 --syn -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 0/0 -p tcp --dport 139 --syn -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 0/0 -p tcp --dport 21 --syn -j ACCEPT

#------EAK
iptables -A INPUT -p ALL -s! 192.168.1.0/24 --dport 834 -j DROP
iptables -A INPUT -p ALL -s! 192.168.1.0/24 --dport 835 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 111 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 111 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 515 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 515 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2049 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2049 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 6000:6009 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 7100 -j DROP
iptables -A INPUT -p tcp --sport telnet -j DROP
iptables -A INPUT -p udp --sport telnet -j DROP
iptables -A FORWARD -p tcp --sport 137:139 -j DROP
iptables -A FORWARD -p udp --sport 137:139 -j DROP

#Blaster Worm
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 135 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 135 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 69 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 445 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 445 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 4444 -j DROP

#Sobig Worm
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 990:999 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 8998 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 123 -j DROP

#----------- virus
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2018:2021 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2018:2021 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 36794 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 3127:3198 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 137:138 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 593 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 6777 -j DROP#udp
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2535 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 80 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 81 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 37 -j DROP#udp
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 1434 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 6789 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 5554 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 9996 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2745 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 8866 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2556 -j DROP

#---------msn
iptables -A INPUT -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 1863 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 44802 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 9943 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 2268 -j DROP

#-----Block Ip Spoofing and any outside packets (protect localhost)
iptables -A INPUT -p ALL -i eth1 -j LOG --log-level DEBUG
iptables -A INPUT -j DROP \! -i eth1 -s 192.168.1.0/24
iptables -A FORWARD -j DROP \! -i eth1 -s 192.168.1.0/24
iptables -A INPUT -j DROP -i \! lo -s 127.0.0.0/255.0.0.0
iptables -A FORWARD -j DROP -i \! lo -s 127.0.0.0/255.0.0.0

#------Prevent outside create connection
iptables -A INPUT -m state --state NEW -i eth0 -j DROP
iptables -A FORWARD -m state --state NEW -i eth0 -j DROP

#---------- irc
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --dport 6660:6669 -j DROP
iptables -A FORWARD -p tcp --dport 7000 -j DROP

#iptables -A FORWARD -p tcp -s 192.168.1.0/24 -i eth0 -j DROP
#iptables -A FORWARD -p udp -s 192.168.1.0/24 -i eth0 -j DROP
#iptables -A FORWARD -p tcp -s 192.168.100/24 -i eth0 -j DROP
#iptables -A FORWARD -p udp -s 192.168.100/24 -i eth0 -j DROP
#---- qq
iptables -I INPUT -p udp --dport 4000 -j DROP #qq
iptables -I FORWARD -p udp -s 0/0 -d 0/0 --dport 4000 -j DROP # qq
iptables -I INPUT -s 203.195.110.243 -j DROP
iptables -I FORWARD -d 203.195.110.243 -j DROP


#-------------- backdoor ----------
iptables -A OUTPUT -o eth0 -p tcp --dport 31337 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 31335 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 27444 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 27665 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 20034 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 9704 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 1433 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 2049 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 2432 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 5999 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 6068 -j DROP
iptables -A OUTPUT -o eth0 -p tcp --sport 6900 -j DROP

#Block Ping
iptables -A INPUT -p icmp -s 0.0.0.0/0 -d 0.0.0.0/0 -j DROP

2128
all application on unix knowledges by golfreeze / Re: set iptables by golfreeze
« on: มกราคม 23, 2011, 12:49:51 AM »
set iptalbes block ssh

iptables -N SSH_CHECK
iptables -A INPUT -p tcp -dport 22 -m state -state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m state -state NEW -m recent -set -name SSH
iptables -A SSH_CHECK -m state -state NEW -m recent -update -seconds 60 -hitcount 4 -name SSH
iptables -A SSH_CHECK -m state -state NEW -m recent -rcheck -seconds 60 -hitcount 4 -name SSH -j
DROP

2129
all application on unix knowledges by golfreeze / Re: set iptables by golfreeze
« on: มกราคม 23, 2011, 12:49:42 AM »
พอดีมี โจทย์มาให้ก็คือ ทำเป็น nat server ครับโดยที่

10.x.x.6 forward packet ทุกport ไปที่ 192.x.x.6
10.x.x.7 forward packet ทุกport ไปที่ 192.x.x.7

แล้วตัว load balance ก็ให้ส่ง packet เข้า
10.x.x.52 ส่ง load ไปที่ 192.x.x.52

เราก็ set ได้ดังนี้
เริ่มต้น ต้องสร้าง ip aliase ไว้ก่อนครับ ผมเลือกใช้เป็น debian เพราะเป็น linux ซึ่งมันใช้งานพวก
network ดีมากๆ อยู่แล้ว
#ifconfig eth0:0 10.x.x.6 netmask x.x.x.x up
#ifconfig eth0:0 10.x.x.7 netmask x.x.x.x up

เสร็จแล้วก็ทำ การเขียน rule ของ nat โดยใช้ iptables ครับ
##ขาเข้ามา
#iptables -t nat -A PREROUTING -j DNAT -i eth0 -d 10.x.x.6 --to 192.x.x.6
#iptables -t nat -A PREROUTING -j DNAT -i eth0 -d 10.x.x.7 --to 192.x.x.7

##ขาออกครับ
#iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.x.x.6 --to 10.x.x.6
#iptables -t nat -A POSTROUTING -j SNAT -o eth0 -s 192.x.x.7 --to 10.x.x.7

2130
all application on unix knowledges by golfreeze / Re: set iptables by golfreeze
« on: มกราคม 23, 2011, 12:49:32 AM »
I. Filter Table
เป็นตารางที่ใช้งานมากที่สุด เป็นจุดที่ใช้ในการตรวจสอบและควบคุมการผ่านเข้าออกของ packet
ถ้าหากจะพิจารณาการไหลเวียนของ packet เฉพาะในส่วนของ filter table โดยไม่สนใจ table อื่นๆ นั้น
ก็พอจะแสดงให้เห็นได้ดังภาพที่ 1 โดยเมื่อ packet เข้ามาในระบบ มันจะเข้าไปยัง routing decision
เพื่อตัดสินใจว่า packet จะถูกส่งไปที่ใด

* ในกรณีที่ packet ถูกส่งผ่านไปยังเครื่องอื่น packet นั้นจะต้องถูกตรวจสอบโดย rule ใน FORWARD
chain
* ถ้า packet นั้น มีเป้าหมายเป็นเครื่องปัจจุบัน (เครื่องที่รัน iptables อยู่นี้ เรียกอีกอย่างว่า
linux box) ตัว packet จะถูกตรวจสอบโดย rule ใน INPUT chain
* และในกรณีที่ packet ถูกสร้างจากเครื่องปัจจุบัน (linux box) ตัว packet จะถูกตรวจสอบจาก rule ใน
OUTPUT chain ก่อนที่จะถูกส่งออกไป


รูปที่ 1 แสดงให้เห็นว่า packet มีเส้นทางการเดินทางอย่างไรเมื่อเข้ามาในระบบ (filter table)

ดังภาพ iptables ประกอบไปด้วย built-in chain จำนวน 3 chain ซึ่งไม่สามารถลบได้คือ INPUT, OUTPUT,
FORWARD เมื่อเครื่องคอมพิวเตอร์เริ่มทำงานในครั้งแรก ทั้งสาม chain จะมี default policy เป็น ACCEPT
ซึ่งหมายความว่าอนุญาตให้ทุกอย่างผ่านเข้าออกได้หมด และสำหรับ FORWARD chain นั้น ถึงแม้จะได้กำหนดให้
policy เป็น ACCEPT แล้ว packet ก็จะยังไม่สามารถถูก forward ไปยังจุดหมายที่ต้องการได้
ตราบใดที่ยังไม่ได้เซ็ตให้ enable IP forwarding ทั้งนี้โดย default แล้ว forward=0 สามารถกำหนดให้
enable IP forwarding (forward=1) ได้ โดย

ใช้คำสั่ง echo "1" > /proc/sys/net/ip_forward เพื่อกำหนดให้ IP forwarding เป็น
enable เพื่อให้ Linux box สามารถ forward ip packet ได้
ในบางครั้งนั้นการใช้คำสั่งดังกล่าวทุกครั้งอาจจะไม่สะดวก สามารถแก้ไขไฟล์ configuration ที่
/etc/sysctl.conf แล้ว set ให้ net.ipv4.ip_forward=1 เพื่อเป็นการแก้ไขแบบถาวร

ในกรณีที่ต้องการให้สนับสนุนการทำงานกับ dynamic IP ด้วย เช่น PPP, SLIP, DHCP
ก็สามารถทำได้โดยใช้คำสั่ง echo "1" > /proc/sys/net/ipv4/ip_dynaddr ได้เช่นเดียวกัน

II. Mangle Table
เป็นตารางที่ใช้สำหรับแก้ไขข้อมูล TOS, TTL, MARK ของ packet ซึ่งโดยปกติแล้วแทบจะไม่ได้ใช้งาน
และไม่ควรทำ packet filtering หรือกรอง packet ที่ตารางนี้ รวมทั้งไม่ควรทำ DNAT, SNAT หรือ
Masquerading ที่ตารางนี้อย่างเด็ดขาดด้วย

III. Nat Table
เป็นตารางที่ใช้สำหรับทำ network address translation เช่น เปลี่ยนค่า source ip address, destination
ip address จุดสำคัญอีกอย่างหนึ่งที่ต้องรู้ก็คือ มีเพียง packet แรกเท่านั้นที่เข้ามาที่ chain นี้
ส่วน packet ถัดไปนั้นจะถูกกระทำเหมือนที่ packet แรกได้รับ ดังนั้นจึงไม่ควรทำ packet filtering ที่
chain เหล่านี้

การใช้งาน Nat table นั้นก็เพียงแต่ใช้ออปชัน -t nat เท่านั้น และ target ที่สามารถใช้งานได้คือ SNAT,
DNAT, Masquerade, Redirect ซึ่งมีรายละเอียดดังนี้

* SNAT
การทำ source NAT จะทำที่ POSTROUTING chain โดย หลักๆ คือทำการเปลี่ยน source address
ก่อนที่จะส่ง packet นั้นออกไป ซึ่งสามารถใช้ออปชัน -o (outgoing interface) ร่วมด้วยได้
นอกจากนี้ยังใช้ -j SNAT และ --to--source หรือ --to เพื่อเปลี่ยนไอพีแอดเดรสหรือ port ไปตามต้องการได้
เช่น

##เปลี่ยน source ip address เป็น 1.2.3.4
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4

##เปลี่ยน source address เป็น 1.2.3.4, 1.2.3.5 หรือ 1.2.3.6
# iptables -t nat -A POSTROUING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6

##เปลี่ยน source address เป็น 1.2.3.4 port 1-1023
# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023

Masquerading
การทำ masquerade นั้นเป็นหนึ่งในรูปแบบของการทำ source NAT แบบพิเศษ ซึ่งใช้สำหรับ
กรณีที่ได้รับไอพีแบบไม่ซ้ำ(dynamically-assigned IP address) เช่น ผู้ที่ใช้โมเด็มล็อกอินเข้าไปยัง isp
(สำหรับผู้ที่ใช้ static IP address ให้ใช้ SNAT ดังตัวอย่างด้านบน) ซึ่งข้อดีของการทำ masquerading
คือไม่จำเป็นต้องระบุค่าของไอพีแอดเดรสที่จะใช้ในการเปลี่ยน เช่น

##ทำ masquerade สำหรับทุก packet ที่วิ่งผ่าน ppp0
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

* DNAT
การทำ Destination NAT จะทำภายใต้ PREROUTING chain หลักๆ คือการเปลี่ยนค่า destination address
หรือ port ก่อนที่จะส่ง packet ไปยัง routing decision

โดยปกติการใช้งานจะระบุ -j DNAT และใช้ --to-destination หรือ --to และยังสามารถใช้ -i (incoming
interface) ร่วมด้วยได้ เช่น
##เปลี่ยน destination address เป็น 192.168.1.20
# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.20

##เปลี่ยน destination address เป็น 192.168.1.20, 192.168.1.21 หรือ 192.168.1.22
# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.20-192.168.1.22

##เปลี่ยน destination address ของ web traffic เป็น 192.168.1.50 port 8080
# iptables -t nat -A PREROUING -p tcp --dport 80 -ieth0 -j DNAT --to 192.168.1.50:80

Redirection
การทำ redirect นั้นเป็นหนึ่งในรูปแบบของการทำ Destination NAT แบบพิเศษ เช่น
##เปลี่ยน web traffic ธรรมดาให้ผ่านไปยัง squid proxy (transparent)
# ip tables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 3128
##หมายเหตุ จำเป็นต้องมีการ set ที่ squid เพิ่มเติมด้วย

นอกจากนี้ยังสามารถสร้าง rule ที่ใช้ค่า address ร่วมกันได้ เช่น เปลี่ยน source address ของเครื่อง
192.168.1.1 และ 192.168.1.2 ไปเป็น 1.2.3.4 ร่วมกันได้ เพราะ NAT
ฉลาดเพียงพอที่จะแยกแยะและป้องกันการชนกัน และมีตัวอย่างการใช้งานแบบอื่นอีกเช่น

# iptables -t nat -A POSTROUTING -s 192.168.0/24 -o eth1 -j SNAT --to 1.2.3.0/24
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to 1.2.3.0-1.2.3.4 --to
1.2.3.6-1.2.3.254

และสำหรับการทำ source NAT ต้องมั่นใจว่า เมื่อ packet เดินทางไปถึงเป้าหมายแล้ว packet นั้นๆ
สามารถเดินทางกลับมาหาเครื่องที่เป็นเจ้าของ packet นั้นได้จริงๆ เช่น หากทำ SNAT จาก private IP เป็น
1.2.3.4 เมื่อ packet ถูกส่งไปถึงปลายทาง และปลายทางต้องการส่งกลับมา packet นั้นจะต้องเดินทางมาถึง
linux box ที่รัน iptables นี้เท่านั้น การสื่อสารจึงจะสมบูรณ์ ซึ่งสามารถทำได้ด้วยวิธีต่างๆ ดังนี้คือ

1. กรณีที่ทำ SNAT โดยใช้ไอพีแอดเดรสของเครื่อง linux box นั้นเอง และเป็นเครื่องที่ทำ routing
เรียบร้อยแล้ว และทุกอย่างสามารถสื่อสารกันได้ ก็ไม่ต้องทำอะไร
2. ถ้าทำ SNAT โดยใช้ไอพีแอดเดรสที่ไม่ใช่ไอพีของ linux box นั้นๆ แต่เป็นไอพีแอดเดรสที่อยู่ใน
network เดียวกันและไม่มีเครื่องใดใช้ เครื่อง linux box นั้นจะต้องสามารถทำ ARP reply ตอบกลับ ARP
request ที่ถูกส่งออกมาเพื่อค้นหา MAC address สำหรับไอพีแอดเดรสที่ทำ SNAT นั้นได้
ซึ่งสามารถแก้ไขได้โดยการสร้าง IP alia ดังคำสั่งด้านล่าง

#ip address add 1.2.3.99 dev eth0
หรืออาจจะเพิ่ม arp record ที่เครื่องที่ทำหน้าที่เป็น gateway ของ linux box

3. หรือถ้าทำ SNAT โดยใช้ไอพีแอดเดรสที่แตกต่างกันออกไปจาก Linux box โดยสิ้นเชิง (เช่น
ไอพีแอดเดรสคนละ network) ก็จำเป็นต้องมีการแก้ไข routing table ที่เครื่องที่ทำหน้าที่เป็น gateway ของ
Linux box ที่รัน iptables อยู่

มีเอกสารอธิบายเกี่ยวกับความปลอดภัยในการใช้ NAT ที่http://thaicert.nectec.or.th/paper/firewall/nat.phpซึ่งหลังจากอ่านแล้วจะช่วยให้มองเห็นภาพได้ชัดเจนว่า ต้องทำ NAT หรือไม่อย่างไร

ตัวอย่างที่ 1 การใช้งาน iptables แบบง่าย
ในการใช้งาน iptables ในระบบที่ใช้งานจริงนั้น โดยส่วนใหญ่จะเขียนเป็น script ขึ้นมา
ซึ่งมีความซับซ้อนพอสมควร ซึ่งก่อนจะไปถึงขั้นนั้นมีวิธีทดลองใช้คำสั่งง่ายๆ
เพื่อทำความเข้าใจหลักการทำงานเบื้องต้นของ iptables

เช่น ต้องการ drop packet ที่เป็น ICMP ทั้งหมด ที่ออกจากเครื่องนี้ ซึ่งในกรณีนี้ไม่จำเป็นต้องระบุ
source ip address เพราะทุก packet ที่ออกจากเครื่องนี้จะต้องผ่านการตรวจสอบจาก OUTPUT chain

เริ่มการทดสอบโดยทดลอง ping ไปยัง www.nectec.or.th ซึ่งจะได้ผลลัพธ์คล้ายด้านล่างนี้

# ping -c 1 www.nectec.or.th
PING www.nectec.or.th (202.44.204.33) from 203.154.207.22 : 56(84) bytes of data.
64 bytes from www.nectec.or.th (202.44.204.33): icmp_seq=0 ttl=61 time=3.710 msec

--- www.nectec.or.th ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/mdev = 3.710/3.710/3.710/0.000 ms

ซึ่ง option -c 1 ระบุให้ส่ง packet ออกไปแค่ packet เดียว จากนั้นให้ใช้คำสั่งดังด้านล่างนี้ เพื่อ
block ICMP packet ที่จะออกจากเครื่องนี้

# iptables -A OUTPUT -p icmp -j DROP

จากนั้นทดลอง ping อีกครั้ง เพื่อตรวจสอบผลลัพธ์ที่ได้

# ping -c 1 www.nectec.or.th
PING www.nectec.or.th (202.44.204.33) from 203.154.207.22 : 56(84) bytes of data.
ping: sendto: Operation not permitted

--- www.nectec.or.th ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

ซึ่งผลลัพธ์แสดงให้เห็นว่า ICMP echo-request packet ดังกล่าวไม่ได้รับอนุญาตให้ผ่าน OUTPUT chain ไปได้
และถ้าหากต้องการลบ rule ดังกล่าวก็สามารถทำได้หลายวิธีคือ

# iptables -F OUTPUT (ซึ่งจะลบทุก rule ใน chain OUTPUT นี้)
# iptables -D OUTPUT 1 (เนื่องจากรู้ว่ามี rule เดียวจึงสามารถสั่งลบ rule ลำดับที่ 1 ได้เลย)
หรือ
# iptables -D OUTPUT -p icmp -j DROP (ลบ rule โดยการระบุออปชันของ rule ที่ต้องการได้โดยตรง)

ตัวอย่างที่ 2 การทำ Masquerading
ตัวอย่างการใช้งาน masquerading ที่เห็นได้ชัดเจนในประเทศไทยก็คือ ร้านอินเทอร์เน็ตคาเฟ่(แบบประหยัด)
ซึ่งนิยมใช้โมเด็ม 1 ตัว connect ไปยัง ISP แล้วใช้ NAT เพื่อให้เครื่องลูกที่มีอยู่หลายๆ เครื่องนั้น
สามารถใช้งานอินเทอร์เน็ตผ่านโมเด็มตัวนั้นได้ โดยเครื่องลูกจะต้องใช้ private ip ซึ่งมีให้เลือกหลาย
class เช่น 10.x.x.x 192.168.x.x เป็นต้น จากนั้นก็ตั้ง gateway ให้ชี้ไปยัง linux box
ที่ทำหน้าที่หมุนโมเด็มและรัน iptables ซึ่งสามารถใช้คำสั่งง่ายๆ
ดังด้านล่างก็ทำให้เครื่องลูกสามารถใช้งานอินเทอร์เน็ตได้แล้ว คือ

# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# echo "1" > /proc/sys/net/ip_forward

ตัวอย่างที่ 3 การเขียน rule จากเครือข่ายตัวอย่าง rc.firewall (ตัวอย่างเครือข่ายและ script
นี้คัดลอกมาจากเว็บไซต์ www.boingworld.com)

Pages: 1 ... 140 141 [142] 143 144 ... 146