UFW — 端口级防火墙

UFW (Uncomplicated Firewall) 是 iptables 的友好包装。Linux 自带的 iptables 太复杂,UFW 把常用操作简化到一行命令。

# 安装
apt install ufw -y

# 默认策略:拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 开放需要的端口
ufw allow 22222/tcp     # SSH(你改过的端口)
ufw allow 80/tcp        # HTTP
ufw allow 443/tcp       # HTTPS

# 开启
ufw enable

# 查看状态
ufw status verbose

常用 UFW 规则

# 只允许特定 IP 访问 SSH
ufw allow from 1.2.3.4 to any port 22222 proto tcp

# 开放端口范围
ufw allow 8000:8100/tcp

# 删除规则
ufw delete allow 80/tcp

# 查看带编号的规则列表(方便删除)
ufw status numbered

Fail2ban — 自动封禁暴力破解 IP

Fail2ban 监控日志文件,如果某个 IP 在一定时间内失败尝试超过阈值,自动用防火墙封禁该 IP 一段时间。

# 安装
apt install fail2ban -y

# 创建本地配置(不要直接改 jail.conf)
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 编辑配置
nano /etc/fail2ban/jail.local

# 关键配置:
[DEFAULT]
bantime = 3600          # 封禁 1 小时
findtime = 600          # 10 分钟内的失败算连续
maxretry = 5            # 失败 5 次就封

[sshd]
enabled = true
port = 22222            # 你的 SSH 端口

# 启动
systemctl enable fail2ban --now

# 查看封禁状态
fail2ban-client status sshd

# 手动解封某个 IP
fail2ban-client set sshd unbanip 1.2.3.4

效果验证

# 查看被封禁的 IP 列表
fail2ban-client status sshd

一台公开的 VPS,配置 Fail2ban 后通常每天会自动封禁几十到上百个扫描 IP。没有 Fail2ban 的话,这些 IP 会持续尝试暴力破解你的密码。