屏蔽国外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攻击拦截 -西部数码帮助中心
如果觉得《Linux服务器 屏蔽国外IP访问及简单的防CC攻击拦截》对你有帮助,请点赞、收藏,并留下你的观点哦!