Categories


Tags


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

屏蔽国外IP访问

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

wget -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 +x  allcn.sh)

mmode=$1

CNIP="/root/china_ssr.txt"

gen_iplist() {

cat <<-EOF

$(cat ${CNIP:=/dev/null} 2>/dev/null)

EOF

}

flush_r() {

iptables  -F ALLCNRULE 2>/dev/null

iptables -D INPUT -p tcp -j ALLCNRULE 2>/dev/null

iptables  -X ALLCNRULE 2>/dev/null

ipset -X allcn 2>/dev/null

}

mstart() {

ipset create allcn hash:net 2>/dev/null

ipset -! -R <<-EOF

$(gen_iplist | sed -e "s/^/add allcn /")

EOF

iptables -N ALLCNRULE

iptables -I INPUT -p tcp -j ALLCNRULE

iptables -A ALLCNRULE -s 127.0.0.0/8 -j RETURN

iptables -A ALLCNRULE -s 169.254.0.0/16 -j RETURN

iptables -A ALLCNRULE -s 224.0.0.0/4 -j RETURN

iptables -A ALLCNRULE -s 255.255.255.255 -j RETURN

iptables -A ALLCNRULE -m set --match-set allcn  src -j RETURN

iptables -A ALLCNRULE -p tcp -j DROP

}

if [ "$mmode" == "stop" ] ;then

flush_r

exit 0

fi

flush_r

sleep 1

mstart

执行如下命令将开始拦截

/root/allcn.sh

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

/root/allcn.sh stop

CC攻击拦截

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

首先运行

vi  deny_1.sh

添加以下命令语句

#!/bin/bash

if [[ -z $1 ]];then

num=100

else

num=$1

fi

cd $(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 -v str=$num '{if ($1>str){print $2} fi}'`

if [[ ! -z $iplist ]];

then

for black_ip in $iplist

do

ip_section=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'`

grep -q $ip_section ./white_ip.txt

if [[ $? -eq 0 ]];then

echo $black_ip >>./recheck_ip.txt

else

iptables -nL | grep $black_ip || iptables -I INPUT -s $black_ip -j DROP

echo $black_ip >>./black_ip.txt

fi

done

fi

保存后执行以下语句:

chmod +x deny_1.sh

sh deny_1.sh

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

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

首先运行

vi deny_2.sh

添加以下命令语句:

#!/bin/bash

OLD_IFS=$IFS

IFS=$'\n'

for status in `cat 网站访问日志路径 | grep '特征字符' | grep -v '127.0.0.1' | awk '{print $1}' |sort -n | uniq -c | sort -n -r | head -20`

do

IFS=$OLD_IFS

NUM=`echo $status | awk '{print $1}'`

IP=`echo $status | awk '{print $2}'`

if [ -z "`iptables -nvL | grep "dpt:80" | awk '{print $8}' | grep "$IP"`" ];then

if [ $NUM -gt 250 ];then

/sbin/iptables -I INPUT -p tcp  -s $IP --dport 80 -j DROP

fi

fi

done

保存后执行以下语句:

chmod +x deny_2.sh

sh deny_2.sh

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

*/20 * * * * /root/deny_ip1.sh  >dev/null 2>&1

注意:

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

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

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

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

来源:西部数码


Public @ 2009-07-18 15:47:35

如何判断云服务器可支持网站同时多少人在线?

判断云服务器可支持网站同时多少人在线需要考虑以下几个因素: 1. 服务器配置:云服务器的配置越高,能够支持的同时在线人数就越多。 2. 网站负载:网站的负载包括访问量、数据库连接数、静态资源的访问等,这些将影响云服务器的同时处理能力。 3. 带宽:云服务器的带宽能够支持的同时在线人数也受限于带宽。 4. 软件环境:网站使用的软件环境和版本也影响云服务器的性能和同时在线能力。 因此,需要综

Public @ 2023-06-07 17:50:10

云服务器清空破解Windows系统密码

有哪些方法? 一、重启计算机,在引导界面按F8键进入安全模式,用管理员账号登录,计算机登录系统后,可以用“系统管理员”账号更改任何账号的密码。 二、通过安装操作系统原版镜像系统摧毁所有存储在硬盘中的数据,清除硬盘中的所有系统以及所有用户的密码,从而可以自由登录系统。 三、安装密码恢复工具,重置Windows系统密码,通过系统安全位置搜索本地网络上的镜像去恢复用户及管理员的密码。 四、使用L

Public @ 2023-02-24 02:12:26

Linux操作系统下如何对硬盘进行分区并挂载分区(fdisk和mount命令)

环境:虚拟机 centos6.9 64位 ip:192.168.12.114目标:在虚拟机中增加一块40G硬盘,然后把40G的硬盘分出一个30G的扩展分区,再把这个扩展分区分成5个6G的分区,并且实现自动挂载图片1.png一、Fdisk命令:1,fdisk分区fdisk -l 查看系统能识别到的硬盘数量和状态图片2.png可以看到sdb即我们增加的40G硬盘,sda是原来的40G系统盘接下来对硬盘

Public @ 2015-01-27 15:47:31

linux主机通过top看CPU性能指标

服务器变慢负载高时,需要先查看cpu负载是否过高,如果cpu负载高再看查看具体是什么进程占用cpu资源。一. cpu负载:通过top命令查看:图片.png主要看“load average”可理解为分别表示前 1、5、15分钟的平均负荷。通常1核的cpu不应超过4,如是4核cpu则不应超16(即:cpu核数 * 4),超过则说明负载较高存在异常。其他参数说明如下:us(user time) 

Public @ 2018-06-22 15:47:34

更多您感兴趣的搜索

0.428905s