请编写Shell代码实现以下逻辑 ?
编写脚本/root/bin/checkip.sh,每5分钟检查一次,如果发现通过ssh登录失败次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止防问
为了实现这个需求,我们可以通过分析 /var/log/auth.log
(这个日志文件路径可能因为系统的不同而有所变化)来检测 SSH 登录失败的尝试,并使用 Tcp Wrapper
来禁止对应的 IP 地址。以下是一个简单的实现脚本 /root/bin/checkip.sh
:
脚本说明:
- 使用
awk
从auth.log
中提取登录失败的尝试,并获取失败来源的 IP 地址。 - 使用
sort | uniq -c
来计算每个 IP 地址登录失败的次数。 - 如果某个 IP 地址的失败次数超过 10 次,则检查该 IP 地址是否已经在
/etc/hosts.deny
文件中。 - 如果 IP 地址不在黑名单中,则将其添加到
/etc/hosts.deny
文件中,以禁止该 IP 地址访问 SSH 服务。
自动执行脚本
为了每 5 分钟执行一次这个脚本,你可以将其添加到 cron
任务中。编辑当前用户的 crontab
文件:
然后添加以下行到 crontab
文件中:
这会确保 /root/bin/checkip.sh
脚本每 5 分钟运行一次。
注意事项
- 确保脚本有执行权限:
chmod +x /root/bin/checkip.sh
。 - 根据你的 Linux 发行版,
auth.log
的路径可能有所不同。例如,CentOS/RedHat 系统可能需要检查/var/log/secure
。 - 使用 Tcp Wrapper 来限制访问前,请确保你的 SSH 服务是通过
tcp_wrappers
来管理访问控制的。 - 修改系统配置文件前,建议备份相关文件。
- 这个脚本简单地将超过失败次数的 IP 地址添加到黑名单中,没有提供自动从黑名单中移除 IP 地址的机制。在实际使用中,可能需要定期审核和清理黑名单。