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 分钟刷新,不怕延迟太长。
版权声明:
作者:pddpdd
链接:https://pddpdd.cn/1604.html
文章版权归作者所有,未经允许请勿转载。
THE END