有钱买服务器,没钱买云厂商的防护,Fail2Ban简单防护下

4 阅读3分钟

系统版本:ubuntu24,当然还可以用 Nginx geo 模块继续做Web 层面过滤,例如 https 请求

先讲理论:

对服务器的攻击有很多,这里就罗列几种常见的

攻击名称简单解释防御方案
暴力破解 (Brute Force)像猜谜一样疯狂尝试你的密码。改密钥登录、装 Fail2Ban。
端口扫描 (Port Scanning)挨个拨号看你开了哪些端口。改非常规端口、隐藏服务特征。
重放攻击 (Replay Attack)截获一段你发送过的加密包,原样发给服务器看服务器是否响应。使用 VLESS Vision 等现代协议(自带防重放)。
DDoS 攻击瞬间雇佣几万个人堵在你家门口,让你没法正常营业。这种攻击个人很难防,通常靠 Cloudflare 等 CDN 缓解。

1. 基础 SSH 安全防护

黑客攻击服务器 90% 的首选目标不是你的代理协议,而是你的 SSH(22端口)

  • 修改默认端口: 将 SSH 端口从 22 改为一个高位随机端口(如 4915265535 之间)。这能过滤失 99% 的初级脚本扫描
  • 禁用密码登录,改用密钥: 这是最关键的一步。黑客可以用字典暴力破解密码,但几乎无法破解 RSA/Ed25519 密钥
  • 安装 Fail2Ban 这是一个自动封禁工具。如果有人尝试 SSH 登录失败超过 N 次 (这里的 N 是自己定义的),Fail2Ban 会自动通过防火墙封禁他的 IP X 个小时(X都是可以自定义的)

2. 防火墙使用

  • ufw (Uncomplicated Firewall): Linux 上最简单的防火墙工具。

    • ufw default deny incoming(默认禁止所有入站)
    • ufw allow [你的SSH新端口]/tcp
    • ufw allow [你的代理端口]/tcp(如果是 Hysteria2,则是 /udp
  • 禁 Ping: 修改设置让服务器不响应 Ping 请求(ICMP),这样在很多基础扫描工具眼里,你的服务器就像“不在线”一样

  • Fail2Ban 是保护服务器免受暴力破解(Brute Force)最简单且有效的方法。它会监控日志文件(如 /var/log/auth.log),发现多次登录失败的 IP 后,通过防火墙自动将其封禁

3.定期维护

安全不是一劳永逸的,是一个动态过程:

  1. 系统更新: 经常运行 apt update && apt upgrade,修复 Linux 内核及 OpenSSL 的安全漏洞
  2. 查看日志: 偶尔用 lastb 命令看看有多少失败的登录记录,这会让你对服务器面临的威胁有直观感受
  3. 查看日志: 如果可以,请将程序跑在容器里。即便程序被攻破,黑客也很难直接拿到主系统的 root 权限

再做实操

sudo apt update
sudo apt install fail2ban -y

编辑 fail2ban 文件
sudo vim /etc/fail2ban/jail.local

规则

[DEFAULT] 
# 找到 default 模块
# 下面几个参数意思:发现 5 分钟内失败 3 次,就封禁 1 天,m 是 minute缩写,d 是 day 缩写

findtime = 5m 
maxretry = 3 
bantime = 1d

对 SSH 设置封禁不同的时长

# 在 sshd 模块下面
[sshd] 
enabled = true 
port = 22 

# 针对 SSH 失败,直接封禁 1 周 ,w 是 week 的意思
bantime = 1w 
maxretry = 3

进阶功能:递增封禁

# 开启递增封禁 
bantime.increment = true 

# 递增倍数(例如每次翻倍) 
bantime.factor = 2 

# 最大封禁上限(例如最多封 5 周,w 是 week 的意思)
bantime.maxtime = 5w

规则调整好之后,重启下

sudo systemctl restart fail2ban

查看当前封禁状态: 某个 IP 还要被封多久,可以查看日志或直接查状态:

sudo fail2ban-client status sshd