网站优化技术

Linux服务器安全加固:国外IP访问屏蔽与CC攻击防御策略

发布于:
最后更新时间:
热度:111

在Linux服务器安全运维实践中,针对非必要国外IP访问的屏蔽及CC攻击的有效拦截,是提升服务器安全防护能力的重要手段。本文将详细介绍通过开源工具实现上述功能的操作步骤与核心逻辑,为服务器安全加固提供实践参考。

屏蔽国外IP访问

为精准限制非国内IP的访问请求,需先获取最新的中国IPv4地址网段数据。通过SSH远程登录服务器后,执行以下命令从亚太网络信息中心(APNIC)官方数据源提取国内IP网段,并将结果保存至/root/china_ssr.txt文件:

```bash

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

```

该命令利用wget获取APNIC最新 delegations 数据,并通过awk字段处理提取中国(CN)的IPv4地址段,结合子网掩码计算生成标准CIDR格式网段列表。

随后,将以下脚本内容保存为/root/allcn.sh文件,并通过`chmod +x allcn.sh`命令赋予可执行权限:

```bash

mmode=$1

CNIP="/root/china_ssr.txt"

gen_iplist() {

cat <

$(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 <

$(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

```

该脚本通过ipset工具管理国内IP集合,结合iptables实现精细化访问控制。其中,gen_iplist函数负责读取已下载的国内IP网段列表;flush_r函数用于清理历史规则链,避免规则冲突;mstart函数则创建名为allcn的ipset集合,导入国内IP网段,并构建INPUT链规则,允许国内IP访问,拦截非国内TCP连接。

执行`/root/allcn.sh`即可启动IP拦截策略,系统将自动丢弃来自非国内IP地址的TCP连接请求;若需停止拦截,执行`/root/allcn.sh stop`命令即可清理相关规则。

CC攻击防御策略

基于并发连接数的IP拦截

通过分析当前TCP连接状态,可快速识别异常并发访问的IP地址。创建/root/deny_1.sh脚本,实现自动化拦截逻辑:

```bash

#!/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

```

脚本通过netstat命令统计当前80端口的TCP连接,提取源IP地址并计算连接数,对超过阈值(默认100)的IP进行拦截。同时,通过white_ip.txt文件实现白名单机制,若IP段与白名单条目匹配,则记录至recheck_ip.txt待人工核查,避免误拦截正常用户。执行`chmod +x deny_1.sh && sh deny_1.sh`即可启动拦截,被拦截IP将记录至black_ip.txt文件。

基于日志特征的攻击IP过滤

通过分析网站访问日志中的异常访问模式,可精准定位恶意IP。创建/root/deny_2.sh脚本,实现基于日志特征的拦截:

```bash

#!/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

```

脚本通过分析日志中的特征字符(如高频请求路径、恶意参数等),统计IP访问次数,对超过阈值(默认250)的IP实施拦截。执行前需将原日志文件重命名,确保分析数据为当前实时日志。建议通过crontab添加定时任务(如/20 /root/deny_2.sh >dev/null 2>&1),实现自动化防御。

注意事项

1. CDN环境适配:若服务器使用CDN加速(如百度云加速),访问来源为CDN节点IP,直接拦截可能导致误伤,建议结合CDN服务商的防护策略配置。

2. 白名单机制:方式1中,与white_ip.txt匹配的IP段将进入recheck_ip.txt,需定期核查避免正常用户被误拦截。

3. 日志管理:方式2执行前务必重命名原日志文件,确保分析数据的准确性,避免历史日志干扰判断。

4. 拦截时长控制:不建议长时间启用拦截策略,待服务器负载正常、攻击停止后,应及时清理规则,恢复服务正常访问。

5. 规则验证:实施拦截后,可通过`iptables -L -n`命令验证规则生效情况,确保符合预期防护效果。

最新资讯

为您推荐

联系上海网站优化公司

上海网站优化公司QQ
上海网站优化公司微信
添加微信