banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Thư giãn với shell script một tý.  XML
  [Question]   Thư giãn với shell script một tý. 06/04/2008 06:14:51 (+0700) | #1 | 123436
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
Chương I. cách tạo và viết một shell cơ bản.
khuyến cáo nên sử dụng lệnh sau để tạo script:
cách tạo
Code:
vi
vim

ví dụ tạo script basic
gõ lệnh :
Code:
$ vi  basic.bash

hoặc
Code:
$ vi  basic.sh

hoặc
Code:
$ vim  basic.bash

một lưu ý nên sử dụng các phần mở rộng của script là .bash và .sh ( nó bảo đảm cho sự nguyên bản của một script shell )
cách setup một script.
đầu tiên bạn phải set permission cho script của bạn.
câu lệnh:
Code:
$ chmod +x basic
$ chmod 755 basic

cách chạy một script
sử dụng các câu lệnh sau:
Code:
$ bash basic

hoặc
Code:
$ sh basic

hoặc
$ ./basic

ví dụ : Viết một shell script đơn giản.
vi hello.sh
Code:
clear
echo "Hello $USER"
echo "Today is ";date
echo "Number of user login : " ; who | wc -l
echo "Calendar"
cal
exit 0

mở rộng shell hello.sh
code

Code:
clear
echo "Xin chao $USER"
echo "Hom Nay La Ngay ";date
echo "So Lan Login Cua Ban Trong Ngay La : " ; who | wc -l
echo "Tong So ip Ket Noi Den Server La : ";netstat -nat | grep :80 | wc -l
echo "Kiem Tra So Bo : SYS REC ";netstat -n -p |grep SYN_REC | wc -l
echo "Kiem Tra So Bo : SYS ";netstat -nap | grep SYN | wc -l
echo "Kiem Tra So Bo : TIME WAIT ";netstat -nap | grep TIME_WAIT | wc -l
echo "Kiem Tra So Bo : ESTABLISHED ";netstat -nap | grep ESTABLISHED | wc -l
echo "Kiem Tra So Bo : TCP/UDP ";netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
echo "Calendar"
cal
exit 0


sau đó bấm ESC tiếp bấm bấm : đánh vào x để save nội dung script đã viết.
sau đó sử dụng lệnh này để set permission.
chmod 700 hello.sh
chạy thử:
./hello.sh
Thật đễ phải không bạn.
( đang trong quá trình học, nếu có sai xót mong các bậc đàn anh đi trước niệm tình chỉ cho em ).
ngoài ra các bạn có thể thêm các cmd sau bằng cách :

echo "Noi dung" ;cmd

VD mở rộng với các cmd :
This is useful to find out if your server is under attack or not. You can also list abusive IP address using this method.
Code:
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n

Dig out more information about a specific ip address or Busy server can give out more information:
Code:
netstat -nat |grep {IP-address} | awk '{print $6}' | sort | uniq -c | sort -n

{IP-address} : ip server của bạn trong trường hợp nhiều ip thì nó chính là ip Default. ( Ex..) <== quên tiếng anh viết bằng gì rồi.
Get List Of All Unique IP Address
Code:
netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq

total of all unique IP address, enter:
Code:
netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq | wc -l

If you think your Linux box is under attack, print out a list of open connections on your box and sorts them by according to IP address, enter:
Code:
netstat -atun | awk '{print $5}' | cut -d: -f1 | sed -e '/^$/d' |sort | uniq -c | sort -n

Display Summary Statistics for Each Protocol
Code:
netstat -s | less
netstat -t -s | less
netstat -u -s | less
netstat -w -s | less
netstat -s

"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
  [Question]   Re: Thư giãn với shell script một tý. 06/04/2008 06:19:20 (+0700) | #2 | 123438
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
Gửi một E-mail thông báo cho bạn khi server bị ddos.
sử dụng lệnh nano để tạo một scipt.
VD : nano /root/emailsend.sh
code
Code:
#!/bin/bash
LOAD=$(awk '{print int($1)}' /proc/loadavg)
HOSTNAME=$(hostname)
IP=$(hostname -i)
EMAIL=(youremail@domain.com <a href="mailto:youremaul2@domain.com">youremaul2@domain.com</a>)
if [ $LOAD -ge 5 ]
then
{
printf "Hostname : $HOSTNAME\n"
printf "IP : $IP\n"
printf "Current Load : $LOAD"
printf "\n\n==================\nMySQL Process List\n==================\n\n"
mysqladmin proc
printf "\n\n==================\nMySQL Extended Status\n==================\n\n"
mysqladmin extended status
printf "\n\n===================\nServer Process List\n===================\n\n"
ps -ef
printf "\n\n==================\nNobody Processes\n==================\n\n"
ps --User nobody
printf "\n\n==================\nTOP Snapshot\n==================\n\n"
top -n1 -b
printf "\n\n==================\nMemory Usage\n==================\n\n"
free -m
printf "\n\n==================\nDisk Usage\n==================\n\n"
df -h
printf "\n\n==================\n Apache Connections \n==================\n\n"
netstat -alpn | grep :80 | awk '{print $5}' | cut -d: -f 1 | sort | uniq -c | sort -n
} | mail -s "$HOSTNAME Overloaded !!!" $EMAIL[@]
fi

