分享
 
 
 

大家有没有什么好的方法可以防止网页被恶意抓取?

王朝厨房·作者佚名  2007-01-05
窄屏简体版  字體: |||超大  

对于数量比较小的可以屏蔽IP,但对于数量大的成批抓取就力不从心了。

haohaoo 回复于:2004-06-02 12:37:58

可以啊。

送你个shell文件。

[code:1:58f13083b3]

#!/bin/bash

#

# 这支程式最早在 2002/06/11 由 VBird 开发的!

#

# 说明

# 这支程式的最大用途在于保护你的 WWW 主机免于被砍站软体所困扰!

# 所以如果没有 WWW 服务在您的主机上面,那么这支程式就不必要执行了!

#

# 抵挡原理

# 有些很讨厌的程式例如 Teleport 之类的软体,由于会一直尝试砍站,

# 因此会一直的要求与你的主机来连线,这样的情况下,你的主机可能

# 会相当的耗系统的资源啊!因此造成当机!

# 由于当使用 Teleport 时,他会造成很多条的连线,这些连线可以

# 使用 netstat 来观察到!因此,我们就使用 netstat 来统计

# 『重复的连线 IP 』,将这些来自同一 IP 的连线统计一下,

# 如果超过一个设定值(您自己选择的!),那么该 IP 就会被你的

# iptables 机制挡掉了!

# 由于这样一回事,所以,您在使用本程式之前,注意核心版本。

#

# 注意事项:

# 1. 关于这支程式:

# 由于这支程式使用 netstat 计算出重复的 IP 连线数后,

# 超过一定的连线值时,该 IP 会以 iptables 来抵挡,因此,

# 你的系统核心必须要高于 2.4 版本,并且不要使用 ipchains 的啦!

# 2. 关于其他的相关程式:

# 由于我是与 iptables.rule 那支程式一起作用的,所以

# 除非您对于 shell scripts 已经相当的有概念,否则,

# 最好到下面的网站上面 download 那支程式吧!

# http://linux.vbird.org/download/#linux_security

#

# 安装:

# 1. 放置程式到适当的目录下

# mkdir -p /usr/local/virus/httpd-err

# cp /完整路径/http-netstat.sh /usr/local/virus/httpd-err

# chmod 755 /usr/local/virus/httpd-err/http-netstat.sh

# 2. 修改本程式的相关内容:

# 在后面的几个设定项目需要修改,包括:

# email (后面请接讯息要寄给谁呢?)

# access_log (后面请接 apache 的登录档)

# 3. 修改 crontab

# vi /etc/crontab (加入底下这几行)

# ----------- Start -----------------------------------------------------------------

# * * * * * root /usr/local/virus/httpd-err/http-netstat.sh start > /dev/null 2>&1

# 18 */2 * * * root /usr/local/virus/httpd-err/http-netstat.sh day > /dev/null 2>&1

# 12 04 * * 0,4 root /usr/local/virus/httpd-err/http-netstat.sh week > /dev/null 2>&1

# ----------- End -------------------------------------------------------------------

#

#====================================================================

# 版权宣告:

# 本程式为 GPL 授权,任何人皆可使用本程式,

# 不过,使用本程式前,建议先对 BASH Shell 有一定程度的瞭解比较好!

# 另外,使用本程式出现的任何问题,本人概不负责!

# VBird <vbird@tsai.adsldns.org>

#====================================================================

# History:

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

# 2002/06/11 VBird

# First time to setup this program!!

# 2002/06/29 VBird

# Adding some output control line!

# 2002/07/01 VBird

# 1. Add "Using netstat -an" to find out

# the large connect IP and deny it!

# The number of connection is [25].

# 2. By the way, the limited error log is

# changed from [20] to [15].

# 3. The running frequency is changed from

# 30 minutes to 15 minutes.

# 2002/09/26 VBird

# 1. Adding the "netstat -an" for check

# the Apache is live ?

# 2002/11/04 VBird

# 1. change the netstat error from 25 to 15

# 2003/02/27 VBird

# modified the detect method from connection number to the

# "SYN_RECV" signle!

# 2003/03/03 VBird

# 1. The SYN_RECV signle is come from "Brother's settings"

# not only from teleport~ Thus, the last modified is

# error's settings....

# 2. The program have been modified to do the following:

# a. using netstat and grep the TIME_WAIT process

# If the Time_wait connection is over 5 and continue

# 15 seconds then drop the IP!

# b. Analysis the log file, if find the Teleport then

# Drop the IP!

# 2003/03/23 VBird

# 将 TIME_WAIT 的封包由原本的 9 个拉长成为 12 个!

