UFW防火墙规则异常排查:配置特定IP允许80/443端口后仍放行任意IP访问
UFW防火墙规则异常排查:配置特定IP允许80/443端口后仍放行任意IP访问
兄弟,我看了你贴的UFW规则,马上就发现几个可能导致问题的点,咱们一步步来排查和解决:
问题根源分析
首先,UFW的规则是从上到下顺序匹配,只要命中一条规则就会停止后续判断,但更关键的是你的默认入站策略——如果默认策略是ALLOW,那所有没被明确拒绝的流量都会被放行,这很可能就是你80/443端口还能被任意IP访问的核心原因。另外你手动加的80/tcp和443/tcp拒绝规则其实有点多余,甚至可能因为协议匹配的问题造成混乱。
修复步骤(最稳妥的方式:重置后重新配置)
我建议你先清空现有规则,重新按规范配置,避免旧规则的干扰:
重置UFW清除所有规则
先备份一下现有规则(可选),然后执行重置:ufw reset这个命令会清空所有规则,恢复到初始状态。
设置安全的默认策略
把入站默认策略设为拒绝(所有未被允许的流量都进不来),出站默认设为允许(服务器正常对外请求不受影响):ufw default incoming deny ufw default outgoing allow添加需要允许的规则
按需求添加允许特定IP访问的规则,顺序不影响(因为默认是拒绝,只有明确允许的才放行):- 允许指定IP访问SSH(22端口):
ufw allow from 37.*.*.* to any port 22 ufw allow from 192.46.*.* to any port 22 - 允许192.46.*.*段访问80和443端口:
ufw allow from 192.46.*.* to any port 80 ufw allow from 192.46.*.* to any port 443
- 允许指定IP访问SSH(22端口):
启用UFW并验证规则
启用防火墙:ufw enable然后查看规则列表:
ufw status numbered这时你应该能看到只有你添加的几条允许规则,没有多余的拒绝规则,此时除了你指定的IP,其他所有IP访问80、443、22之外的端口都会被拒绝,80和443也只有192.46.*.*能访问。
为什么原来的规则不生效?
回头看你原来的规则,主要问题可能是:
- 默认入站策略是
ALLOW,导致即使你加了拒绝80/tcp的规则,那些没被规则覆盖的流量(比如协议不匹配的,或者规则顺序问题)还是会被默认放行; - 你同时添加了无协议的
80允许规则和80/tcp的拒绝规则,虽然逻辑上没问题,但容易造成混淆,不如直接用默认拒绝策略来简化配置。
备注:内容来源于stack exchange,提问作者Rick Roy




