SafeVPS:一条脚本完成 Ubuntu / Debian VPS 基础安全配置
刚开了一台 VPS,不想安装面板,也不想手动整理一堆 UFW 和 Fail2Ban 命令?
我把自己实际用于多台服务器的基础安全配置整理成了一个开源 Bash 脚本:SafeVPS。
项目地址:https://github.com/sanrokamlan-prog/safevps
它能做什么
- 自动检测当前 SSH 连接端口和
sshd配置端口 - 设置 UFW 默认拒绝入站、允许出站
- 使用 UFW
limit保护 SSH 连接 - 提供最小、预设、自定义三种端口模式
- 支持自定义 TCP / UDP 单端口和端口范围
- 可选阻止服务器直接连接邮件端口
25/465/587 - 配置 Fail2Ban SSH 防护
- 提供宽松、标准、严格、自定义四种封禁策略
- 默认严格策略:一小时内失败 3 次,永久封禁来源 IP
- 临时封禁保留测试 IP,确认 nftables、iptables、ipset 或 UFW 中存在真实规则
- Fail2Ban 配置检查失败时自动恢复原文件
- 检测 Docker,并提示容器端口可能绕过 UFW
- 默认中文,支持完整英文交互
- 内置 Bash 测试、ShellCheck 和 GitHub Actions CI
一键运行
wget -O setup_server_security.sh https://raw.githubusercontent.com/sanrokamlan-prog/safevps/main/setup_server_security.sh && sudo bash setup_server_security.sh
默认中文交互。使用英文:
sudo bash setup_server_security.sh --lang en
脚本会先让你选择端口模式和 Fail2Ban 策略,再显示完整配置摘要。只有输入大写 YES 后才会修改系统。
端口模式
| 模式 | 说明 |
|---|---|
minimal |
只开放检测到的 SSH 端口,推荐用于新服务器 |
preset |
开放 SSH、TCP 80/443、UDP 10000:10010 |
custom |
完全自定义 TCP / UDP 端口和范围 |
自定义示例:
sudo PORT_MODE=custom \
TCP_PORTS="80 443 8080 9000:9010" \
UDP_PORTS="51820" \
bash setup_server_security.sh
Fail2Ban 策略
| 策略 | 触发条件 | 封禁时间 |
|---|---|---|
宽松 relaxed |
10 分钟内失败 8 次 | 1 小时 |
标准 standard |
30 分钟内失败 5 次 | 24 小时 |
严格 strict |
1 小时内失败 3 次 | 永久 |
自定义 custom |
用户设置 | 用户设置 |
无人值守严格模式:
sudo ASSUME_YES=1 \
PORT_MODE=minimal \
FAIL2BAN_PROFILE=strict \
bash setup_server_security.sh
适用范围
- Ubuntu / Debian
- 使用
apt和systemd - 需要 UFW 主机防火墙和 Fail2Ban SSH 防护
- 希望使用单文件脚本,不安装额外管理面板
使用前说明
防火墙修改始终存在远程失联风险。SafeVPS 会保护当前 SSH 端口和 sshd 配置端口,但执行完成后仍建议保留原会话,并打开第二个终端确认能够重新登录。
Docker 发布的容器端口可能绕过 UFW,云厂商安全组也属于独立防火墙层。SafeVPS 是主机基础安全配置,不替代云防火墙、应用权限控制、系统更新和备份。
开源许可
SafeVPS 使用 MIT License,可以自由使用、修改和分发。
欢迎提交 Issue、改进建议和不同 Debian / Ubuntu 版本的实际运行反馈。
@juvenile1024 #5 脚本方便啊机器太多这是我上次遭了哪吒写的
😂所有技术贴 一律收藏
😂所有技术贴 一律顶帖。
好
😂所有技术贴 一律顶帖。
bd,虽然一般机器到手顺手就把sshd ufw f2b 这些配了
@sanro #6 确实,bd
支持技术贴
喂鸡腿
小星星点上