前面三道防线,还差最后一步
还记得我们前面做了什么吗?
- 第一期:用SSH密钥替代密码,修改默认端口
- 第二期:配置fail2ban自动封禁攻击者
现在你的服务器已经比90%的人安全了。但还有一个问题:你的服务器到底开了多少个端口?这些端口都需要对外开放吗?
小张按照前两期教程配置好服务器后,用工具扫描了一下自己的服务器,发现除了SSH,还开着MySQL的3306端口、Redis的6379端口。这些端口本来只需要本地访问,现在却暴露在公网上。
如果这些服务有漏洞,或者配置不当(比如没设密码),黑客就能直接利用。
今天我们要做的,就是给服务器装上"防火墙",只开必要的门窗,其他全部锁死。
什么是防火墙?
想象你的服务器是一栋房子:
- 没有防火墙:所有门窗都开着,任何人都能从任何地方进来
- 有防火墙:你明确规定哪些门可以开、给谁开,其他全部锁死
**UFW(Uncomplicated Firewall)**就是Ubuntu/Debian系统上最简单的防火墙管理工具。名字里的"Uncomplicated"(不复杂)不是吹的,真的很简单。
为什么需要防火墙?
1. 减少攻击面
服务器上可能运行着多个服务,但不是所有服务都需要对外开放。比如MySQL通常只需要让应用服务器访问,不需要全世界都能连。
2. 防止漏洞被利用
即使某个软件有安全漏洞,如果端口没开放,黑客也无法利用。这就是"纵深防御"——多层保护,层层把关。
3. 符合安全最佳实践
安全领域有个"最小权限原则":只给必需的权限,其他一律拒绝。防火墙就是这个原则的具体实现。
安装UFW
大部分Ubuntu/Debian系统默认已经安装了UFW,但可能没有启用。我们先检查并安装:
检查是否已安装:
ufw --version
如果显示版本号,说明已安装。如果提示命令不存在,就需要安装:
Ubuntu/Debian系统:
sudo apt update
sudo apt install ufw -y
CentOS/RHEL系统:
sudo yum install epel-release -y
sudo yum install ufw -y
安装完成后,就可以开始配置了。
5步配置UFW
第一步:检查当前状态
sudo ufw status
大部分新服务器会显示:
Status: inactive
这说明防火墙还没启用。先别急着启用,我们要先配置好规则。
第二步:设置默认策略
这是最重要的一步,决定了防火墙的基本逻辑:
# 默认拒绝所有进入的连接
sudo ufw default deny incoming
# 默认允许所有出去的连接
sudo ufw default allow outgoing
什么意思?
- incoming(进站):别人连接你的服务器,默认全部拒绝
- outgoing(出站):你的服务器连接外部,默认全部允许
这样最安全:默认全关,需要什么就单独开放。
第三步:允许SSH连接
⚠️ 这一步最关键!必须在启用防火墙之前完成,否则会把自己锁在外面!
# 如果你修改后的SSH端口是23456
sudo ufw allow 23456/tcp
如果你没改过SSH端口,还是默认的22:
sudo ufw allow 22/tcp
第四步:允许其他需要的服务
根据你的服务器用途,开放相应的端口。
如果是Web服务器:
# 允许HTTP(80端口)
sudo ufw allow 80/tcp
# 允许HTTPS(443端口)
sudo ufw allow 443/tcp
如果某个服务只需要特定IP访问:
比如MySQL只允许你的应用服务器(IP: 192.168.1.100)访问:
sudo ufw allow from 192.168.1.100 to any port 3306
这样,只有这个IP能连接MySQL,其他IP全部被拦截。
第五步:启用防火墙
配置完所有规则后,启用UFW:
sudo ufw enable
会提示:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
输入 y 确认。
验证配置:
sudo ufw status verbose
输出示例:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
23456/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
3306 ALLOW 192.168.1.100
看到这样的输出,说明配置成功了!
常用管理命令
查看规则(带编号)
sudo ufw status numbered
输出:
Status: active
To Action From
-- ------ ----
[ 1] 23456/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
删除规则
# 方法1:按编号删除
sudo ufw delete 2
# 方法2:按规则删除
sudo ufw delete allow 80/tcp
封禁某个恶意IP
sudo ufw deny from 103.x.x.x
这个IP的所有连接都会被拒绝。
限制连接频率
这个功能类似简化版的fail2ban:
sudo ufw limit 23456/tcp
这会限制同一IP在30秒内最多尝试6次连接,超过就暂时封禁。
临时关闭/启用防火墙
调试问题时可能需要临时关闭:
# 关闭防火墙
sudo ufw disable
# 重新启用
sudo ufw enable
推荐配置模板
Web服务器基础配置
如果你要搭建网站,这是最常用的配置:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 23456/tcp # SSH(改成你的端口)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
提示:直接复制这段命令,把SSH端口号改成你自己的,就能用了。
常见问题
Q:我会不会把自己锁在外面?
A:只要在启用防火墙之前先允许SSH端口就不会。万一真锁了,云服务商都有VNC控制台可以救急。
Q:UFW和fail2ban会冲突吗?
A:不会冲突,建议一起使用。UFW管端口开放,fail2ban管自动封禁,两者配合效果更好。
Q:云服务商已经有安全组了,还需要配置UFW吗?
A:强烈建议都配置。两层防护,双重保险。而且如果你迁移到其他云平台,UFW配置可以直接带走。
Q:防火墙会影响服务器性能吗?
A:几十条规则几乎没有任何影响,完全不用担心。
四道防线:你的服务器固若金汤
回顾一下整个系列,现在你的服务器有了:
- 第一道防线:SSH密钥认证 - 像指纹锁,黑客猜不出来
- 第二道防线:修改默认端口 - 藏起门牌号,机器人找不到
- 第三道防线:fail2ban自动封禁 - 24小时智能保安,试几次就拉黑
- 第四道防线:UFW防火墙 - 只开必要的窗户,其他全部锁死
就像给家里装了指纹锁、藏了门牌号、雇了保安、还把不用的门窗全封死。现在黑客想进你的服务器?难度系数:地狱级!
今天就行动
UFW的配置真的很简单,5分钟就能完成:
- 安装UFW(一行命令)
- 设置默认策略(拒绝进入,允许出去)
- 允许SSH端口(别忘了这步!)
- 允许需要的服务端口
- 启用UFW
现在就去给你的服务器配置防火墙吧!只开必要的端口,其他全部关闭,让服务器更安全。
下期预告:我们将继续讲解服务器安全的其他重要措施:禁用root直接登录、使用普通用户+sudo、定期更新系统等。
你的服务器开了哪些端口?配置过程中遇到问题?欢迎在评论区留言讨论!