# 因为有太多的朋友发生被抵挡的问题了!真糟糕!

# 2003/03/24 VBird

# 将 TIME_WAIT 的封包由原本的 12 个拉长成为 15 个!

# 因为有太多的朋友发生被抵挡的问题了!真糟糕!

# 2003/04/03 VBird

# 因为又被砍了!所以将以拉长的 15 个改回来成为 13 个!

# 2003/04/24 VBird

# 突然认为抵挡个一天实在是粉恶劣,会让很多人无法进入本站,

# 所以又多开放了几个资料出来!除了 Teleport 罪证确凿,

# 所以仍然不给他进入(挡三~四天)之外,其他的抵挡会在 2 小时开放!

# 所以,抵挡的机制可以设定的更为严格啰!

# 因此又将原本拉长的 13 个改回来 12 个了!

# 2003/04/28 VBird

# 将程式丢出来给大家使用了!

# 2003/05/18 VBird

# 修改了每日输出的 E-Mail 格式!

#====================================================================

#####################################################################

# you must input some parameters

# 底下的资料是您必须要填写的!

email="root@localhost"

basedir="/usr/local/virus/httpd-err"

iptables_rule="/usr/local/virus/iptables/iptables.rule"

access_log="/var/log/httpd/access_log"

### Program starting ! You don't change anything for nothing! ^_^ ###

#####################################################################

# The program version and somethings.

lastdate="2003-05-18"

versions="Version 1.1"

hosthome=`hostname`

logfile="$basedir/mail.netstat"

oldlogfile="$basedir/mail.netstat.old"

#####################################################################

# The following is about ethernet interface's IP and check if the http live?

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin; export PATH

LANG=en; LC_TIME=en; export LC_TIME LANG

ethface=`route -n | awk '{print $1 , $8}'| grep '0.0.0.0'| cut -d' ' -f2`

ethIP=`ifconfig "$ethface" | grep 'inet addr'| awk '{print $2}'| cut -d':' -f2`

export ethIP

case $1 in

start)

# 1. Get the TIME_WAIT signle

#=== Part A, about the TIME WAIT signle ===#

netstat -an|grep 80|grep TIME| awk '{print $5}'| cut -d':' -f1| sort |uniq -c| \

awk '{if ($1 >= 12) print $2}' > $basedir/netstat1

sleep 12s

netstat -an|grep 80|grep TIME| awk '{print $5}'| cut -d':' -f1| sort |uniq -c| \

awk&nbs'''{if ($1 >= 12) print $2 ''' > $basedir/netstat2

sleep 12s

netstat -an|grep 80|grep TIME| awk&nbs'''{print $5 '''| cut '''''' -f1| sort |uniq -c| \

awk&nb;'''{if ($1 >= 12) print $2''' > $basedir/netstat3

cat $basedir/netstat1 $basedir/netstat2 $basedir/netstat3 | sort | uniq -c | \

awk&np'''{ if ( $1 == 3 ) print $2 ''' > $basedir/netstat.now

denyip_netstat=`cat $basedir/netstat.now`

#=== Part B, about the log file ===#

tail -n 1000 $access_log | grep "Teleport" | cut&nbs-'''&np''' -f1|sort|uniq > $basedir/loga.now

denyip_log=`cat $basedir/loga.now`

# 2. Exit if non IP in this problem !

if [ "$denyip_netstat" == "" ] && [ "$denyip_log" == "" ]; then

exit 0

fi

# 3. adding the IP into the deny files dailyerr

[ -e $basedir/dailynet ] || touch $basedir/dailynet

[ -e $basedir/dailylog ] || touch $basedir/dailylog

[ -e $basedir/dailyerr ] || touch $basedir/dailyerr

cat $basedir/netstat.now $basedir/dailynet | sort +0n | uniq > $basedir/dailynet.1

cat $basedir/loga.now $basedir/dailylog | sort +0n | uniq > $basedir/dailylog.1

cp $basedir/dailynet.1 $basedir/dailynet

cp $basedir/dailylog.1 $basedir/dailylog

sleep 1s

num_new=`cat $basedir/dailynet $basedir/dailylog | sort | uniq | wc -l`

num_old=`cat $basedir/dailyerr | wc -l`

if [ "$num_new" == "$num_old" ]; then

exit 0

fi

cat $basedir/dailynet $basedir/dailylog | sort | uniq > $basedir/dailyerr

echo&np'''#!/bin/s''' > $basedir/iptables.http

echo&np''''' >> $basedir/iptables.http

echo "# This file is automatic created by $0" >> $basedir/iptables.http

echo&np''''' >> $basedir/iptables.http

