项目计划
1. 需求分析
- 目的:定义项目的具体目标和技术要求。
- 确定要保护的服务(如 SSH、FTP)。
- 确定需要监控的日志文件和关键词。
- 分析现有的安全措施和漏洞。
2. 设计与规划
- 目的:设计系统架构并规划技术栈。
- 选择合适的日志监控工具(如
fail2ban
)。 - 确定防火墙规则的配置(如
iptables
)。 - 设计脚本的逻辑流程。
- 制定备份和恢复策略。
3. 实施开发
- 目的:编写脚本和配置文件。
- 编写 shell 脚本来监控日志文件。
- 配置
fail2ban
规则文件。 - 测试脚本的功能。
4. 测试与验证
- 目的:确保系统的稳定性和可靠性。
- 单元测试脚本的各个部分。
- 集成测试整个系统。
- 执行模拟攻击进行压力测试。
5. 部署与维护
- 目的:将系统部署到生产环境,并持续监控其性能。
- 在服务器上部署脚本和服务。
- 设置定时任务来定期清理 iptables 规则。
- 监控系统性能并进行必要的调整。
技术栈
- 操作系统:Linux(例如 Ubuntu Server)
- 日志监控工具:
fail2ban
- 防火墙管理:
iptables
- 脚本语言:Bash
详细步骤
1. 需求分析
- 目标服务:SSH (端口 22)
- 日志文件:
/var/log/auth.log
- 关键词:
Failed password
,authentication failure
2. 设计与规划
- 日志监控工具:
fail2ban
- 防火墙规则:使用
iptables
阻止可疑 IP 地址。 - 脚本逻辑
:
- 检查
fail2ban
服务状态。 - 监控
/var/log/auth.log
文件中的关键词。 - 当检测到关键词时,通过
iptables
添加规则阻止 IP 地址。 - 定期清理不再活跃的规则。
脚本说明:
- 检查并启动 fail2ban:确保 fail2ban 服务正在运行。
- 添加 iptables 规则:用于阻止特定的 IP 地址或端口。
- 日志监控:定期检查系统日志以寻找异常行为。
脚本代码:
代码语言:shell复制#!/bin/bash
# 检查 fail2ban 是否安装并启动
if ! systemctl is-active --quiet fail2ban; then
echo "Starting fail2ban service..."
sudo systemctl start fail2ban
# 如果希望开机自启
sudo systemctl enable fail2ban
fi
# 定义要监控的日志文件和关键字
LOG_FILE="/var/log/auth.log"
KEYWORDS="Failed password" "authentication failure"
# 监控日志文件中的关键字
monitor_logs() {
tail -f $LOG_FILE | while read line; do
for keyword in ${KEYWORDS[@]}; do
if [[ "$line" == *"$keyword"* ]]; then
# 获取 IP 地址
IP=$(echo $line | awk '{print $9}')
# 检查是否已经阻止了这个 IP
if ! iptables -L -n | grep -q $IP; then
# 阻止 IP 地址
iptables -A INPUT -s $IP -j DROP
echo "Blocked IP: $IP"
fi
break
fi
done
done
}
# 启动日志监控
monitor_logs &
PID=$!
# 清理工作
trap "kill $PID; exit" INT TERM EXIT
# 保持运行
while true; do
sleep 1000
done
使用说明:
- 将上述脚本保存为文件,例如
defend.sh
。 - 赋予执行权限:
chmod x defend.sh
。 - 运行脚本:
./defend.sh
。
注意事项:
- 请确保在安全的环境中测试脚本,并根据实际情况调整日志文件路径和关键字。
- 此脚本适用于 Linux 系统,并且需要 root 权限来运行
iptables
命令。 - 可能还需要安装
fail2ban
,可以通过包管理器安装,例如apt-get install fail2ban
或yum install fail2ban
。 - 根据实际需求,可能还需要配置
fail2ban
的规则文件来进一步增强防护能力。