E MAIL=(youremail@domain.com <a href="mailto:youremaul2@domain.com">youremaul2@domain.com</a>smilie <== đoạn này bị mã hóa. mã gốc là : EMAIL=(youremail@ domain.com youremaul2@ domain.com) <== mình để khoảng cách để nó không bị trường hợp như trên.
với : [ $LOAD -ge 5 ] =5. bạn có thể thay đổi thông số này. ( nếu là D webserver nên để là 1 hoặc 2 )
đổi (youremail@domain.com youremaul2@domain.com)
thành email mà bạn muốn send.
chmod 700 emailsend.sh
add cron * * * * * /root/emailsend.sh.sh
( khuyên nên add cron với 10 phút )
kết thúc./.

Mở rộng: bạn có thể send một email và reboot lại server khi overloaded đến một mức nào đó.
Code:
# Set up limit below
NOTIFY="6.0"

# admin user email id
EMAIL="root"

# Subject for email
SUBJECT="Alert $(hostname) load average"

# -----------------------------------------------------------------

# Os Specifc tweaks do not change anything below ;)
OS="$(uname)"
TRUE="1"
if [ "$OS" == "FreeBSD" ]; then
        TEMPFILE="$(mktemp /tmp/$(basename $0).tmp.XXX)"
	FTEXT='load averages:'
elif [ "$OS" == "Linux" ]; then
        TEMPFILE="$(mktemp)"
	FTEXT='load average:'
fi


# get first 5 min load
F5M="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f1)"
# 10 min
F10M="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f2)"
# 15 min
F15M="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f3)"

# mail message
# keep it short coz we may send it to page or as an short message (SMS)
echo "Load average Crossed allowed limit $NOTIFY." >> $TEMPFILE
echo "Hostname: $(hostname)" >> $TEMPFILE
echo "Local Date & Time : $(date)" >> $TEMPFILE

# Look if it crossed limit
# compare it with last 15 min load average
RESULT=$(echo "$F15M > $NOTIFY" | bc)

# if so send an email
if [ "$RESULT" == "$TRUE" ]; then
        mail -s "$SUBJECT" "$EMAIL" < $TEMPFILE
fi

# remove file 
rm -f $TEMPFILE

các bạn có thể điều chỉnh NOTIFY="6.0" với 6.0 là average

( đang trong quá trình học, nếu có sai xót mong các bậc đàn anh đi trước niệm tình chỉ cho em ).
"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
  [Question]   nếu mysql server bị treo hoặc bị ddos và không chạy, thì sao nhỉ. 06/04/2008 07:22:24 (+0700) | #3 | 123452
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
vi runmssql.bash

Code:
MUSER="root"
# mật mã của admin hoặc root
MPASS="SET-ROOT-PASSWORD"
# hostnames của sql thường là localhost
MHOST="localhost"
# câu lệnh dùng để khởi động lại mysql
MSTART="/etc/init.d/mysql start"
# email được gửi
EMAILID="notification@somewhere-corp.com"
# đường dẫn đến mail progames 
MAILCMD="$(which mail)"
# đường dẫn đến  mysqladmin
MADMIN="$(which mysqladmin)"
MAILMESSAGE="/tmp/mysql.fail.$$"
$MADMIN -h $MHOST -u $MUSER -p${MPASS} ping 2>/dev/null 1>/dev/null
if [ $? -ne 0 ]; then
	echo "" >$MAILMESSAGE
	echo "Error: MySQL Server is not running/responding ping request">>$MAILMESSAGE
	echo "Hostname: $(hostname)" >>$MAILMESSAGE
	echo "Date & Time: $(date)" >>$MAILMESSAGE
	$MSTART>/dev/null
	o=$(ps cax | grep -c ' mysqld$')
	if [ $o -eq 1 ]; then
		sMess="MySQL Server MySQL server successfully restarted"
	else
		sMess="MySQL server FAILED to restart"
	fi
	echo "Current Status: $sMess" >>$MAILMESSAGE
	echo "" >>$MAILMESSAGE
	echo "*** This email generated by $(basename $0) shell script ***" >>$MAILMESSAGE
	echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE
	$MAILCMD -s "MySQL server" $EMAILID < $MAILMESSAGE
else # MySQL is running :) and do nothing
	:
fi
# remove file
rm -f $MAILMESSAGE

ESC + : + X
chmod 700
add cron với thời gian tùy bạn.
theo mình nghĩ nên để là 1h.
Ở phần này có cái em không hiểu.
$(basename $0) <== cái này có nghĩa là gì.
tuy nhiên script trên chạy tốt. ( nó chạy mà có cái em không hiểu mới đau ).
"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
  [Question]   nếu mysql server bị treo hoặc bị ddos và không chạy, thì sao nhỉ. 07/04/2008 01:21:46 (+0700) | #4 | 123630
kholostoi
Member

[Minus]    0    [Plus]
Joined: 05/04/2008 00:41:53
Messages: 27
Offline
[Profile] [PM]

Ở phần này có cái em không hiểu.
$(basename $0) <== cái này có nghĩa là gì.
tuy nhiên script trên chạy tốt. ( nó chạy mà có cái em không hiểu mới đau ).
 


xem man basename. vd: $basename /usr/bin/ls --> kết quả là : ls
$0 la tên của chương trình đang chạy: vd chương trình của bạn: $0 chính là ..(đường dẫn)../runmssql.bash
[Up] [Print Copy]
  [Question]   Re: Thư giãn với shell script một tý. 07/04/2008 01:31:56 (+0700) | #5 | 123631
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
Cám ơn bạn giờ mình đã hiểu.
Đang tiếp tục tiếp mấy cái shell basic . mong đừng cười mình nhé. Rất mong được góp ý thẳng thắn để mình học hỏi thêm nhiều.

Thanks.
"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
  [Question]   Chương 2. Một Shell script anti ddos của inetbase.com ( zaf@vsnl.com ) 07/04/2008 23:14:32 (+0700) | #6 | 123826
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
Đầu tiên các bạn có thể vào đây để xem thông tin về script này.
http://www.inetbase.com/scripts/ddos/
để bắt đầu mình sẽ phân tích từ files cài đặt.
Code:
#!/bin/sh
if [ -d '/usr/local/ddos' ]; then
	echo; echo; echo "Please un-install the previous version first"
	exit 0
else
	mkdir /usr/local/ddos
fi
clear
echo; echo 'Installing DOS-Deflate 0.6'; echo
echo; echo -n 'Downloading source files...'
wget -q -O /usr/local/ddos/ddos.conf http://www.inetbase.com/scripts/ddos/ddos.conf
echo -n '.'
wget -q -O /usr/local/ddos/LICENSE http://www.inetbase.com/scripts/ddos/LICENSE
echo -n '.'
wget -q -O /usr/local/ddos/ignore.ip.list http://www.inetbase.com/scripts/ddos/ignore.ip.list
echo -n '.'
wget -q -O /usr/local/ddos/ddos.sh http://www.inetbase.com/scripts/ddos/ddos.sh
chmod 0755 /usr/local/ddos/ddos.sh
cp -s /usr/local/ddos/ddos.sh /usr/local/sbin/ddos
echo '...done'

echo; echo -n 'Creating cron to run script every minute.....(Default setting)'
/usr/local/ddos/ddos.sh --cron > /dev/null 2>&1
echo '.....done'
echo; echo 'Installation has completed.'
echo 'Config file is at /usr/local/ddos/ddos.conf'
echo 'Please send in your comments and/or suggestions to <a href="mailto:zaf@vsnl.com">zaf@vsnl.com</a>'
echo
cat /usr/local/ddos/LICENSE | less

đoạn script trên sẽ tải về server bạn 4files.
chmod files ddps.sh là 0775
cuối cùng là add cron để chạy script.
tiếp đến để hiểu rõ con script này nên phân tích cách hoạt động của nó. files cấu hình của script là ddos.conf

Code:
##### Paths of the script and other files
PROGDIR="/usr/local/ddos"
PROG="/usr/local/ddos/ddos.sh"
IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"
CRON="/etc/cron.d/ddos.cron"
APF="/etc/apf/apf"
IPT="/sbin/iptables"

##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with --cron
#####          option so that the new frequency takes effect
FREQ=1

##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150

##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=1

##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1

##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO="root"

##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600

chắc hẳn khi nhìn vào đoạn #### thì không cần mình giải thích nhỉ smilie
tùy theo nhu cầu của bạn mà config nó. sao cho phù hợp với server của bạn. ( cái này quyết định tính hiệu quả của script )
tiếp theo phân tích files ddos.sh để xem cấu trúc làm việc của nó.
Code:
#!/bin/sh
##############################################################################
# DDoS-Deflate version 0.6 Author: Zaf <zaf@vsnl.com>                        #
##############################################################################
# This program is distributed under the "Artistic License" Agreement         #
#                                                                            #
# The LICENSE file is located in the same directory as this program. Please  #
#  read the LICENSE file before you make copies or distribute this program   #
##############################################################################
load_conf()
{
	CONF="/usr/local/ddos/ddos.conf"
	if [ -f "$CONF" ] && [ ! "$CONF" ==	"" ]; then
		source $CONF
	else
		head
		echo "\$CONF not found."
		exit 1
	fi
}

head()
{
	echo "DDoS-Deflate version 0.6"
	echo "Copyright (C) 2005, Zaf <zaf@vsnl.com>"
	echo
}

showhelp()
{
	head
	echo 'Usage: ddos.sh [OPTIONS] [N]'
	echo 'N : number of tcp/udp	connections (default 150)'
	echo 'OPTIONS:'
	echo '-h | --help: Show	this help screen'
	echo '-c | --cron: Create cron job to run this script regularly (default 1 mins)'
	echo '-k | --kill: Block the offending ip making more than N connections'
}

unbanip()
{
	UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX`
	TMP_FILE=`mktemp /tmp/unban.XXXXXXXX`
	UNBAN_IP_LIST=`mktemp /tmp/unban.XXXXXXXX`
	echo '#!/bin/sh' > $UNBAN_SCRIPT
	echo "sleep $BAN_PERIOD" >> $UNBAN_SCRIPT
	if [ $APF_BAN -eq 1 ]; then
		while read line; do
			echo "$APF -u $line" >> $UNBAN_SCRIPT
			echo $line >> $UNBAN_IP_LIST
		done < $BANNED_IP_LIST
	else
		while read line; do
			echo "$IPT -D INPUT -s $line -j DROP" >> $UNBAN_SCRIPT
			echo $line >> $UNBAN_IP_LIST
		done < $BANNED_IP_LIST
	fi
	echo "grep -v --file=$UNBAN_IP_LIST $IGNORE_IP_LIST > $TMP_FILE" >> $UNBAN_SCRIPT
	echo "mv $TMP_FILE $IGNORE_IP_LIST" >> $UNBAN_SCRIPT
	echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPT
	echo "rm -f $UNBAN_IP_LIST" >> $UNBAN_SCRIPT
	echo "rm -f $TMP_FILE" >> $UNBAN_SCRIPT
	. $UNBAN_SCRIPT &
}

add_to_cron()
{
	rm -f $CRON
	sleep 1
	service crond restart
	sleep 1
	echo "SHELL=/bin/sh" > $CRON
	if [ $FREQ -le 2 ]; then
		echo "0-59/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
	else
		let "START_MINUTE = $RANDOM % ($FREQ - 1)"
		let "START_MINUTE = $START_MINUTE + 1"
		let "END_MINUTE = 60 - $FREQ + $START_MINUTE"
		echo "$START_MINUTE-$END_MINUTE/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
	fi
	service crond restart
}


load_conf
while [ $1 ]; do
	case $1 in
		'-h' | '--help' | '?' )
			showhelp
			exit
			;;
		'--cron' | '-c' )
			add_to_cron
			exit
			;;
		'--kill' | '-k' )
			KILL=1
			;;
		 *[0-9]* )
			NO_OF_CONNECTIONS=$1
			;;
		* )
			showhelp
			exit
			;;
	esac
	shift
done

TMP_PREFIX='/tmp/ddos'
TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"
BANNED_IP_MAIL=`$TMP_FILE`
BANNED_IP_LIST=`$TMP_FILE`
echo "Banned the following ip addresses on `date`" > $BANNED_IP_MAIL
echo >>	$BANNED_IP_MAIL
BAD_IP_LIST=`$TMP_FILE`
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
cat $BAD_IP_LIST
if [ $KILL -eq 1 ]; then
	IP_BAN_NOW=0
	while read line; do
		CURR_LINE_CONN=$(echo $line | cut -d" " -f1)
		CURR_LINE_IP=$(echo $line | cut -d" " -f2)
		if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then
			break
		fi
		IGNORE_BAN=`grep -c $CURR_LINE_IP $IGNORE_IP_LIST`
		if [ $IGNORE_BAN -ge 1 ]; then
			continue
		fi
		IP_BAN_NOW=1
		echo "$CURR_LINE_IP with $CURR_LINE_CONN connections" >> $BANNED_IP_MAIL
		echo $CURR_LINE_IP >> $BANNED_IP_LIST
		echo $CURR_LINE_IP >> $IGNORE_IP_LIST
		if [ $APF_BAN -eq 1 ]; then
			$APF -d $CURR_LINE_IP
		else
			$IPT -I INPUT -s $CURR_LINE_IP -j DROP
		fi
	done < $BAD_IP_LIST
	if [ $IP_BAN_NOW -eq 1 ]; then
		dt=`date`
		if [ $EMAIL_TO != "" ]; then
			cat $BANNED_IP_MAIL | mail -s "IP addresses banned on $dt" $EMAIL_TO
		fi
		unbanip
	fi
fi
rm -f $TMP_PREFIX.*

Hôm nay mình tạm dừng ở đây vì có một số điểm chưa thông khi đọc script này. với lại đang soan cái log để nhờ các anh chi mình là sao server bi treo.
"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
  [Question]   Re: Thư giãn với shell script một tý. 08/04/2008 00:01:11 (+0700) | #7 | 123844
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
hì, hackercoder!

Mình thấy đoạn sript "chống ddos" này chỉ là một giải pháp tình thế vì dựa nhiều vào việc ban và ignore Ip list. Có thể nó có tác dụng trong trường hợp bị ddos ầm ầm từ một ip cụ thể nào đó, nhưng gây ra tình trạng người dùng bình thường cũng bị ban, mặc dù họ vô tội!

All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Chương 2. Một Shell script anti ddos của inetbase.com ( zaf@vsnl.com ) 08/04/2008 03:09:40 (+0700) | #8 | 123881
subnetwork
Member

[Minus]    0    [Plus]
Joined: 05/09/2004 06:08:09
Messages: 1666
Offline
[Profile] [PM] [WWW] [Yahoo!]

hackercoder wrote:
Đầu tiên các bạn có thể vào đây để xem thông tin về script này.
http://www.inetbase.com/scripts/ddos/
để bắt đầu mình sẽ phân tích từ files cài đặt.
Code:
#!/bin/sh
if [ -d '/usr/local/ddos' ]; then
	echo; echo; echo "Please un-install the previous version first"
	exit 0
else
	mkdir /usr/local/ddos
fi
clear
echo; echo 'Installing DOS-Deflate 0.6'; echo
echo; echo -n 'Downloading source files...'
wget -q -O /usr/local/ddos/ddos.conf http://www.inetbase.com/scripts/ddos/ddos.conf
echo -n '.'
wget -q -O /usr/local/ddos/LICENSE http://www.inetbase.com/scripts/ddos/LICENSE
echo -n '.'
wget -q -O /usr/local/ddos/ignore.ip.list http://www.inetbase.com/scripts/ddos/ignore.ip.list
echo -n '.'
wget -q -O /usr/local/ddos/ddos.sh http://www.inetbase.com/scripts/ddos/ddos.sh
chmod 0755 /usr/local/ddos/ddos.sh
cp -s /usr/local/ddos/ddos.sh /usr/local/sbin/ddos
echo '...done'

echo; echo -n 'Creating cron to run script every minute.....(Default setting)'
/usr/local/ddos/ddos.sh --cron > /dev/null 2>&1
echo '.....done'
echo; echo 'Installation has completed.'
echo 'Config file is at /usr/local/ddos/ddos.conf'
echo 'Please send in your comments and/or suggestions to <a href="mailto:zaf@vsnl.com">zaf@vsnl.com</a>'
echo
cat /usr/local/ddos/LICENSE | less

đoạn script trên sẽ tải về server bạn 4files.
chmod files ddps.sh là 0775
cuối cùng là add cron để chạy script.
tiếp đến để hiểu rõ con script này nên phân tích cách hoạt động của nó. files cấu hình của script là ddos.conf

Code:
##### Paths of the script and other files
PROGDIR="/usr/local/ddos"
PROG="/usr/local/ddos/ddos.sh"
IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"
CRON="/etc/cron.d/ddos.cron"
APF="/etc/apf/apf"
IPT="/sbin/iptables"

##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with --cron
#####          option so that the new frequency takes effect
FREQ=1

##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150

##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=1

##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1

##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO="root"

##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600

chắc hẳn khi nhìn vào đoạn #### thì không cần mình giải thích nhỉ smilie
tùy theo nhu cầu của bạn mà config nó. sao cho phù hợp với server của bạn. ( cái này quyết định tính hiệu quả của script )
tiếp theo phân tích files ddos.sh để xem cấu trúc làm việc của nó.
Code:
#!/bin/sh
##############################################################################
# DDoS-Deflate version 0.6 Author: Zaf <zaf@vsnl.com>                        #
##############################################################################
# This program is distributed under the "Artistic License" Agreement         #
#                                                                            #
# The LICENSE file is located in the same directory as this program. Please  #
#  read the LICENSE file before you make copies or distribute this program   #
##############################################################################
load_conf()
{
	CONF="/usr/local/ddos/ddos.conf"
	if [ -f "$CONF" ] && [ ! "$CONF" ==	"" ]; then
		source $CONF
	else
		head
		echo "\$CONF not found."
		exit 1
	fi
}

head()
{
	echo "DDoS-Deflate version 0.6"
	echo "Copyright (C) 2005, Zaf <zaf@vsnl.com>"
	echo
}

showhelp()
{
	head
	echo 'Usage: ddos.sh [OPTIONS] [N]'
	echo 'N : number of tcp/udp	connections (default 150)'
	echo 'OPTIONS:'
	echo '-h | --help: Show	this help screen'
	echo '-c | --cron: Create cron job to run this script regularly (default 1 mins)'
	echo '-k | --kill: Block the offending ip making more than N connections'
}

unbanip()
{
	UNBAN_SCRIPT=`mktemp /tmp/unban.XXXXXXXX`
	TMP_FILE=`mktemp /tmp/unban.XXXXXXXX`
	UNBAN_IP_LIST=`mktemp /tmp/unban.XXXXXXXX`
	echo '#!/bin/sh' > $UNBAN_SCRIPT
	echo "sleep $BAN_PERIOD" >> $UNBAN_SCRIPT
	if [ $APF_BAN -eq 1 ]; then
		while read line; do
			echo "$APF -u $line" >> $UNBAN_SCRIPT
			echo $line >> $UNBAN_IP_LIST
		done < $BANNED_IP_LIST
	else
		while read line; do
			echo "$IPT -D INPUT -s $line -j DROP" >> $UNBAN_SCRIPT
			echo $line >> $UNBAN_IP_LIST
		done < $BANNED_IP_LIST
	fi
	echo "grep -v --file=$UNBAN_IP_LIST $IGNORE_IP_LIST > $TMP_FILE" >> $UNBAN_SCRIPT
	echo "mv $TMP_FILE $IGNORE_IP_LIST" >> $UNBAN_SCRIPT
	echo "rm -f $UNBAN_SCRIPT" >> $UNBAN_SCRIPT
	echo "rm -f $UNBAN_IP_LIST" >> $UNBAN_SCRIPT
	echo "rm -f $TMP_FILE" >> $UNBAN_SCRIPT
	. $UNBAN_SCRIPT &
}

add_to_cron()
{
	rm -f $CRON
	sleep 1
	service crond restart
	sleep 1
	echo "SHELL=/bin/sh" > $CRON
	if [ $FREQ -le 2 ]; then
		echo "0-59/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
	else
		let "START_MINUTE = $RANDOM % ($FREQ - 1)"
		let "START_MINUTE = $START_MINUTE + 1"
		let "END_MINUTE = 60 - $FREQ + $START_MINUTE"
		echo "$START_MINUTE-$END_MINUTE/$FREQ * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1" >> $CRON
	fi
	service crond restart
}


load_conf
while [ $1 ]; do
	case $1 in
		'-h' | '--help' | '?' )
			showhelp
			exit
			;;
		'--cron' | '-c' )
			add_to_cron
			exit
			;;
		'--kill' | '-k' )
			KILL=1
			;;
		 *[0-9]* )
			NO_OF_CONNECTIONS=$1
			;;
		* )
			showhelp
			exit
			;;
	esac
	shift
done

TMP_PREFIX='/tmp/ddos'
TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"
BANNED_IP_MAIL=`$TMP_FILE`
BANNED_IP_LIST=`$TMP_FILE`
echo "Banned the following ip addresses on `date`" > $BANNED_IP_MAIL
echo >>	$BANNED_IP_MAIL
BAD_IP_LIST=`$TMP_FILE`
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
cat $BAD_IP_LIST
if [ $KILL -eq 1 ]; then
	IP_BAN_NOW=0
	while read line; do
		CURR_LINE_CONN=$(echo $line | cut -d" " -f1)
		CURR_LINE_IP=$(echo $line | cut -d" " -f2)
		if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then
			break
		fi
		IGNORE_BAN=`grep -c $CURR_LINE_IP $IGNORE_IP_LIST`
		if [ $IGNORE_BAN -ge 1 ]; then
			continue
		fi
		IP_BAN_NOW=1
		echo "$CURR_LINE_IP with $CURR_LINE_CONN connections" >> $BANNED_IP_MAIL
		echo $CURR_LINE_IP >> $BANNED_IP_LIST
		echo $CURR_LINE_IP >> $IGNORE_IP_LIST
		if [ $APF_BAN -eq 1 ]; then
			$APF -d $CURR_LINE_IP
		else
			$IPT -I INPUT -s $CURR_LINE_IP -j DROP
		fi
	done < $BAD_IP_LIST
	if [ $IP_BAN_NOW -eq 1 ]; then
		dt=`date`
		if [ $EMAIL_TO != "" ]; then
			cat $BANNED_IP_MAIL | mail -s "IP addresses banned on $dt" $EMAIL_TO
		fi
		unbanip
	fi
fi
rm -f $TMP_PREFIX.*

Hôm nay mình tạm dừng ở đây vì có một số điểm chưa thông khi đọc script này. với lại đang soan cái log để nhờ các anh chi mình là sao server bi treo. 


http://rfxnetworks.com/apf.php

Rắc rối smilie

Nên đọc script nó nói cái gì trước tiên, sau đó mới cài đặt, thử nghiệm nó trên server . Không phải đoạn script nào củng "đè" cài đặt vào server của mình được cả nên cân nhắc cẩn thận việc cài đặt phần mềm trên máy chủ .

Nghiên cứu viết đoạn script cho riêng mình sử dụng iptables thay vì "lụm" các đoạn script được share trên internet .

Vài thiển ý cá nhân
Quản lý máy chủ, cài đặt, tư vấn, thiết kế, bảo mật hệ thống máy chủ dùng *nix
http://chamsocmaychu.com
[Up] [Print Copy]
  [Question]   Script PHP anti ddos bổ sung và mở rộng chương 2. 08/04/2008 08:06:44 (+0700) | #9 | 123946
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
Em cám ơn anh tranhuuphuoc đã góp ý. Đúng như anh nói. nếu không hiểu nó viết gì thì khi cài vào máy chủ thì chỉ có chết.
những script trên em đã thử nghiệm ở VPS. thấy nó chạy mà chưa phát sinh lỗi gì nên em post lên đây để các bạn khác tham khảo.
Các bạn chú ý. Thử thì được nhưng đặc biệt hạn chế khi sử dụng nó để cài lên máy chủ nhé. Khi nào hiểu hết ý nghĩa của các câu lệnh hoặc hiểu con script này nói gì thì hãy áp dụng.
xin dừng xem dây là script chống ddos nhé. nó chỉ là một trong những script mình sưu tầm và mình đưa vào các bài post theo các chương từ từ nâng cao.
các chương gồm có.
chương một vd với script cơ bản, tạo và thực hành một số lệnh.
chương 2 một số script với ứng dụng đơn giản được năng cao hơn một chút.
chương 3 tạo một Script firewall bằng iptables căn bản.
chương 4 năng cao của script firewall của iptables.
....
và tất cả những gì mà mình học lóm được của tụi IT nước ngoài. cũng như các thủ đoạn của dân IT nước ngoài.

mục đích mình post là gì?

mình là một người tay ngang không phải là dân it thứ thiêt. mình chỉ có một đam mê với it ( it đúng nghĩa ). chưa hề có một bằng cấp nào về it cả. Kể cả một cái bằng sơ đẳng là bằng A tin học ( xóa mù ấy ) cũng không có. mình muốn chia sẻ ít kinh nghiệm của mình với các bạn tay ngang như mình. Khi mình bắt đầu tham gia vào lĩnh vực IT mình không biết bắt đầu từ đâu. đặc biệt chẳng có tí kiến thức gì.
nhưng dần dần với nỗi đam mê của mình mình cũng từng bước từng bước, bước vào thế giới IT bằng những bước đi khập khiễng.
Xin lỗi đã đi xa vấn đề bây giời chở lại vấn đề chính.

Ở phần này mình share một script anti floods, x-flash. Scipt này hoàn thành được phần lớn là nhờ code : Anh Quốc Bảo, sử dụng capcha Free. Mình đã xin phép anh ấy để puplic script này. ( nếu các bạn thấy script này thỏa mãn nhu cầu của bạn xin hãy gửi lời cám ơn đến anh ấy )
Cơ chế hoạt động của script.
Script chỉ có tác dụng trên tầng application.
Hỗ trợ tất cả các loại forum, các loại cms, các website được viết bằng ngôn ngữ .php
Script phát huy tối đa tác dụng khi web hỗ trợ php.ini.
Script phát huy 50% khi sử dụng .htaccess.
Scipt hoạt động tốt nhất trên nền OS linux, đặc biệt là fedora 6 sử dụng CPL D.Admin.
Đầu tiên script sẽ bắt nhập capcha khi một clien gửi một http request đến server
sau khi kiểm tra bằng capcha sẽ ghi lại cookie của clien. và ip của clien được ghi vào một vị trí nhất định. tại đây script sẽ lấy ip để đếm số lần hit/s/all files của website. nếu trong một thời gian nào đó ( do bạn quy định ) sẽ chuyển đến đoạn sử lý riêng. ( ở đoạn này các bạn có thể tỳ ý thêm bớt để cho scipt hoạt động theo ý của các bạn - có thể ban hoặc chuyển hướng ddos tại đây -- gợi ý dùng java va html để chuyển hướng hoặc sử dụng cron add một shell sử dụng iptables để vô hiệu hóa ip đó )
Đầu tiên các bạn download script này tại đây.
http://rapidshare.com/files/105498946/anti-flood.rar
sau khi giải nén các bạn upload các folder anti-flood,class,png_bank và các files anti.php, anti.capcha.php, captcha_img.php
lên thư mục root của website.
chmod 0777 anti-flood,block,ip
chmod 0444 3 files anti.php, anti.capcha.php, captcha_img.php
bạn mở files php.ini lên tìm dòng này
Code:
auto_prepend_file =

điều chỉnh nó thành
Code:
auto_prepend_file = /srv/www/vhosts/yourdomain.com/httpdocs (hoặc Puplic_html) /anti.php

save lại. ( nếu là server restart http )
bạn mở files anti.php lên
hiệu chỉnh lại các thông số sau sao cho phù hợp với mục đích sử dụng của bạn

Code:
$max_hits = 30;
$max_alive = 3;
$interval = 5;
$delay = 3600;

Giới hạn 1 IP truy cập vào không quá {$max_hits} trong vòng {$interval} giây, nếu ip đó truy cập quá mức sẽ ban trong {$delay} giây.

Sau khi thiết lập xong bạn nên add cron để del các files ở folder block,ip vào lúc 0 giời là hay nhất.
bạn cũng có thể cho scipt chạy ngầm bằng cách bỏ nhập capcha bằng cách mở files anti.php lên tìm dòng này

Code:
require_once dirname(__FILE__) . "/anti.capcha.php";
sửa lại thành 
//require_once dirname(__FILE__) . "/anti.capcha.php";

chúc các bạn vui vẻ và có thêm đam mê khi bước vào thế giới IT.

Một lần nữa cám ơn anh tranhuuphuoc xin anh thấy em sai ở điểm nào anh cứ nói để em có cái nhìn đa phương về vấn đề em đã nêu.

Cám ơn hai bạn mR.Bi, kholostoi xin chân thành cám ơn hai bạn đã góp ý cho mình.
"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
  [Question]   Chuơng III. basic secure server ( script có tính tương đối ). 17/04/2008 01:32:59 (+0700) | #10 | 125627
[Avatar]
Phó Hồng Tuyết
Member

[Minus]    0    [Plus]
Joined: 20/04/2007 20:02:10
Messages: 275
Location: Nơi Sâu Thẳm Tâm Hồn
Offline
[Profile] [PM] [WWW] [Yahoo!]
ở chương này mình giới thiệu với các bạn hai shell script có tính năng kiểm tra sơ bộ độ an toàn của server unix nói chung. Script này có tính chất tương đối đối với các bạn tay ngang như mình.
1. Lynis
Description
Security and system auditing tool
Project information
Lynis is an auditing tool for Unix (specialists). It scans the system configuration and creates an overview of system information and security issues usable by professional auditors.

This software aims in assisting automated auditing of Unix based systems and can be used in addition to other software, like security scanners, system benchmarking and fine tuning tools.

Intended audience:
Security specialists, system auditors, system/network managers.

Current state:
Stable releases are available, development is active.




System requirements:
- Compatible operating system (see 'Supported operating systems')
- Default shell

Supported operating systems
Tested on:
- CentOS 5
- Debian 4.0
- Fedora Core 4 and higher
- FreeBSD 6.2, 7.0
- Mac OS X 10.4
- OpenBSD 4.2
- OpenSuSE
- Ubuntu 7.04, 7.10

Currently unsupported:
- All others (though some will work)

cách cài đặt.
bạn login vào server của bạn, dùng lệnh sau:

Code:
wget http://www.rootkit.nl/files/lynis-1.1.1.tar.gz


tiếp đó giải nén nó.

Code:
tar xfvz lynis-1.1.1.tar.gz


tiếp dùng lệnh

Code:
cd lynis


kiểm tra tất cả.

Code:
./lynis -c


sau đó các bạn sẽ có một bảng tổng kết. phần nào chưa được điều chỉnh hoặc điều chỉnh nhưng độ an toàn thấp sẽ hiện lên màu đỏ. các bạn theo đó mà giải quyết vấn đề.

2. Linux Security Auditing Tool (LSAT)

các chức năng :

Code:
checkbpass:
- This module check for a boot loader password
- Currently only for grub and lilo

checkcfg:
- This module is performed last
- RedHat specific. Just prints out /sbin/chkconfig --list so that
  the user can perform a visual inspection.

checkdotfiles:
- Looks for .forward, .exrc, .rhosts and .netrc files on the system.
- Does not span "other" filesystems. 

checkfiles:
- checks that /tmp and /var/tmp have sitcky bit set
- checks utmp, wtmp, motd, mtab for chmod 644.
- checks /usr, /var dirs/files for root ownership.

checkftpusers:
- checks that all accounts in /etc/passwd are in /etc/ftpusers.

checkhostsfiles:
- Reads /etc/hosts.allow and /etc/hosts.deny files
- Checkes deny for ALL:ALL statement.
- Checks allow for any ALL statements.

checkinetd:
- Checks either /etc/inetd.conf or /etc/xinetd.d/* 
- If inetd.conf, it checks for entries not hashed out.
	(All entries should be commented out :)
- If xinetd.d it checks all files in that dir for disable = yes.

checkinittab:
- Check to see if the default runlevel is 5. If it is, give the user a warning.

checkipv4:
- Checks for common forwarding and ignore settings in ipv4.

checkissue:
- checks to make sure that /etc/motd, /etc/issue and /etc/issue.net
  do not exist, or if they do, warn the user.

checkkbd:
- checks that ctrlaltdel function is disabled under linux.
- checks for KEYBOARD_DISABLE to be enabled under Solaris.

checklimits:
- performs simple check of limits.conf file

checklogging:
- simple check to see if the auth and authpriv logging facilities are on.
  This is mostly for older versions of linux, as I know redhat and others
  have this on by default now...

checkmodules:
- checks to see if loadable kernel modules are enabled

checkmd5:
- performs a system-wide md5sum on all regular files.
- only executes if -m switch is used
- output is in lsatmd5.out, previous output in lsatmd5.old

checknet:
- checks what ports the system is listening to.
- (may not check _all_ ports. I have to RTFM on this one)

checknetforward:
- checks that ipv4 forwarding is disabled under linux
- checks that ipforwarding & source routing are disabled under Solaris
- checks that norouter & defaultrouter exist under Solaris

checknetp:
- checks that no interface is in Promiscuous mode

checkopenfiles:
- checks for all open files on the system using lsof (if installed)

checkpasswd:
- checks /etc/passwd for unneeded accounts.
- checks that only root is SUID=0.

checkrcperms:
- checks files in init.d dir to see if they are chmod 700

checkpkgs:
- Checks list of packages (rpms, debs) installed on the system.
- Checks against a list of "should not have" rpms.
- (this list quite possibly needs to be expanded)

checkrc:
- checks /etc/rcn.d or /etc/rc.d/init.d and reports unneeded scripts.

checkrpm: (redhat specific)
- check to see if we are on redhat, and if we are...
- use the built in rpm -Va to verify rpms on the system.

checksecuretty:
-check to see if only tty[0-6] are in /etc/securetty

checkset:
- Checks system for all setuid/setgid files.
- Also checks for block or char files in /dev/ that do not belong.

checkssh:
- check some security features of ssh for instance:
  root logins, X11 forwarding and the like.

checkumask:
- checks that the default umask on the system is sensible.

checkwrite:
- Checks system for world writable files.

checkwww:
- check to see if ExecCGIs are enabled.
- check to see who is running httpd/apache.


kết quả được thể hiện như sau :

Code:
changelog is not chmod 644.
config.status is not chmod 644.
configure is not chmod 644.
lsat is not chmod 644.
lsat.html is not chmod 644.
lsat.pod is not chmod 644.
/var/run/syslog-ng.pid is not chmod 644.
changelog is not chmod 644.
config.status is not chmod 644.
configure is not chmod 644.
lsat is not chmod 644.
lsat.html is not chmod 644.
lsat.pod is not chmod 644.
Check above files for chmod 644.
...................


...........


bản này đầy đủ hơn. các bạn có thể vào http://usat.sourceforge.net/
để biết rõ các chi tiết.
chúc các bạn ngày càng pro hơn với server mình quản lý.

P/s : script anti ddos viết bằng PHP mình đã del rồi. đang sửa một số code cho phù hợp. hiện tại nó chỉ có tác dụng trên D. webserver
"Một người thành công không có ý nghĩ đổ thừa thất bại do ...."
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|