Hugo博客公告弹窗

一键屏蔽恶意IP:自动化管理Nginx ASN封禁的完整方案

脚本1(推荐)

curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/main/asn-blocker.sh && chmod +x asn-blocker.sh && ./asn-blocker.sh

可以在一段时间后查看数据包:

iptables -L INPUT -v -n | grep "blocked-asn" | awk '{match($0,/blocked-asn-([0-9]+)/,a); printf "ASN %-12s packets: %-4s bytes: %-6s\n", a[1], $1, $2}'

什么是ASN?

ASN(Autonomous System Number)是互联网上的自治系统编号,相当于网络服务商的唯一标识符。通过ASN,我们可以:

  • 快速识别流量来源
  • 批量封禁特定服务商的IP段
  • 有效防御来自特定IDC的恶意扫描

常见的ASN示例:

  • AS14061 (DigitalOcean) - 知名云服务提供商
  • AS135377 (UCLOUD) - 国内云服务商
  • AS202306 (Hostinger) - 国际虚拟主机提供商

脚本2

脚本2适用范围:宝塔面板,如果你的不是,唯一区别就是路径改改即可

每次查看服务器负载,发现高的离谱,一看是IDC的大量恶意IP扫描我的站点,因此根据网友的脚本制作了一版基于ASN的IP封禁。

1. 下载脚本

curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/main/nginxasn.sh && chmod +x nginxasn.sh && ./nginxasn.sh

2. 添加需要封禁的ASN列表

这一步可选,因为默认的ASN基本足够,尤其是AS135377

nano nginxasn.sh

编辑下方的部分,添加想要屏蔽的ASN号码即可,一行一个,不加AS字符

asnlist="135377
14061
202306
9318
12737"

3. 在Nginx配置中启用

在你的网站配置文件中添加:例如屏蔽AS135377则站点配置文件写

include asnblock135377.conf; 其中135377是ASN号码的数字部分。

include asnblock135377.conf;  # UCLOUD
include asnblock14061.conf;   # DigitalOcean
include asnblock202306.conf;  # Hostinger
include asnblock9318.conf;    # SK Broadband
include asnblock12737.conf;   # Netfinity

测试

例如我要封禁本地ip:192.168.1.106

echo "deny 192.168.1.106;" >> /www/server/nginx/conf/asnblock202306.conf
nginx -s reload

然后再访问你的网站,返回403,封禁生效。

移除测试ip

sed -i '/192.168.1.106/d' /www/server/nginx/conf/asnblock202306.conf
nginx -s reload

脚本功能介绍

  1. 自动下载和更新ASN对应的IP段,保存路径

    /www/server/nginx/conf
    

    下载为独立的配置文件,如 asnblock135377.conf

    下载的规则文件内容类似:

    deny 103.21.244.0/22;
    deny 103.22.200.0/22;
    deny 103.31.4.0/22;
    # ... 更多IP段
    
  2. 一键配置Nginx封禁规则

  3. 支持批量管理多个ASN

定时任务

添加下面这行,每天凌晨3点更新ip段

(crontab -l ; echo "0 3 * * * /bin/bash /root/nginxasn.sh >/dev/null") | crontab -

删除任务:

crontab -l | grep -v 'nginxasn.sh' | crontab -

脚本工作原理

  1. 初始化检查

    • 检测并安装必要工具
    • 确保文件格式正确
  2. 下载规则

    • 从ipinfo.app获取最新IP列表
    • 自动生成Nginx配置文件
  3. 配置管理

    • 自动清理旧规则
    • 生成新的封禁配置
    • 重载Nginx服务

常用命令

./nginxasn.sh          # 更新所有规则
./nginxasn.sh --delall # 清空所有规则
./nginxasn.sh -d 14061 # 删除指定ASN规则
./nginxasn.sh -a 14061 # 添加指定ASN规则

注意事项

  1. 确保Nginx配置目录有写入权限
  2. 建议先测试后部署到生产环境
  3. 定期检查规则更新情况
CC BY-NC-SA 4.0 转载请注明
最后更新于 2024-11-20 16:13
clarity统计