欢迎各位兄弟 发布技术文章
这里的技术是共享的
下面是自己亲自做的 删除ip的crontab drop ip iptables sh
1) 下在的功能是拒绝ip
# vim /root/drop_ip.sh
#!/bin/bash
#
drop_ip=`tail -5000 /www/wdlinux/httpd-2.2.31/logs/access_log | grep -v "Baiduspider" | grep -v "Sogou web spider" |awk '{a[$1]++}END{for(i in a)if(a[i]>300)print i}'`
for i in $drop_ip; do
if [ -n $i -a -z "`iptables -nvL |grep $i`" ];then
/sbin/iptables -I INPUT -s $i -j DROP
fi
done
港台空间修改后的 drop_ip.sh
#!/bin/bash
#
declare -i COUNT=200
drop_ip=`tail -5000 /www/wdlinux/httpd-2.2.31/logs/access_log | grep -v "101.247.127.33" | grep -v "211.149.206.29" | grep -v "admin21232f297" | grep -v '\.jpg \|\.png \|\.gif \|\.js \|\.png \|\.css ' |grep -v '114.217.193.132' | grep -v "Baiduspider" | grep -v "Sogou" | grep -v "YisouSpider" | grep -v "bingbot" | grep -v "360Spider" | grep -v "HaosouSpider" | grep -v "Googlebot" | awk '{a[$1]++}END{for(i in a)if(a[i]>'$COUNT')print i}'`
for i in $drop_ip; do
if [ -n $i ] && ! iptables -nvL | grep $i &>/dev/null ;then
#echo ${i} `date` >> /root/getipdate.txt
/sbin/iptables -D INPUT -s $i -j DROP &> /dev/null #可能会有重复,我也不懂,我们删除掉它吧
/sbin/iptables -I INPUT -s $i -j DROP
for file in /home/wwwroot/*/public_html/public ;do
if [ -d "$file" -a -f "${file}/.htaccess" ] && echo $i | grep '[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*' &> /dev/null;then
# echo $i
HTACCESS=${file}/.htaccess
if ! grep $i $HTACCESS &>/dev/null;then
sed -i '/SetEnvIf X-Forwarded-for "0.0.0.0"/a \SetEnvIf X-Forwarded-for '\"$i\"' DenyAccess ' $HTACCESS
sed -i 's/\r$//g' $HTACCESS
fi
fi
done
fi
done
chmod +x /root/drop_ip.sh
crontab 里面
*/5 * * * * /bin/bash /root/drop_ip.sh 每隔5分钟执行,把过多的ip拒绝掉
下面是国内空间第二次改版后的drop_ip.sh
#!/bin/bash
#
declare -i COUNT=50
TIME=`date +%s`
TIME1=$[$TIME-60]
TIME1=`date +":%H:%M:" -d @$TIME1`
TIME2=$[$TIME-120]
TIME2=`date +":%H:%M:" -d @$TIME2`
TIME3=$[$TIME-180]
TIME3=`date +":%H:%M:" -d @$TIME3`
#百度好像有个 61.135 开头的 或其局域网是10.143开头的,放行吧
drop_ip=`tail -2000 /www/wdlinux/nginx-1.8.1/logs/access.log | grep "${TIME1}\|${TIME2}\|${TIME3}" | grep -v "tj\.4006363560\.com" | grep -v "61\.135" | grep -v "10\.143" | grep -v "112\.80\.44\.250" | grep -v "101\.247\.127\.33" |grep -v "103\.43\.188\.223" | grep -v "211\.149\.205\.29" | grep -v "admin21232f297" | grep -v '\.jpg[ |\?]\|\.png[ |\?]\|\.gif[ |\?]\|\.js[ |\?]\|\.png[ |\?]\|\.css[ |\?]' |grep -v '114\.217\.193\.132' | grep -v "Baiduspider" | grep -v "Sogou" | grep -v "YisouSpider" | grep -v "bingbot" | grep -v "360Spider" | grep -v "HaosouSpider" | grep -v "Googlebot" | awk '{a[$1]++}END{for(i in a)if(a[i]>'$COUNT')print i}'`
#echo $TIME1 $TIME2 $TIME3
echo $drop_ip
[ -n "$drop_ip" ] && echo "`date` $drop_ip" >> drop_ip.txt
for i in $drop_ip; do
if [ -n $i ] && ! iptables -nvL | grep $i &>/dev/null ;then
#echo ${i} `date` >> /root/getipdate.txt
/sbin/iptables -D INPUT -s $i -j DROP &> /dev/null #可能会有重复,我也不懂,我们删除掉它吧
#echo "/sbin/iptables -I INPUT -s $i -j DROP"
/sbin/iptables -I INPUT -s $i -j DROP
fi
done
2) 下在的功能是清理拒绝的ip,防止iptables 过于臃肿
# vim /root/drop_iptables.sh
#!/bin/bash
#
table=/tmp/iptables.log
/sbin/iptables-save > $table
drop_ip=`cat $table |awk -F'[ /]' '/INPUT.*DROP/{if (NR>6){print $4}}'`
for i in $drop_ip; do
/sbin/iptables -D INPUT -s $i -j DROP
done
港台空间修改后的 drop_iptables.sh
# vim /root/drop_iptables.sh
#!/bin/bash
#
table=/tmp/iptables.log
/sbin/iptables-save > $table
drop_ip=`cat $table |awk -F'[ /]' '/INPUT.*DROP/{if (NR>6){print $4}}'`
for i in $drop_ip; do
/sbin/iptables -D INPUT -s $i -j DROP
# 下面是删除 .htaccess里面的拒绝的ip
for file in /home/wwwroot/*/public_html/public ;do
if [ -d "$file" -a -f "${file}/.htaccess" ];then
HTACCESS=${file}/.htaccess
sed -i '/'$i'/d' $HTACCESS
sed -i 's/\r$//g' $HTACCESS
fi
done
done
港台空间第二次修改后的 drop_iptables.sh
#!/bin/bash
#
table=/tmp/iptables.log
/sbin/iptables-save > $table
drop_ip=`cat $table |awk -F'[ /]' '/INPUT.*DROP/{if (NR>6){print $4}}'`
for i in $drop_ip; do
/sbin/iptables -D INPUT -s $i -j DROP
done
# 下面是删除 .htaccess里面的所有的拒绝的ip
for file in /home/wwwroot/*/public_html/public ;do
if [ -d "$file" -a -f "${file}/.htaccess" ];then
HTACCESS=${file}/.htaccess
sed -i '/SetEnvIf/{/0.0.0.0/!d}' $HTACCESS
sed -i 's/\r$//g' $HTACCESS
fi
done
~
chmod +x /root/drop_iptables.sh
crontab 里面
0 */3 * * * /bin/bash /root/drop_iptables.sh 每隔3小时执行清空拒绝的id,防止iptables过份臃肿
切记 .htaccess 文件的最后包括下面这几行
Order Deny,Allow
SetEnvIf X-Forwarded-for "0.0.0.0" DenyAccess
Deny from env=DenyAccess
如果 开启nginx+apache 的话 下面是nginx.conf的配置 wwwlogs 是日志格式 %{X-FORWARDED-FOR}i 是有代理时代理访问的源ip
如果仅仅是apache开启的话 下而 httpd.conf的配置 common是日志格式 %{X-FORWARDED-FOR}i 是有代理时代理访问的源ip
DDOS是一种分布式拒绝服务攻击,通常是攻击者使用几百台机器或甚至几万台以上的机器进行试图掩没攻击目标的一种攻击行为,使目标机器在短时间内变成瘫痪现象,一下接收了巨大的数据包,它就算是台巨型机的速度,也不能达到一下子处理几千台或几万台机子攻击目标的现象。而CC攻击是由DDOS攻击衍生而来,当初绿盟科技推广了一款能够抵御DDOS攻击的方法,俗称黑洞(Collapsar),黑客则通过攻击操作数据的网页达到服务器目标机器瘫痪的目的,并且挑衅性的将这种方法称为CC攻击(Challenge Collapsar),即挑战黑洞。就例如几年前12306购票网站,网页打不开的情况,就是因为访问量太大造成。
既然服务器都存在CC攻击的可能性,那么我们就可以写一个脚本来用iptables把连接过多的给删掉。首先方法即使从日志中提取ip,进行分析
vim /usr/local/iptables/drop_ip.sh
#!/bin/bash
drop_ip=`tail -5000 /var/local/nginx/logs/access.log | awk '{a[$1]++}END{for(i in a)if(a[i]>300)print i}' `
if test -n $drop_ip;then
for i in drop_ip
do
if [ -z "`iptables -nvL |grep $i`" ];then
/sbin/iptables -I INPUT -s $i -j DROP
fi
done
fi
定期执行
crontab -e
*/5 * * * * sh /usr/local/iptables/drop_ip.sh
为了防止防火墙规则过于臃肿我们需要把一些过时的规则给删掉
vim /usr/local/iptables/drop_iptables.sh
#!/bin/bash
table=/tmp/iptables.log
iptables-save > $table
drop_ip=`cat $table |awk -F'[ /]' /DROP/'{if (NR>8){print $4}}'`
for i in $drop_ip
do
/sbin/iptables -D INPUT -s $i -j DROP
done
//定期执行此脚本
crontab -e
0 */3 * * * sh /usr/local/iptables/drop_iptables.sh
来自 https://baijiahao.baidu.com/s?id=1588212564531694639&wfr=spider&for=pc