新建 Oracle VPS 的推荐设置
针对 Oracle Cloud Ubuntu VPS 的新机初始化指南:清理默认 iptables、配置 UFW 防火墙、使用 Fail2ban 自动封禁攻击 IP,并完成 SSH 端口加固。

Oracle Cloud 的 Ubuntu 实例在创建时默认使用 ubuntu 用户(非 root,支持 sudo 提权),并且强制使用 SSH 密钥登录,基础安全性已经比传统的密码登录 VPS 好很多。
但新实例默认的 iptables 规则会限制大部分入站端口,SSH 也仍然暴露在默认的 22 端口上,长期运行仍会遭受大量扫描和攻击。
本文将带你完成一套面向 Oracle VPS 的推荐初始化设置:清理默认防火墙规则、配置 UFW、利用 Fail2ban 自动封禁恶意 IP,并加固 SSH 端口。
1. 系统更新与基础工具安装
sudo apt update -y && sudo apt upgrade -y
sudo apt install -y curl wget vim
首次
apt upgrade可能需要较长时间,建议在 SSH 连接稳定的情况下执行。
2. 手动创建 SWAP 虚拟内存
Oracle 的免费实例通常只有 1G 内存,运行编译任务或数据库时容易内存不足。建议手动创建 SWAP 文件缓解压力:
# 查看当前内存与 SWAP 情况
free -m
# 创建 2G 的 SWAP 文件(可根据实际内存调整大小)
sudo fallocate -l 2G /swapfile
# 如果 fallocate 不支持,使用 dd 代替
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# 设置权限,防止普通用户读取
sudo chmod 600 /swapfile
# 格式化为 SWAP
sudo mkswap /swapfile
# 立即启用
sudo swapon /swapfile
# 写入 /etc/fstab,实现开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 验证
free -m
可选优化:降低 swappiness,让系统优先使用物理内存:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3. 清理 Oracle 默认 iptables 规则
Oracle Cloud 的 Ubuntu 镜像默认通过 netfilter-persistent 持久化了一套 iptables 规则,会拦截大部分入站连接。建议清除这些规则,之后统一交给 UFW 管理。
# 清空所有规则
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
# 卸载 netfilter-persistent,防止重启后规则再次生效
sudo apt-get purge -y netfilter-persistent
# 删除残留规则文件
sudo rm -rf /etc/iptables
# 重启生效
sudo reboot
重启后重新连接 SSH,确认一切正常再继续后续配置。
注意:Oracle Cloud 控制台还需要在 VCN 的安全列表(Security List)或 NSG 中放行对应端口,否则服务器内部放行也无法从外部访问。
4. 安装 UFW 防火墙
4.1 安装并启用 UFW
sudo apt install -y ufw
4.2 配置 UFW 规则
务必先放行 SSH 端口,再启用防火墙,避免失去连接:
# 放行 SSH(默认 22 端口)
sudo ufw allow OpenSSH
# 放行 Web 服务端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 如果后续更改了 SSH 端口,需要同时放行新端口
# sudo ufw allow 3322/tcp
# 默认拒绝入站,允许出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 启用防火墙
sudo ufw enable
sudo ufw status verbose
建议只保留必要端口。如果管理 IP 固定,可用
sudo ufw allow from <你的 IP>设置白名单,安全性更高。
5. 安装 Fail2ban
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
6. Fail2ban 监控 UFW BLOCK 日志并自动封禁
这是本文的核心功能:让 Fail2ban 监控 UFW 日志,发现被 UFW 拦截的可疑 IP 后,自动执行封禁。
6.1 创建 UFW BLOCK 过滤器
sudo vi /etc/fail2ban/filter.d/ufw-block.conf
内容如下:
[Definition]
failregex = ^.*\[UFW BLOCK\].*SRC=<HOST>.*$
ignoreregex =
<HOST>是 Fail2ban 内置变量,自动匹配 IP 地址。- 该规则会匹配
/var/log/ufw.log中所有包含[UFW BLOCK]的日志行。
6.2 创建 UFW 封禁 Action
sudo vi /etc/fail2ban/action.d/ufw-blockip.conf
内容如下:
[Definition]
actionban = ufw insert 1 deny from <ip> to any
actionunban = ufw delete deny from <ip> to any
如果需要主动拒绝并返回响应,可以将
deny替换为reject。
6.3 配置 jail.local
sudo vi /etc/fail2ban/jail.local
参考配置:
[DEFAULT]
# 白名单:本机、内网以及你自己的管理 IP
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 123.123.123.123
allowipv6 = true
backend = auto
# 全局默认参数
bantime = 3600
findtime = 600
maxretry = 5
# SSH 暴力破解防护
[sshd]
enabled = true
filter = sshd
port = ssh
logpath = %(sshd_log)s
bantime = 86400
findtime = 86400
maxretry = 3
action = ufw-blockip
# 监控 UFW BLOCK 日志,自动封禁攻击 IP
[ufw-block]
enabled = true
filter = ufw-block
logpath = /var/log/ufw.log
maxretry = 5
findtime = 600
bantime = -1
action = ufw-blockip
# 可选:Nginx 恶意爬虫防护(需先安装 Nginx)
# [nginx-botsearch]
# enabled = true
# port = http,https
# logpath = /var/log/nginx/access.log
# maxretry = 100
# findtime = 600
# bantime = 2592000
bantime = -1表示永久封禁。担心误封可改为86400(24 小时)。ignoreip中务必加入自己的管理 IP,避免误封。backend = auto让 Fail2ban 自动选择最优日志监听方式。
6.4 重启并验证
# 检查配置语法
sudo fail2ban-client -t
# 重启 Fail2ban
sudo systemctl restart fail2ban
# 查看所有 jail
sudo fail2ban-client status
预期输出:
Status
|- Number of jail: 2
`- Jail list: sshd, ufw-block
查看具体封禁情况:
sudo fail2ban-client status ufw-block
输出示例:
Status for the jail: ufw-block
|- Filter
| |- Currently failed: 1
| |- Total failed: 12
| `- File list: /var/log/ufw.log
`- Actions
|- Currently banned: 2
|- Total banned: 5
`- Banned IP list: 123.123.123.123 45.45.45.45
6.5 手动解封 IP
sudo fail2ban-client set ufw-block unbanip 123.123.123.123
也可以直接查看和管理 UFW 规则:
sudo ufw status numbered
sudo ufw delete <编号>
7. 修改 SSH 端口(推荐)
Oracle 默认使用密钥登录,安全性已经不错。但 22 端口仍然每天被大量扫描,修改默认端口可以有效减少这类噪音。
7.1 备份并修改配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sudo vi /etc/ssh/sshd_config
取消注释或添加以下内容:
Port 3322
建议先保留默认的
Port 22,新端口测试成功后再删除 22,防止改错导致无法连接。
7.2 重启 SSH 服务
sudo systemctl restart sshd
验证端口监听:
ss -ntl | grep 3322
7.3 更新 UFW 规则
sudo ufw allow 3322/tcp
sudo ufw delete allow OpenSSH # 确认新端口可用后再执行
同时到 Oracle Cloud 控制台,在 VCN 安全列表 / NSG 中将新 SSH 端口加入入站规则。
8. 总结
完成以上配置后,你的 Oracle VPS 将具备:
- UFW 默认拒绝入站,只开放必要端口,攻击面大幅缩小。
- Fail2ban 自动监控 UFW BLOCK 日志,达到阈值后自动永久封禁攻击 IP。
- SSH 暴力破解防护,3 次失败即封禁 24 小时。
- SSH 非默认端口,显著减少扫描攻击噪音。
- SWAP 虚拟内存,缓解小内存实例的资源压力。
Hook this up to your favourite commenting platform — Giscus, Disqus, or your own.
Continue reading

让你的 VPS 登录不再单调:打造炫酷实用的 MOTD
通过自定义 Shell 脚本制作 MOTD 欢迎界面,在每次 SSH 登录时展示系统状态、网络信息和维护提醒,兼顾美观与实用性。

VPS 自建加密 DNS:AdGuard Home
用 VPS 部署 AdGuard Home,并通过 DNS-over-TLS 接入 Android 私人 DNS,打造属于自己的加密 DNS 服务

Serv00 新手到进阶:常用命令、保活与部署应用全攻略
汇总 Serv00 的常用命令、PHP 保活方案,以及搭建兰空图床、哪吒探针、New API 和 HY2 节点的完整步骤,适合需要在 Serv00 上部署项目的用户