建站十几年建了十几个网站了,小到每日几个十几个访客,大到每日上万访客,黑客攻击是任何一个有流量的网站都避免不了的,一般网站流量越大被攻击频率越高。虽然说我网站现在流量也不大,但是也免不了被攻击。虽然说阿里云也有很多云安全产品,购买之后防黑客这点小小攻击很简单,但是我服务器一年还不到100块钱,那些安全服务一年得大几百块钱。再说现在黑客攻击频率不大,能用免费方法自己抗就自己抗了,抗不过去再花钱买额外服务。本次记录一下通过python脚本记录黑客在WordPress网站暴力破解登录次数过多就自动拉黑IP的方法,方便以后查看。
首先服务器用的是阿里云ECS,系统是Debian
先创建 RAM 用户的 AccessKey:
- 为了安全,不要使用阿里云主账号的 AccessKey。
- 进入 RAM 访问控制 控制台(找不到就搜RAM),创建一个新用户(例如命名为
waf-bot),访问配置里勾选【使用永久 AccessKey 访问】 - 创建成功后,保存好 AccessKey ID 和 AccessKey Secret,不然就找不到了。
- 在左侧导航权限管理-权限策略-创建权限策略。服务里选择“云服务器ECS”,“指定操作”里搜“securityGroup”,把读操作,写操作,列表操作都勾选上,然后点击确定创建完成。
- 再到用户列表里给这个用户waf-bot授权,在“权限管理”-“新增授权”,找到刚才新增的这个自定义策略“securityGroup”,确定授权
新建安全组“Auto-Block-SG”,删除里面的默认所有规则,然后把服务器实例添加进这个安全组去,之后的所有操作都在这个安全组内进行,这样就算误操作也不会影响原安全组和网站运行。
服务器安装阿里云最新的 Python SDK
pip3 install alibabacloud_ecs20140526 alibabacloud_tea_openapi服务器创建python脚本
import os
import re
import json
import time
from collections import defaultdict
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526 import models as ecs_models
# ================= 配置区 =================
ACCESS_KEY_ID = 'XXXXX'
ACCESS_KEY_SECRET = 'XXXXX'
REGION_ID = 'cn-heyuan' # 你的ECS所在地域,如 cn-hangzhou, cn-beijing
SECURITY_GROUP_ID = 'sg-xxx' # 你的安全组ID (专门用于拦截的安全组)
# 使用字典为不同的路径配置独立的阈值 (1分钟内的 POST 次数)
TARGET_RULES = {
'/login': 4,
'/wp-login.php': 4,
'/xmlrpc.php': 1
}
LOG_FILE = '/var/log/nginx/access.log' # Nginx 日志路径
STATE_FILE = '/root/blocked_ips.json' # 本地缓存账本路径
HIGH_WATERMARK = 490 # 高水位线:规则数达到此值触发清理
BATCH_DELETE_COUNT = 30 # 每次清理释放的旧 IP 数量
# =========================================
def init_aliyun_client():
"""初始化阿里云客户端"""
config = open_api_models.Config(
access_key_id=ACCESS_KEY_ID,
access_key_secret=ACCESS_KEY_SECRET,
region_id=REGION_ID
)
return EcsClient(config)
def load_state():
"""读取本地 JSON 账本"""
if not os.path.exists(STATE_FILE):
return {}
try:
with open(STATE_FILE, 'r') as f:
return json.load(f)
except json.JSONDecodeError:
return {} # 如果文件损坏,返回空字典重置
def save_state(state):
"""保存状态到本地 JSON 账本"""
with open(STATE_FILE, 'w') as f:
json.dump(state, f, indent=4)
def revoke_ip_in_aliyun(client, ip):
"""调用 API:在安全组中删除拦截规则 (解封)"""
request = ecs_models.RevokeSecurityGroupRequest(
region_id=REGION_ID,
security_group_id=SECURITY_GROUP_ID,
ip_protocol='all',
port_range='-1/-1',
source_cidr_ip=f"{ip}/32",
policy='Drop'
)
client.revoke_security_group(request)
def block_ip_in_aliyun(client, ip):
"""调用 API:在安全组中添加拦截规则 (封禁)"""
request = ecs_models.AuthorizeSecurityGroupRequest(
region_id=REGION_ID,
security_group_id=SECURITY_GROUP_ID,
ip_protocol='all',
port_range='-1/-1',
source_cidr_ip=f"{ip}/32",
policy='Drop',
priority=1,
description='Auto blocked by Python Script'
)
client.authorize_security_group(request)
def check_and_clean_capacity(client, state):
"""容量管理:高低水位线机制批量清理最老IP"""
current_count = len(state)
if current_count >= HIGH_WATERMARK:
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [大扫除] 规则数达 {current_count},触发批量清理...")
# 按照时间戳从小到大(从老到新)排序
sorted_ips = sorted(state.items(), key=lambda item: item[1])
ips_to_remove = sorted_ips[:BATCH_DELETE_COUNT]
for ip, _ in ips_to_remove:
try:
revoke_ip_in_aliyun(client, ip)
del state[ip]
print(f" [-] 已释放最老 IP: {ip}")
except Exception as e:
print(f" [x] 释放 IP {ip} 失败: {e}")
save_state(state)
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] [大扫除] 结束,当前规则数: {len(state)}")
return state
return state
def analyze_logs_and_block():
state = load_state()
# 升级:使用嵌套字典记录每个IP对各个路径的访问次数
# 结构类似: { '8.8.8.8': { '/login': 3, '/xmlrpc.php': 1 } }
ip_path_counts = defaultdict(lambda: defaultdict(int))
try:
log_lines = os.popen(f"tail -n 2000 {LOG_FILE}").readlines()
except Exception as e:
print(f"读取日志失败: {e}")
return
log_pattern = re.compile(r'^(\d+\.\d+\.\d+\.\d+).*?"(POST|GET) (.*?) HTTP')
# 3. 统计恶意动作
for line in log_lines:
match = log_pattern.search(line)
if match:
ip = match.group(1)
method = match.group(2)
url = match.group(3)
# 匹配不同的目标路径并分别计数
if method == 'POST':
for target_path in TARGET_RULES.keys():
if target_path in url:
ip_path_counts[ip][target_path] += 1
break # 匹配到一个路径就跳出,提高执行效率
# 4. 判断并执行封禁
client = None
need_save = False
# 遍历所有出现过的 IP 及其各路径访问次数
for ip, counts in ip_path_counts.items():
# 遍历该 IP 访问过的每个路径
for path, count in counts.items():
# 查表对比:当前路径的访问次数,是否达到该路径对应的封禁阈值
if count >= TARGET_RULES[path]:
if ip not in state:
if not client:
client = init_aliyun_client()
state = check_and_clean_capacity(client, state)
try:
# 打印日志时,精确定位是因为哪个路径被封的
print(f" [!] 发现恶意 IP: {ip} (请求 {path} 达 {count} 次),准备拦截...")
block_ip_in_aliyun(client, ip)
state[ip] = time.time()
need_save = True
print(f" [+] IP: {ip} 封禁成功。")
except Exception as e:
print(f" [x] 封禁 IP {ip} 失败 (可能已在安全组或遇到限流): {e}")
# 只要该 IP 触发了任意一条路径的拉黑规则,就不用再检查它的其他路径了
break
if need_save:
save_state(state)
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 检查完毕。\n" + "-"*40)
if __name__ == '__main__':
analyze_logs_and_block()创建定时任务,让服务器每分钟执行一次
crontab -e假设脚本路径是 /root/auto_block_ip.py
* * * * * /usr/bin/python3 /root/auto_block_ip.py >> /root/auto_block.log 2>&1
按ctrl + o ,回车,保存,ctrl +x 退出。
只要发现有 IP 在疯狂 POST /login,脚本就会悄无声息地调用阿里云接口,在安全组的最外围直接把这个 IP 屏蔽。黑客的后续请求连 Nginx 服务器都碰不到,更不用说消耗 WordPress 的数据库资源了。
部署完成后,你可以通过查看日志来监控脚本的工作情况
tail -f /root/auto_block.log如果平时没有被攻击,日志里只会安静地打印“开始检查…”和“检查完毕。”。当黑客开始爆破时,你会看到它迅速执行拦截
相关推荐
最近更新
免费在线HTML转markdown工具
经常看一些在线文档,想复制给AI参考的话不方便直接复制,转换成markdown再给AI阅读会更简单明了,也方便自己查阅,这里给大家推荐两个在线的免费HTML转markdown网站。 1、https://d1tools.com/tools/c...

