系统版本:ubuntu24,当然还可以用 Nginx geo 模块继续做Web 层面过滤,例如 https 请求
先讲理论:
对服务器的攻击有很多,这里就罗列几种常见的
| 攻击名称 | 简单解释 | 防御方案 |
|---|---|---|
| 暴力破解 (Brute Force) | 像猜谜一样疯狂尝试你的密码。 | 改密钥登录、装 Fail2Ban。 |
| 端口扫描 (Port Scanning) | 挨个拨号看你开了哪些端口。 | 改非常规端口、隐藏服务特征。 |
| 重放攻击 (Replay Attack) | 截获一段你发送过的加密包,原样发给服务器看服务器是否响应。 | 使用 VLESS Vision 等现代协议(自带防重放)。 |
| DDoS 攻击 | 瞬间雇佣几万个人堵在你家门口,让你没法正常营业。 | 这种攻击个人很难防,通常靠 Cloudflare 等 CDN 缓解。 |
1. 基础 SSH 安全防护
黑客攻击服务器 90% 的首选目标不是你的代理协议,而是你的 SSH(22端口) 。
- 修改默认端口: 将 SSH 端口从
22改为一个高位随机端口(如49152到65535之间)。这能过滤失 99% 的初级脚本扫描 - 禁用密码登录,改用密钥: 这是最关键的一步。黑客可以用字典暴力破解密码,但几乎无法破解 RSA/Ed25519 密钥
- 安装
Fail2Ban: 这是一个自动封禁工具。如果有人尝试 SSH 登录失败超过 N 次 (这里的 N 是自己定义的),Fail2Ban 会自动通过防火墙封禁他的 IP X 个小时(X都是可以自定义的)
2. 防火墙使用
-
ufw (Uncomplicated Firewall): Linux 上最简单的防火墙工具。
ufw default deny incoming(默认禁止所有入站)ufw allow [你的SSH新端口]/tcpufw allow [你的代理端口]/tcp(如果是 Hysteria2,则是/udp)
-
禁 Ping: 修改设置让服务器不响应 Ping 请求(ICMP),这样在很多基础扫描工具眼里,你的服务器就像“不在线”一样
-
Fail2Ban 是保护服务器免受暴力破解(Brute Force)最简单且有效的方法。它会监控日志文件(如
/var/log/auth.log),发现多次登录失败的 IP 后,通过防火墙自动将其封禁
3.定期维护
安全不是一劳永逸的,是一个动态过程:
- 系统更新: 经常运行
apt update && apt upgrade,修复 Linux 内核及 OpenSSL 的安全漏洞 - 查看日志: 偶尔用
lastb命令看看有多少失败的登录记录,这会让你对服务器面临的威胁有直观感受 - 查看日志: 如果可以,请将程序跑在容器里。即便程序被攻破,黑客也很难直接拿到主系统的 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