自动防盗链脚本
时间:2008-07-14 来源:jackylau
[root@music shell]# crontab -l
*/5 * * * * /tools/shell/url.sh >>/tools/url.log 2>&1
10 */4 * * * /tools/shell/flush_iptables.sh >>/tools/flush.log 2>&1
[root@music shell]# cat /tools/shell/flush_iptables.sh
#!/bin/sh
IPTABLES="/sbin/iptables"
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
>/usr/local/apache2/conf/drop_ip
[root@music shell]# cat /tools/shell/url.sh
#!/bin/sh
#声明被监控的SERVER IP
IP="192.168.200.18"
#声明被DROP掉的IP地址存放文件名
DROP_IP="/usr/local/apache2/conf/drop_ip"
#声明被rewrite的存放文件名
CONF="/usr/local/apache2/conf/rewrite.conf"
#声明被同时下载超过80次的文件(除推荐文件外)
FILES=$(lynx --width=300 --dump http://$IP/server-status|grep "localhost"|grep -v "wma"|awk '{if($14 !~/(song|flash)\//print $14}'|sort|uniq -c|sort -nr|awk '{if($1>80) print $2}')
#声明声明被同时下载超过80次的文件的个数
COUNT=$(echo $FILES|awk '{print NF}')
#如果被同时下载超过80次的文件存在,进行下面的操作
if [ $COUNT -gt 0 ];then
#进行for循环
for file in $FILES
do
#如果此文件已存在在rewrite.conf文件,则不进行任何动作,否则把其写进rewrite.conf文件
grep -q $file $CONF||echo "RewriteRule ^$file http://www.colorme.com.cn/cooperate/hot [L]" >>$CONF
done
#检查apache的语法是否正确,如果正确,则graceful apache
if [ `/usr/local/apache2/bin/apachectl configtest`="Syntax OK" ];then
/usr/local/apache2/bin/apachectl graceful
fi
fi
#声明推荐文件
COMMEND=$(lynx --width=300 --dump http://$IP/server-status|grep "localhost"|awk '{if($14 ~/\/(song|flash)\//)print $14}'|sort|uniq)
#声明推荐文件的个数
COUNT_FN=$(echo $COMMEND|awk '{print NF}')
#声明推荐文件的被同时下载超过80次的IP地址
MULTI_IP=$(lynx --width=300 --dump http://$IP/server-status|grep "localhost"|grep "$COMMEND"|awk '{print $11,$14}'|sort|uniq -c|sort -nr|awk '{if($1>50) print $2}')
#如果推荐文件的个数超过0且推荐文件的被同时下载超过80次的IP地址不为空时,进行下面的操作
if [ $COUNT_FN -gt 0 -a "X$MULTI_IP" != "X" ];then
for ip in $MULTI_IP
do
#如果IP地址已存在drop_ip文件则不操作,否则把此IP给DROP掉,然后追加drop_ip文件
grep -q $ip $DROP_IP ||(/sbin/iptables -A INPUT -s $ip -j DROP;echo $ip >>$DROP_IP)
done
fi
*/5 * * * * /tools/shell/url.sh >>/tools/url.log 2>&1
10 */4 * * * /tools/shell/flush_iptables.sh >>/tools/flush.log 2>&1
[root@music shell]# cat /tools/shell/flush_iptables.sh
#!/bin/sh
IPTABLES="/sbin/iptables"
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
>/usr/local/apache2/conf/drop_ip
[root@music shell]# cat /tools/shell/url.sh
#!/bin/sh
#声明被监控的SERVER IP
IP="192.168.200.18"
#声明被DROP掉的IP地址存放文件名
DROP_IP="/usr/local/apache2/conf/drop_ip"
#声明被rewrite的存放文件名
CONF="/usr/local/apache2/conf/rewrite.conf"
#声明被同时下载超过80次的文件(除推荐文件外)
FILES=$(lynx --width=300 --dump http://$IP/server-status|grep "localhost"|grep -v "wma"|awk '{if($14 !~/(song|flash)\//print $14}'|sort|uniq -c|sort -nr|awk '{if($1>80) print $2}')
#声明声明被同时下载超过80次的文件的个数
COUNT=$(echo $FILES|awk '{print NF}')
#如果被同时下载超过80次的文件存在,进行下面的操作
if [ $COUNT -gt 0 ];then
#进行for循环
for file in $FILES
do
#如果此文件已存在在rewrite.conf文件,则不进行任何动作,否则把其写进rewrite.conf文件
grep -q $file $CONF||echo "RewriteRule ^$file http://www.colorme.com.cn/cooperate/hot [L]" >>$CONF
done
#检查apache的语法是否正确,如果正确,则graceful apache
if [ `/usr/local/apache2/bin/apachectl configtest`="Syntax OK" ];then
/usr/local/apache2/bin/apachectl graceful
fi
fi
#声明推荐文件
COMMEND=$(lynx --width=300 --dump http://$IP/server-status|grep "localhost"|awk '{if($14 ~/\/(song|flash)\//)print $14}'|sort|uniq)
#声明推荐文件的个数
COUNT_FN=$(echo $COMMEND|awk '{print NF}')
#声明推荐文件的被同时下载超过80次的IP地址
MULTI_IP=$(lynx --width=300 --dump http://$IP/server-status|grep "localhost"|grep "$COMMEND"|awk '{print $11,$14}'|sort|uniq -c|sort -nr|awk '{if($1>50) print $2}')
#如果推荐文件的个数超过0且推荐文件的被同时下载超过80次的IP地址不为空时,进行下面的操作
if [ $COUNT_FN -gt 0 -a "X$MULTI_IP" != "X" ];then
for ip in $MULTI_IP
do
#如果IP地址已存在drop_ip文件则不操作,否则把此IP给DROP掉,然后追加drop_ip文件
grep -q $ip $DROP_IP ||(/sbin/iptables -A INPUT -s $ip -j DROP;echo $ip >>$DROP_IP)
done
fi
相关阅读 更多 +