Linux 防火墙实战:UFW 从入门到精通,一键配置企业级安全策略
引言:服务器被黑 3 次后,我学会了防火墙
上周,朋友老张找我说:"我的服务器又被黑了,这已经是第 3 次了。"
我问他:"你有没有配置防火墙?"
他说:"防火墙?那不是大厂才用的吗?我这种小服务器用不上。"
这是一个巨大的误区。
我帮他查了一下服务器日志:
• SSH 暴力破解:每天 50000+ 次
• 端口扫描:每天 1000+ 次
• SQL 注入尝试:每天 50+ 次
• 恶意 IP:来自俄罗斯、越南、巴西
他的服务器就像裸奔,完全暴露在互联网上。
后来,我帮他配置了 UFW 防火墙,并配合 fail2ban 自动封禁。
结果:
• 恶意访问减少 99%
• SSH 暴力破解减少 99.9%
• 服务器负载降低 30%
• 睡觉安心了
今天这篇文章,就是教你如何用 UFW 防火墙保护你的服务器,从入门到精通,一键配置企业级安全策略。
一、什么是防火墙?为什么你需要它?
1.1 防火墙是什么?
防火墙:网络安全的第一道防线,控制进出服务器的流量。
比喻:
• 服务器 = 你的房子
• 防火墙 = 大门和门锁
• 端口 = 窗户(开放端口 = 开窗户)
• 规则 = 访客名单(允许谁进入)
1.2 为什么需要防火墙?
没有防火墙的风险:
• 端口暴露:所有端口对外开放,黑客随意扫描
• 暴力破解:SSH、FTP、数据库被疯狂破解
• DDoS 攻击:大量流量打垮服务器
• 数据泄露:敏感端口被访问
有防火墙的好处:
• ✅ 只开放必要的端口(如 80、443、22)
• ✅ 限制访问来源(IP 白名单)
• ✅ 自动封禁恶意 IP
• ✅ 记录访问日志(审计)
• ✅ 降低被攻击风险
二、UFW 是什么?为什么选择它?
2.1 UFW 介绍
UFW(Uncomplicated Firewall):简单易用的防火墙配置工具
特点:
• ✅ 简单:命令直观,5 分钟上手
• ✅ 强大:基于 iptables,功能完整
• ✅ 默认安全:拒绝所有入站,允许所有出站
• ✅ Ubuntu 默认:Ubuntu/Debian 系统自带
为什么选择 UFW?
| 工具 | 复杂度 | 适用场景 |
|------|--------|----------|
| UFW | 低 | 90% 的情况 |
| iptables | 高 | 复杂规则、高性能 |
| firewalld | 中 | CentOS/RHEL |
| nftables | 高 | 最新、最强大 |
结论:对于 90% 的用户,UFW 是最佳选择。
三、安装和基本配置
3.1 安装 UFW
Ubuntu/Debian:
sudo apt update sudo apt install ufw -y检查状态:
输出:
3.2 基本配置
设置默认策略:
# 拒绝所有入站流量 sudo ufw default deny incoming # 允许所有出站流量 sudo ufw default allow outgoing # 拒绝转发流量 sudo ufw default deny routed启用 UFW:
输出:
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup查看状态:
四、常用服务配置:SSH、HTTP、HTTPS
4.1 允许 SSH
开放 SSH 端口(22):
或者指定端口:
限制 SSH 访问(只允许特定 IP):
# 只允许公司 IP sudo ufw allow from 192.168.1.100 to any port 22 # 只允许特定网段 sudo ufw allow from 192.168.1.0/24 to any port 224.2 允许 HTTP/HTTPS
开放 Web 服务:
sudo ufw allow 'Nginx Full'或者单独开放:
sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS4.3 查看当前规则
输出:
Status: active To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN 192.168.1.0/24 [ 2] 80/tcp ALLOW IN Anywhere [ 3] 443/tcp ALLOW IN Anywhere
五、高级配置:IP 白名单、黑名单、限流
5.1 IP 白名单
只允许特定 IP 访问:
# 允许公司 IP sudo ufw allow from 1.2.3.4 # 允许多个 IP sudo ufw allow from 5.6.7.8 sudo ufw allow from 9.10.11.12允许 IP 段:
sudo ufw allow from 192.168.0.0/165.2 IP 黑名单
拒绝特定 IP:
sudo ufw deny from 1.2.3.4拒绝 IP 段:
sudo ufw deny from 5.6.7.0/245.3 删除规则
查看规则编号:
删除规则(假设编号是 3):
5.4 端口转发
转发端口(高级):
编辑 /etc/ufw/before.rules:
sudo vim /etc/ufw/before.rules添加:
*nat :PREROUTING ACCEPT [0:0] -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 COMMIT重启 UFW:
六、集成 fail2ban:自动封禁恶意 IP
6.1 fail2ban 是什么?
fail2ban:监控日志,自动封禁恶意 IP
功能:
• 监控 SSH、Nginx、Apache 日志
• 检测暴力破解、恶意扫描
• 自动封禁 IP(使用 iptables/ufw)
• 定时解封
6.2 安装 fail2ban
sudo apt install fail2ban -y6.3 配置 SSH 保护
创建本地配置:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo vim /etc/fail2ban/jail.local添加:
[DEFAULT] bantime = 3600 # 封禁 1 小时 findtime = 600 # 10 分钟内 maxretry = 5 # 失败 5 次 [sshd] enabled = true port = ssh logpath = /var/log/auth.log maxretry = 36.4 启动 fail2ban
sudo systemctl enable fail2ban sudo systemctl start fail2ban查看状态:
sudo fail2ban-client status sshd输出:
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 23 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 5 `- Banned IP list: 192.168.1.1006.5 手动解封 IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
七、实战案例:保护 Web 服务器
7.1 场景
你有一台 Web 服务器:
• 公网 IP:1.2.3.4
• 服务:Nginx (80/443)
• SSH:端口 22
• 数据库:MySQL(只允许本地访问)
7.2 完整配置脚本
创建脚本setup_firewall.sh:
#!/bin/bash echo "配置 UFW 防火墙..." # 设置默认策略 sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw default deny routed # 允许 SSH(限制 IP) sudo ufw allow from 192.168.1.0/24 to any port 22 # 允许 HTTP/HTTPS sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 拒绝恶意 IP sudo ufw deny from 5.6.7.8 # 启用 UFW sudo ufw enable echo "UFW 配置完成!"执行:
chmod +x setup_firewall.sh ./setup_firewall.sh7.3 验证配置
查看状态:
测试 SSH(从其他 IP):
测试 Web:
curl http://1.2.3.4 curl https://1.2.3.4
八、高级技巧:限流、日志、监控
8.1 限制连接数
UFW 不直接支持,使用 iptables:
sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j DROP保存规则:
sudo apt install iptables-persistent sudo netfilter-persistent save8.2 配置日志
启用日志:
查看日志:
sudo tail -f /var/log/ufw.log8.3 实时监控
安装 iftop(网络监控):
sudo apt install iftop -y运行:
九、企业级配置:多层防护
9.1 第一层:云服务商防火墙
阿里云/腾讯云安全组:
• 只允许必要端口
• 限制访问来源
• 配置 DDoS 防护
9.2 第二层:UFW 防火墙
服务器级别:
• 限制端口访问
• IP 白名单/黑名单
• 应用层规则
9.3 第三层:应用层防护
Nginx/Apache 配置:
• 限制请求频率
• 屏蔽恶意 User-Agent
• 防止 SQL 注入
9.4 第四层:fail2ban
自动封禁:
• 暴力破解检测
• 自动封禁 IP
• 定时解封
十、常见问题和解决方案
10.1 被锁在服务器外
问题:配置防火墙后,自己无法登录
解决:
1. 通过云服务商控制台:使用 VNC/Console 登录
2. 禁用 UFW:
1. 重置规则:
10.2 端口仍然无法访问
检查清单:
1. UFW 规则:
1. 服务是否运行:
sudo systemctl status nginx1. 云服务商安全组:检查端口是否开放
1. 本地防火墙:检查本地网络
10.3 规则不生效
重新加载:
重启 UFW:
sudo systemctl restart ufw
十一、安全最佳实践
11.1 最小权限原则
只开放必要的端口:
# ❌ 不推荐:开放所有端口 sudo ufw allow from any # ✅ 推荐:只开放 80/443 sudo ufw allow 80/tcp sudo ufw allow 443/tcp11.2 定期审查规则
每周检查:
删除过时规则:
11.3 监控日志
定期查看:
sudo tail -100 /var/log/ufw.log分析恶意 IP:
sudo grep "UFW BLOCK" /var/log/ufw.log | awk '{print $NF}' | sort | uniq -c | sort -nr11.4 备份配置
备份当前规则:
sudo ufw status > ~/ufw-backup-$(date +%Y%m%d).txt恢复规则:
sudo ufw restore < ~/ufw-backup-20260401.txt
十二、性能测试:防火墙会影响性能吗?
12.1 性能影响
UFW 的性能开销:
• CPU 占用:< 1%
• 内存占用:< 10MB
• 网络延迟:< 1ms
结论:对性能的影响微乎其微。
12.2 压力测试
使用 iperf 测试:
# 服务器端 iperf3 -s # 客户端 iperf3 -c server_ip -t 60对比(有防火墙 vs 无防火墙):
• 吞吐量:几乎相同
• 延迟:增加 < 1ms
• CPU:增加 < 1%
十三、总结:防火墙是安全的第一步
配置防火墙的价值:
• ✅ 减少 99% 的恶意访问
• ✅ 防止暴力破解
• ✅ 降低被攻击风险
• ✅ 满足合规要求
记住:
防火墙不是万能的,但没有防火墙是万万不能的。
最安全的配置 = 防火墙 + fail2ban + 定期更新 + 安全意识
最重要的是:开始行动。
【下期预告】
下一篇文章,我会详细拆解"Docker 容器化实战:一键部署 10 个服务,省下 3 台服务器钱",教你如何:
• 编写 Dockerfile
• 配置 Docker Compose
• 部署常见服务(MySQL、Redis、Nginx)
• 数据持久化
• 网络配置
如果觉得这篇文章有帮助,记得点赞、收藏、转发~
【互动话题】
你的服务器配置防火墙了吗?在评论区分享你的经验或问题,我会逐一回复~