前面三道防线,还差最后一步

还记得我们前面做了什么吗?

  • 第一期:用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:几十条规则几乎没有任何影响,完全不用担心。

四道防线:你的服务器固若金汤

回顾一下整个系列,现在你的服务器有了:

  1. 第一道防线:SSH密钥认证 - 像指纹锁,黑客猜不出来
  2. 第二道防线:修改默认端口 - 藏起门牌号,机器人找不到
  3. 第三道防线:fail2ban自动封禁 - 24小时智能保安,试几次就拉黑
  4. 第四道防线:UFW防火墙 - 只开必要的窗户,其他全部锁死

就像给家里装了指纹锁、藏了门牌号、雇了保安、还把不用的门窗全封死。现在黑客想进你的服务器?难度系数:地狱级!

今天就行动

UFW的配置真的很简单,5分钟就能完成:

  1. 安装UFW(一行命令)
  2. 设置默认策略(拒绝进入,允许出去)
  3. 允许SSH端口(别忘了这步!)
  4. 允许需要的服务端口
  5. 启用UFW

现在就去给你的服务器配置防火墙吧!只开必要的端口,其他全部关闭,让服务器更安全。


下期预告:我们将继续讲解服务器安全的其他重要措施:禁用root直接登录、使用普通用户+sudo、定期更新系统等。

你的服务器开了哪些端口?配置过程中遇到问题?欢迎在评论区留言讨论!