今天用AI查了一下vps的运行情况,结果出现了下面的结果
确认这台 VPS 正在遭受大规模 SSH 爆破攻击,而且攻击强度很高。
检查结果
过去 7 天 SSH 日志统计:
密码失败:33,880 次
无效用户名事件:7,014 次
最大攻击源 66.154.112.102 产生了约 25,678 条相关失败事件
于是赶紧安装了Fail2ban 防止爆破 封禁IP用
下面是一键命令,其中有IP白名单,需要自己手动修改一下
我设置的规则是 24小时内ssh登录失败超过10次就永久封禁IP
可根据自己的实际情况进行修改
懒人都是像我这样的,还是建议用密钥登录,禁用用户名密码登录的方式更稳妥
sudo bash <<'SCRIPT'
set -Eeuo pipefail
# 可信IP白名单;多个IP用空格分隔
TRUSTED_IPS="填写自己的IP地址,这里是白名单"
# Fail2ban Jail名称
JAIL_NAME="sshd-password-permanent"
if [ "$(id -u)" -ne 0 ]; then
echo "错误:请使用 root 用户或 sudo 执行。" >&2
exit 1
fi
if ! command -v apt-get >/dev/null 2>&1; then
echo "错误:本脚本仅适用于使用 apt 的 Debian/Ubuntu。" >&2
exit 1
fi
if ! command -v systemctl >/dev/null 2>&1 ||
! command -v journalctl >/dev/null 2>&1; then
echo "错误:系统必须使用 systemd 和 journald。" >&2
exit 1
fi
export DEBIAN_FRONTEND=noninteractive
echo "===== 安装 Fail2ban 和 iptables ====="
apt-get update
apt-get install -y fail2ban iptables
install -d -m 0755 \
/etc/fail2ban/filter.d \
/etc/fail2ban/jail.d
echo "===== 关闭系统自带的默认 SSH Jail ====="
# 某些 Debian/Ubuntu 默认启用 sshd Jail,
# 但纯 journald 系统可能不存在 /var/log/auth.log,
# 从而导致 Fail2ban 启动失败。
cat > /etc/fail2ban/jail.d/00-disable-default-sshd.local <<'EOF'
[sshd]
enabled = false
EOF
echo "===== 创建全用户名 SSH 密码失败过滤规则 ====="
cat > /etc/fail2ban/filter.d/sshd-password-all-users.conf <<'EOF'
[Definition]
failregex = ^.*sshd(?:\[\d+\])?: Failed password for (?:invalid user )?\S+ from <HOST> port \d+ ssh\d*$
ignoreregex =
EOF
echo "===== 创建永久封禁 Jail ====="
cat > /etc/fail2ban/jail.d/sshd-password-permanent.local <<EOF
[${JAIL_NAME}]
enabled = true
filter = sshd-password-all-users
backend = systemd
journalmatch = _SYSTEMD_UNIT=ssh.service + _SYSTEMD_UNIT=sshd.service
port = ssh
protocol = tcp
# 同一IP失败10次
maxretry = 10
# 统计周期为24小时
findtime = 86400
# 永久封禁
bantime = -1
# 永不封禁的可信IP
ignoreip = 127.0.0.1/8 ::1 ${TRUSTED_IPS}
banaction = iptables-multiport
EOF
echo "===== 检查 Fail2ban 配置 ====="
fail2ban-client -t
echo "===== 设置开机启动并重启 Fail2ban ====="
systemctl enable fail2ban
systemctl restart fail2ban
sleep 2
echo "===== 验证 Fail2ban 服务 ====="
if ! systemctl is-active --quiet fail2ban; then
echo "错误:Fail2ban 启动失败,最近日志如下:" >&2
journalctl -u fail2ban -n 80 --no-pager >&2
exit 1
fi
if ! fail2ban-client status "${JAIL_NAME}" >/dev/null 2>&1; then
echo "错误:Jail ${JAIL_NAME} 没有成功启用。" >&2
fail2ban-client status >&2 || true
exit 1
fi
echo
echo "===== 部署成功 ====="
fail2ban-client status "${JAIL_NAME}"
echo
echo "===== 当前生效参数 ====="
printf '最大失败次数 maxretry = '
fail2ban-client get "${JAIL_NAME}" maxretry
printf '统计周期 findtime = '
fail2ban-client get "${JAIL_NAME}" findtime
printf '封禁时间 bantime = '
fail2ban-client get "${JAIL_NAME}" bantime
echo
echo "白名单:"
fail2ban-client get "${JAIL_NAME}" ignoreip
echo
echo "================================================"
echo "Fail2ban 部署完成"
echo "监控范围:所有用户名的 SSH 密码验证失败"
echo "处罚条件:同一IP在24小时内失败达到10次"
echo "封禁期限:永久"
echo "可信白名单:127.0.0.1/8 ::1 ${TRUSTED_IPS}"
echo "================================================"
SCRIPT
顺手做了一个攻击IP公布网站,这是我几十台vps采集上报的真实攻击源
也有可能是肉鸡,我就不好分辨了,有兴趣的可以去看看