Cloudflare DDNS 子域名动态白名单:巧解 SSH 暴力破解攻击的实用方案

Cloudflare DDNS 子域名动态白名单:巧解 SSH 暴力破解攻击的实用方案

你的鸡正在被日,不信查下日志,避免成为黑产奴鸡,特别甲骨文如果小鸡参与黑产攻击也是封号的一个原因!

我似乎找到比fail2ban更彻底、更简单的解决方法,分享给大家提供个思路。

Ubuntu环境:

一、查看小鸡被凌辱记录:

最近 200 行包含失败登录的条目(交互查看)

sudo tail -n 200 /var/log/auth.log | egrep "Failed password|Invalid user|authentication failure|Connection closed by authenticating user"

搜索整个当前日志文件的失败密码尝试

sudo grep -E "Failed password|Invalid user|authentication failure" /var/log/auth.log | tail -n 200

二、上脚本:Cloudflare DDNS 子域名 动态白名单脚本

#!/bin/bash
PORT=22
DOMAINS=(
  ssh-mobile-v4.xxx.xyz
  ssh-mobile-v4.xxx.xyz
)

# 清理旧规则链
iptables -F SSH_RULES 2>/dev/null
ip6tables -F SSH_RULES 2>/dev/null
iptables -X SSH_RULES 2>/dev/null
ip6tables -X SSH_RULES 2>/dev/null

iptables -N SSH_RULES
ip6tables -N SSH_RULES

for d in "${DOMAINS[@]}"; do
  # IPv4
  for ip in $(dig +short A $d); do
    iptables -A SSH_RULES -p tcp -s $ip --dport $PORT -j ACCEPT
    echo "允许 IPv4 $ip ($d)"
  done
  # IPv6
  for ip in $(dig +short AAAA $d); do
    ip6tables -A SSH_RULES -p tcp -s $ip --dport $PORT -j ACCEPT
    echo "允许 IPv6 $ip ($d)"
  done
done

# 默认 DROP
iptables -A SSH_RULES -j DROP
ip6tables -A SSH_RULES -j DROP

# 应用到 INPUT 链
iptables -D INPUT -p tcp --dport $PORT -j SSH_RULES 2>/dev/null
ip6tables -D INPUT -p tcp --dport $PORT -j SSH_RULES 2>/dev/null
iptables -I INPUT -p tcp --dport $PORT -j SSH_RULES
ip6tables -I INPUT -p tcp --dport $PORT -j SSH_RULES

建议你跑完命令后,马上执行:

sudo iptables -L SSH_RULES -n
sudo ip6tables -L SSH_RULES -n

确认白名单规则是否已正确加载。

三、Cloudflare DDNS 子域名 动态更新脚本

适合放在电脑开机启动执行、或者内网小主机(linux)上
发不上来,自己GitHub找个更新脚本

🔐 现在你的 SSH 安全性已经大幅提升:

只有: ssh-mobile-v4.xxx.xyz、ssh-mobile-v6.xxx.xyz 解析的ip才能访问你的ssh

所有暴力破解都被直接防火墙拒绝,不会再打到 sshd;

白名单由你托管的 DDNS 子域名动态更新,换宽带 IP 也能自动放行;

配合 crontab 每 5 分钟刷新,不怕延迟太长。

THE END