- 添加速率限制中间件,防止API滥用和DDoS攻击 - 添加可疑请求检测,基于行为模式识别攻击 - 添加输入清理和验证,防止命令注入和XSS攻击 - 更新middleware.ts,集成所有安全功能 - 添加fail2ban安装脚本,防止SSH暴力破解 - 不依赖IP黑名单,适用于所有攻击者 安全功能: - API速率限制:每分钟100次请求 - 认证速率限制:每分钟5次请求 - 自动检测可疑请求模式 - 输入清理和验证 - 详细的安全日志记录
4.1 KiB
4.1 KiB
安全加固实施指南
🎯 解决方案概述
本方案采用多层防护策略,不依赖IP黑名单,而是基于行为模式检测来阻止攻击。
📋 已实现的安全功能
1. ✅ 速率限制(Rate Limiting)
- 文件:
lib/security/rate-limiter.ts - 功能:
- API请求:每分钟100次
- 认证请求:每分钟5次
- 严格模式:每分钟10次
- 优势:自动阻止异常请求,不依赖IP黑名单
2. ✅ 可疑请求检测
- 文件:
lib/security/request-monitor.ts - 功能:
- 检测可疑路径(/.env, /.git等)
- 检测可疑User-Agent
- 记录所有可疑请求
- 优势:基于行为模式,适用于所有攻击者
3. ✅ 输入清理和验证
- 文件:
lib/security/input-sanitizer.ts - 功能:
- 移除命令注入字符(; | ` $等)
- 移除危险关键词(wget, curl, bash等)
- 防止路径遍历(../)
- 防止XSS攻击
- 优势:在数据进入应用前就清理,防止命令注入
4. ✅ 中间件集成
- 文件:
middleware.ts - 功能:
- 自动应用速率限制
- 检测可疑请求
- 记录安全事件
- 优势:所有请求都经过安全检查
🚀 实施步骤
步骤1:部署代码更新
# 1. 提交代码更改
git add lib/security/ middleware.ts scripts/
git commit -m "feat: 添加多层安全防护机制"
git push
# 2. 在服务器上拉取更新
cd /var/www/ai-chatbot
git pull
# 3. 重新构建
pnpm install
pnpm build
# 4. 重启应用
pm2 restart ai-chatbot
步骤2:安装fail2ban(SSH防护)
# 在服务器上执行
bash scripts/install-fail2ban.sh
# 或手动安装
dnf install -y epel-release fail2ban
systemctl enable fail2ban
systemctl start fail2ban
步骤3:在API路由中应用输入验证
在关键的API路由中添加输入验证:
import { validateRequestBody } from "@/lib/security/input-sanitizer";
export async function POST(request: Request) {
const body = await request.json();
// 验证和清理请求体
const validation = await validateRequestBody(body);
if (!validation.valid) {
return NextResponse.json(
{ error: "Invalid request", details: validation.errors },
{ status: 400 }
);
}
// 使用清理后的数据
const sanitizedBody = validation.sanitized;
// ... 处理请求
}
🔍 监控和日志
查看安全日志
# 查看应用日志中的安全事件
tail -f /var/log/pm2/ai-chatbot-out.log | grep "Security"
# 查看fail2ban日志
tail -f /var/log/fail2ban.log
# 查看被封禁的IP
fail2ban-client status sshd
监控指标
- 速率限制触发次数
- 可疑请求检测次数
- 输入验证失败次数
- fail2ban封禁的IP数量
🛡️ 防护效果
防止的攻击类型
- ✅ 命令注入:通过输入清理和验证
- ✅ 暴力破解:通过速率限制和fail2ban
- ✅ DDoS攻击:通过速率限制
- ✅ 路径遍历:通过输入清理
- ✅ XSS攻击:通过输入清理
- ✅ 异常请求:通过可疑请求检测
优势
- 🌍 不依赖IP黑名单:适用于所有攻击者
- 🔄 自动适应:基于行为模式检测
- 📊 可监控:详细的安全日志
- ⚡ 高性能:轻量级实现,不影响性能
📚 进一步优化建议
短期(1-2周)
- 在所有API路由中应用输入验证
- 配置fail2ban监控更多服务(Nginx、PostgreSQL等)
- 设置安全告警(邮件/短信通知)
中期(1-2月)
- 集成CrowdSec获取社区威胁情报
- 实施更细粒度的速率限制策略
- 添加请求签名验证
长期(3-6月)
- 部署ModSecurity WAF
- 实施SELinux策略
- 建立安全审计流程
🆘 应急响应
如果发现新的攻击:
- 检查应用日志:
tail -f /var/log/pm2/ai-chatbot-error.log - 检查fail2ban状态:
fail2ban-client status - 手动封禁IP:
fail2ban-client set sshd banip <IP地址> - 更新可疑模式:编辑
lib/security/request-monitor.ts - 更新输入清理规则:编辑
lib/security/input-sanitizer.ts