100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Linux服务器 屏蔽国外IP访问及简单的防CC攻击拦截

Linux服务器 屏蔽国外IP访问及简单的防CC攻击拦截

时间:2023-03-05 06:05:49

相关推荐

Linux服务器 屏蔽国外IP访问及简单的防CC攻击拦截

屏蔽国外IP访问

通过ssh远程登录服务器内,运行如下命令语句获取国内IP网段,会保存为/root/china_ssr.txt

wget-q--timeout=60-O-'/apnic/stats/apnic/delegated-apnic-latest'|awk-F\|'/CN\|ipv4/{printf("%s/%d\n",$4,32-log($5)/log(2))}'>/root/china_ssr.txt

将下面脚本保存为/root/allcn.sh ,并设置可执行权限( 命令: chmod +x allcn.sh)

mmode=$1CNIP="/root/china_ssr.txt"gen_iplist(){cat<<-EOF$(cat${CNIP:=/dev/null}2>/dev/null)EOF}flush_r(){iptables-FALLCNRULE2>/dev/nulliptables-DINPUT-ptcp-jALLCNRULE2>/dev/nulliptables-XALLCNRULE2>/dev/nullipset-Xallcn2>/dev/null}mstart(){ipsetcreateallcnhash:net2>/dev/nullipset-!-R<<-EOF$(gen_iplist|sed-e"s/^/addallcn/")EOFiptables-NALLCNRULEiptables-IINPUT-ptcp-jALLCNRULEiptables-AALLCNRULE-s127.0.0.0/8-jRETURNiptables-AALLCNRULE-s169.254.0.0/16-jRETURNiptables-AALLCNRULE-s224.0.0.0/4-jRETURNiptables-AALLCNRULE-s255.255.255.255-jRETURNiptables-AALLCNRULE-mset--match-setallcnsrc-jRETURNiptables-AALLCNRULE-ptcp-jDROP}if["$mmode"=="stop"];thenflush_rexit0fiflush_rsleep1mstart

执行如下命令将开始拦截

/root/allcn.sh

执行如下命令即可停止拦截

/root/allcn.shstop

CC攻击拦截

方式1:通过netstat -an命令统计出当前请求并发大于100的IP,然后将不在白名单的IP自动加入DROP规则

首先运行

videny_1.sh

添加以下命令语句

#!/bin/bashif[[-z$1]];thennum=100elsenum=$1ficd$(cd$(dirname$BASH_SOURCE)&&pwd)iplist=`netstat-an|grep^tcp.*:80|egrep-v'LISTEN|127.0.0.1'|awk-F"[]+|[:]"'{print$6}'|sort|uniq-c|sort-rn|awk-vstr=$num'{if($1>str){print$2}fi}'`if[[!-z$iplist]];thenforblack_ipin$iplistdoip_section=`echo$black_ip|awk-F"."'{print$1"."$2"."$3}'`grep-q$ip_section./white_ip.txtif[[$?-eq0]];thenecho$black_ip>>./recheck_ip.txtelseiptables-nL|grep$black_ip||iptables-IINPUT-s$black_ip-jDROPecho$black_ip>>./black_ip.txtfidonefi

保存后执行以下语句:

chmod+xdeny_1.shshdeny_1.sh

拦截的IP会记录到black_ip.txt中,如果有要排除的白名单IP,可将这些IP加入到white_ip.txt,一行一个。

方式2:通过web网站日志中攻击者访问特征,根据这些特征过滤出攻击的ip,利用iptables来阻止(排除本机IP:127.0.0.1)。

首先运行

videny_2.sh

添加以下命令语句:

#!/bin/bashOLD_IFS=$IFSIFS=$'\n'forstatusin`cat网站访问日志路径|grep'特征字符'|grep-v'127.0.0.1'|awk'{print$1}'|sort-n|uniq-c|sort-n-r|head-20`doIFS=$OLD_IFSNUM=`echo$status|awk'{print$1}'`IP=`echo$status|awk'{print$2}'`if[-z"`iptables-nvL|grep"dpt:80"|awk'{print$8}'|grep"$IP"`"];thenif[$NUM-gt250];then/sbin/iptables-IINPUT-ptcp-s$IP--dport80-jDROPfifidone

保存后执行以下语句:

chmod+xdeny_2.shshdeny_2.sh

最后使用crontab -e 添加到任务计划,每20分钟执行一次:

*/20****/root/deny_ip1.sh>dev/null2>&1

注意:

对于使用了百度云加速或其他cdn加速的,访问者IP可能会是CDN节点IP,刚不适用此方式进行拦截。

对于方式1 若发现和白名单同一个段IP出现在高并发列表,将不会直接拉黑,而是写入到recheck_ip.txt.

对于方式2 执行前建议先将原日志文件改名,以重新生成的新的日志文件为准。

不建议长时间进行拦截,请在一段时间后待服务器负载正常,攻击基本停止后及时取消拦截,恢复原先状态。

原文链接:Linux服务器 屏蔽国外IP访问及简单的防CC攻击拦截 -西部数码帮助中心

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。