请编写Shell代码实现以下逻辑 ?

编写脚本/root/bin/checkip.sh,每5分钟检查一次,如果发现通过ssh登录失败次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止防问

为了实现这个需求,我们可以通过分析 /var/log/auth.log(这个日志文件路径可能因为系统的不同而有所变化)来检测 SSH 登录失败的尝试,并使用 Tcp Wrapper 来禁止对应的 IP 地址。以下是一个简单的实现脚本 /root/bin/checkip.sh

#!/bin/bash

# 日志文件路径
LOG_FILE="/var/log/auth.log"
# 黑名单文件路径,确保你的sshd服务配置了使用这个文件
BLACKLIST_FILE="/etc/hosts.deny"

# 检查登录失败的IP地址并计数
awk '/sshd.*Failed password/ {print (NF-3)}'LOG_FILE | sort | uniq -c | while read count ip; do
    if [ count -gt 10 ]; then
        # 检查IP是否已经在黑名单中
        if ! grep -qip BLACKLIST_FILE; then
            # 将IP添加到黑名单中
            echo "sshd:ip" >> BLACKLIST_FILE
            echo "ip has been added to the blacklist."
        fi
    fi
done
Bash

脚本说明:

  1. 使用 awkauth.log 中提取登录失败的尝试,并获取失败来源的 IP 地址。
  2. 使用 sort | uniq -c 来计算每个 IP 地址登录失败的次数。
  3. 如果某个 IP 地址的失败次数超过 10 次,则检查该 IP 地址是否已经在 /etc/hosts.deny 文件中。
  4. 如果 IP 地址不在黑名单中,则将其添加到 /etc/hosts.deny 文件中,以禁止该 IP 地址访问 SSH 服务。

自动执行脚本

为了每 5 分钟执行一次这个脚本,你可以将其添加到 cron 任务中。编辑当前用户的 crontab 文件:

crontab -e
Bash

然后添加以下行到 crontab 文件中:

*/5 * * * * /root/bin/checkip.sh
Bash

这会确保 /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 地址的机制。在实际使用中,可能需要定期审核和清理黑名单。

发表评论

后才能评论