SSH 防爆破:动态拉黑恶意IP

文摘   2025-01-20 09:41   安徽  

前言

SSH(Secure Shell)是用于安全远程登录和管理服务器的协议,但其广泛使用也使其成为攻击者暴力破解的目标。SSH爆破攻击是指攻击者通过不断尝试用户名和密码组合,试图破解服务器的登录凭证。这种攻击不仅会消耗服务器资源,还可能导致系统被入侵。因此,采取有效的措施防止SSH爆破攻击至关重要。

实现方式

在Linux系统中,/etc/hosts.allow/etc/hosts.deny文件用于控制对服务的访问权限。这两个文件的规则基于TCP Wrapper机制,允许系统管理员定义哪些IP地址或主机可以访问特定服务(如SSH)。

  • /etc/hosts.allow:定义允许访问服务的IP地址或主机。

  • /etc/hosts.deny:定义禁止访问服务的IP地址或主机。

当两个文件同时存在时,/etc/hosts.allow的规则优先于/etc/hosts.deny的规则。如果某个IP地址在/etc/hosts.allow中被允许访问,那么即使它在/etc/hosts.deny中被拒绝,它仍然可以访问服务。

  • 如果 /etc/hosts.deny 文件为空,所有IP地址都可以访问SSH。

  • 如果 /etc/hosts.deny 文件包含拒绝规则(如 sshd: ALL),则所有IP地址默认被拒绝,除非它们在 /etc/hosts.allow 中被明确允许。

监控并动态更新黑名单

为了动态检测并阻止恶意IP地址,可以编写一个简单的Shell脚本,监控SSH登录失败的日志,并将多次尝试失败的IP地址自动加入 /etc/hosts.deny 文件。

#!/bin/bash

# 配置参数
LOG_FILE="/var/log/auth.log" # Debian/Ubuntu的SSH日志文件路径
MAX_ATTEMPTS=5 # 允许的最大失败尝试次数
TEMP_FILE="/tmp/ssh_blacklist.tmp" # 临时文件存储IP尝试次数
LAST_POS_FILE="/tmp/ssh_last_pos.tmp" # 记录上次处理的日志位置

# 获取上次处理的日志位置
if [ -f "$LAST_POS_FILE" ]; then
LAST_POS=$(cat "$LAST_POS_FILE")
else
LAST_POS=0
fi

# 获取当前日志文件大小
CURRENT_POS=$(stat -c %s "$LOG_FILE")

# 如果日志文件没有更新,直接退出
if [ "$CURRENT_POS" -le "$LAST_POS" ]; then
exit 0
fi

# 从上次位置开始解析日志
tail -c +$((LAST_POS + 1)) "$LOG_FILE" | while read line; do
if echo "$line" | grep -q "Failed password"; then
IP=$(echo "$line" | awk '{print $11}')
if [ -n "$IP" ]; then
ATTEMPTS=$(grep -c "$IP" "$TEMP_FILE")
if [ "$ATTEMPTS" -ge "$MAX_ATTEMPTS" ]; then
# 检查IP是否已在黑名单中
if ! grep -q "$IP" /etc/hosts.deny; then
echo "sshd:$IP" >> /etc/hosts.deny
echo "IP $IP 已加入黑名单,禁止登录。"
fi
else
echo "$IP" >> "$TEMP_FILE"
fi
fi
fi
done

# 更新日志位置
echo "$CURRENT_POS" > "$LAST_POS_FILE"

将上述脚本保存为 ssh_blacklist.sh并赋予执行权限:

chmod +x ssh_blacklist.sh

手动运行脚本或通过定时任务定期运行:

# 手动执行
./ssh_blacklist.sh
# 设置定时任务执行
crontab -e

添加以下内容:

# 每 5 分钟执行一次检测
*/5 * * * * /path/to/ssh_blacklist.sh

通过合理配置 /etc/hosts.allow/etc/hosts.deny 文件,结合简单的Shell脚本监控SSH登录失败日志,您可以实现一个基本的SSH黑名单机制,有效拦截异常IP地址,防止暴力破解攻击。这种方法简单易行,适合大多数Linux系统,能够显著提高SSH服务的安全性。

欢迎大家关注我的公众号,将会为大家推荐更优质的内容!

青檬小栈
科长技术小栈,分享各种技术文章和教程集合。欢迎大家的关注!
 最新文章