闲鱼自动回复机器人XianyuAutoAgent下载,24小时在线智能客服机器人系统
XianyuAutoAgent是一款面向闲鱼平台的智能化自动回复机器人,利用大语言模型自动识别买家意图并生成专业回复,实现 7×24 小时智能客服。 主要功能 1. 智能自动回复 2. 可视化 Web UI 3. 人工接管模式 4. 安全防...

AI漫剧制作即梦seedance2.0教程及提示词2026年5月最新版分享
AI视频依旧持续火爆,各种类型的AI视频层出不穷,视频效果也是越来越好,甚至快接近影视级,目前最主要的AI视频生成工具还是即梦,即梦 Seedance 2.0生成视频一秒钟都到2块多钱了😂,不过也没办法,还是得用,目前还没能有替代即梦see...

AI实时语音聊天对话系统,外语口语陪练/虚拟好友实时语音交流
AI 实时语音对话系统 是一款集语音识别(ASR)、大语言模型(LLM)对话、语音合成(TTS)于一体的实时语音交互软件。用户通过麦克风说话,系统自动识别语音内容并转为文字,交由 AI 角色进行智能回复,最终将回复内容合成为语音实时播放,实...

ComfyUI 三参考图生图工作流,虚拟试衣、换脸、图片内容整合
本工作流核心能力是将三张不同角度、内容的参考图,通过 AI 理解融合,生成一张新的图像,新图像内容根据描述词指令生成。工作流集成了阿里巴巴的 Qwen2.5-VL 多模态大模型(图像编辑版本)与 SeedVR2 超分辨率放大模型,实现了「理...
comfyui CUDA128+torch 2.8.0+python3.12最新纯净版一键启动整合包
comfyui官方发布的最新版便携包是基于torch 2.11+CU130 +Python 3.13版本制作的,Python版本和torch版本都太新了,windows电脑上安装某些节点的时候会有冲突报错,有时候就算能安装上也会比较麻烦,感...
LTX2.3+comfyui音频驱动视频生成工作流
这是一个基于 ComfyUI 的 LTX 2.3 音视频同步生成工作流,核心功能是上传一段音频 + 参考图片(可多张图),自动生成与音频内容对应的视频,适合制作人物说话、唱歌等口型同步视频。工作流使用8位量化版ltx2.3模型,显存需求降低...
LTX2.3+comfyui分段提示词图片转视频工作流,AI视频带货生成器
再和大家分享一个基于 ComfyUI 的 AI 分段提示词图生视频工作流,本工作流主要基于模型LTX2.3和PromptRelay实现。可使用PromptRelay分时段控制生成不同视频画面或合成语音内容。 📌 工作流简介 本工作流是一套基...
windows电脑C盘垃圾查找清理软件
电脑用了好几年了,尽管我安装软件从来不主动装到C盘,偶尔也会清理垃圾,但是用的久了,容量也是在慢慢减少。我C盘303G,现在就剩了24G了,已经会影响到系统性能和虚拟内存调度了,已经不能不管了。C盘不装软件的话大多都是缓存,文件太多了,有时...

LTX2.3+comfyui视频去除字幕水印工作流分享
本次再和大家分享一个视频去字幕水印的comfyui工作流,工作流基于LTX2.3视频生成模型制作。LTX2.3是最新最强的视频生成模型,我前段时间就分享过了,可以看我另一篇文章:https://nuowa.net/2525,comfyui项...
















