SSH 登录失败自动封锁工具
1140 字
6 分钟
SSH 登录失败自动封锁工具
工具介绍
在服务器管理中,SSH 暴力破解攻击是一个常见的安全威胁。攻击者会尝试使用各种用户名和密码组合来登录服务器,这不仅会占用服务器资源,还可能导致安全漏洞。为了解决这个问题,我开发了一款 SSH 登录失败自动封锁工具,能够自动检测并封锁多次登录失败的 IP 地址。
工具功能
- 自动检测:定期检查 SSH 登录失败记录
- 智能封锁:自动封锁登录失败超过阈值的 IP 地址
- 易于配置:可调整失败次数阈值和检查频率
- 低资源占用:使用轻量级脚本,不影响服务器性能
- 无需修改防火墙:使用
/etc/hosts.deny文件进行封锁,避免复杂的防火墙配置
工具组件
block_ssh_failures.sh- 主脚本,用于检测 SSH 登录失败并封锁 IPssh-blocker.service- systemd 服务文件ssh-blocker.timer- systemd 定时器文件,设置每 10 分钟运行一次
安装步骤
1. 复制文件到目标位置
sudo cp block_ssh_failures.sh /root/sudo cp ssh-blocker.service /etc/systemd/system/sudo cp ssh-blocker.timer /etc/systemd/system/2. 设置脚本执行权限
sudo chmod +x /root/block_ssh_failures.sh3. 重新加载 systemd 配置
sudo systemctl daemon-reload4. 启动并启用定时器
sudo systemctl enable --now ssh-blocker.timer配置调整
脚本参数调整
编辑 /root/block_ssh_failures.sh 文件,可以调整以下参数:
THRESHOLD=5- 失败次数阈值,超过此值将被封锁TIME_RANGE="1 day ago"- 检查时间范围HOSTS_DENY="/etc/hosts.deny"- hosts.deny 文件路径
定时器调整
编辑 /etc/systemd/system/ssh-blocker.timer 文件,可以调整执行频率:
OnCalendar=*:0/10- 每 10 分钟执行一次
管理命令
查看定时器状态
sudo systemctl list-timers | grep ssh-blocker查看服务状态
sudo systemctl status ssh-blocker.service查看封锁的 IP
sudo grep sshd /etc/hosts.deny手动执行脚本
sudo /root/block_ssh_failures.sh工作原理
- 日志分析:脚本通过
journalctl获取 SSH 服务的登录失败记录 - IP 提取:从日志中提取失败登录的 IP 地址并统计次数
- 阈值检查:对失败次数超过阈值的 IP 进行标记
- IP 封锁:将标记的 IP 添加到
hosts.deny文件中 - 定期执行:通过 systemd 定时器每 10 分钟执行一次此操作
技术实现
核心检测逻辑
脚本的核心逻辑是通过分析系统日志来识别 SSH 登录失败的 IP 地址:
# 提取 SSH 登录失败的 IP 地址failures=$(journalctl --since "$TIME_RANGE" -u ssh --grep "Failed password" | grep -E "from [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | awk '{print $11}' | sort | uniq -c)
# 检查并封锁超过阈值的 IPwhile read -r count ip; do if [ "$count" -ge "$THRESHOLD" ]; then # 检查 IP 是否已在 hosts.deny 中 if ! grep -q "sshd:$ip" "$HOSTS_DENY"; then echo "sshd:$ip" >> "$HOSTS_DENY" echo "Blocked IP $ip with $count failed attempts" fi fidone <<< "$failures"systemd 配置
通过 systemd 定时器,我们可以定期执行脚本,确保系统持续受到保护:
# ssh-blocker.timer[Unit]Description=SSH Blocker Timer
[Timer]OnCalendar=*:0/10Persistent=true
[Install]WantedBy=timers.target注意事项
- 运行权限:脚本需要以 root 用户运行
- 系统要求:系统需要启用 TCP Wrappers(Ubuntu 默认已启用)
- 定期检查:建议定期检查
hosts.deny文件,避免误封 - 解除封锁:如需解除封锁,可编辑
/etc/hosts.deny文件删除相应条目 - 适用环境:此工具适用于 Ubuntu 24 环境,其他 Linux 发行版可能需要适当调整
安全建议
除了使用此工具外,还建议采取以下安全措施:
- 使用密钥登录:禁用密码登录,使用 SSH 密钥进行认证
- 更改默认端口:将 SSH 端口从默认的 22 更改为其他端口
- 使用防火墙:配置防火墙,只允许特定 IP 访问 SSH 端口
- 定期更新:保持系统和 SSH 服务的更新
- 监控日志:定期查看 SSH 登录日志,及时发现异常情况
总结
SSH 登录失败自动封锁工具是一款简单但有效的安全工具,能够帮助服务器管理员自动检测并封锁恶意 IP 地址,减少 SSH 暴力破解攻击的风险。通过定期执行检测脚本,我们可以及时发现并阻止可疑的登录尝试,提高服务器的安全性。
该工具使用了轻量级的实现方式,不需要复杂的配置,适合各种规模的服务器环境。同时,它也提供了灵活的配置选项,可以根据实际需求调整检测参数和执行频率。
希望这款工具能够帮助您更好地保护服务器安全,减少安全隐患。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
SSH 登录失败自动封锁工具
https://blog.cllll.link/posts/ssh-blocker-tool/