🏳️🌈春节年付特惠专区
火爆
美国VPS屏蔽国外IP访问及简单的防CC攻击拦截
发布时间:2026-01-21 15:06
阅读量:9
美国VPS屏蔽国外IP访问通过ssh远程登录服务器内,运行如下命令语句获取国内IP网段,会保存为/root/china_ssr.txtwget-q--timeout=60-O-'http://ftp.apnic.net/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+xallcn.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.shstopCC攻击拦截方式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执行前建议先将原日志文件改名,以重新生成的新的日志文件为准。不建议长时间进行拦截,请在一段时间后待服务器负载正常,攻击基本停止后及时取消拦截,恢复原先状态。