echo&np'''# Please to see the web page is any questions&8''' >> $basedir/iptables.http

echo&np'''# http://linux.vbirdr''' >> $basedir/iptables.http

echo&np'''#############################################''' >> $basedir/iptables.http

cat $basedir/dailyerr | \

/bin/awk -v ethIP="$ethIP"&s;'''{ printf( "\%-42s \%-18s \%-19s\n", "/sbin/iptables -A INPUT -p TCP -i eth0 -s", $1, "--dport 80 -j DROP")&2;''' \

>> $basedir/iptables.http

chmod 700 $basedir/iptables.http

if [ -f "$iptables_rule" ]; then

sh $iptables_rule

[ -e "$basedir/dailyerr.number" ] || echo 0 > $basedir/dailyerr.number

declare -i daynumber=`cat $basedir/dailyerr.number`+1

sleep 1s

echo $daynumber > $basedir/dailyerr.number

fi

;;

day)

# 1. Get the uptime of your Linux system

timeset1=`uptime | grep day`

timeset2=`uptime | grep min`

if [ "$timeset1" == "" ]; then

if [ "$timeset2" == "" ]; then

UPtime=`/usr/bin/uptime | awkbp''''{print $315''''`

else

UPtime=`/usr/bin/uptime | awkbp''''{print $3 " " $415''''`

fi

else

if [ "$timeset2" == "" ]; then

UPtime=`/usr/bin/uptime | awkbp''''{print $3 " " $4 " " $515''''`

else

UPtime=`/usr/bin/uptime | awkbp''''{print $3 " " $4 " " $5 " " $615''''`

fi

fi

# 2. Send the information to you!

if [ ! -f $logfile ]; then

echo "################################################" > $logfile

echo "欢迎使用本程式来查验您的 HTTP 登录档" >> $logfile

echo "本程式目前版本为: $versions" >> $logfile

echo "最后更新日期为: $lastdate" >> $logfile

echo "若在您的系统中发现本程式有问题" >> $logfile

echo "欢迎与 VBird 联络!" >> $logfile

echo "鸟哥的首页 http://linux.vbird.org" >> $logfile

echo "################################################" >> $logfile

echo "=============== 系统汇整 =======================" >> $logfile

echo "核心版本 : `cat /proc/version | awkbp''''{print $1 " " $2 " " $3 " " $415''''`" \

>> $logfile

echo "CPU 资讯 : `cat /proc/cpuinfo | grep "model name" | \

a&bp''''{print $4 " " $5 " " &15''''`">> $logfile

echo " : `cat /proc/cpuinfo | grep "cpu MHz" | \

kns;''''{print $4 " MHz&qu;#2;''''`" >> $logfile

echo "主机名称 : `/bin/hostname`" &nbs \

>> $logfile

echo "================================================" >> $logfile

echo " " >> $logfile

fi

echo "目前时间: "`date&nbs;Y%/%'''&bp;''''%H:%M` >> $logfile

ipnumber=`cat $basedir/dailyerr | wc -l`

echo "过去两小时内被本程式抵挡的 IP 数量: $ipnumber" >> $logfile

daynumber=`cat $basedir/dailyerr.number`

echo "过去两小时内本程式防火墙启动的次数: $daynumber" >> $logfile

echo " " >> $logfile

cat $basedir/dailyerr >> $basedir/dailytotal

rm $basedir/dailynet

rm $basedir/iptables.http

rm $basedir/dailyerr.number

if [ -f "$iptables_rule" ]; then

sh $iptables_rule

fi

sendor=`date +%H`

if [ "$sendor" == "05" ] || [ "$sendor" == "06" ]; then

echo "本日抵挡的 IP 统计" >> $logfile

sort -n $basedir/dailytotal |uniq -c | \

aknsp;''''{printf("\%-16s \%-3d\n", $2, $14;#25;'''' >> $logfile

mail -s "The deny IPs in your system ." $email < $logfile

[ -f "$oldlogfile" ] && rm $oldlogfile

mv $logfile $oldlogfile

rm $basedir/dailytotal

fi

sync; sync; sync

;;

week)

cat&;$basedir/dailylog >> $basedir/teleport.ip

rm $basedir/dailylog

;;

*)

echo "Usage command is {start|day|week}, such as [$0 start]"

;;

esac

[/code:1:58f13083b3]

seekboy 回复于:2004-06-02 16:19:40

多谢

llzqq 回复于:2004-06-02 16:44:10

这个需要不断重启IPTABLES 是不是有安全漏洞啊?

sports98 回复于:2004-06-11 14:14:34

SSL连接

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有