🛡️ Linux 防火墙不是“装好就安全”的开关,而是把服务器暴露面控制在可预期范围内的基础配置。无论你是维护个人 VPS、开发测试机,还是企业内网主机,先理解“默认拒绝、按需放行、持续检查”这三件事,就能避开大多数入门坑。
一、先弄清 Linux 防火墙在管什么
Linux 防火墙本质上是在内核网络过滤能力之上,通过规则判断流量是放行、拒绝还是丢弃。Ubuntu 文档提到,Linux 内核包含 netfilter 子系统,现代 Linux 防火墙方案通常都基于它进行包过滤;iptables、ufw、firewalld、nftables 更多是不同层次的管理工具或前端 Ubuntu Server 文档。
新手常见误区是把“开放端口”等同于“服务可用”。实际上还要同时满足三个条件:服务进程正在监听、系统防火墙允许访问、云厂商安全组或上游网络也放行。排查时可以按顺序看:服务是否启动、端口是否监听、防火墙是否允许、外部网络是否可达。
二、选择适合自己的工具
1. Ubuntu/Debian 用户:优先从 UFW 入门
UFW 的全称是 Uncomplicated Firewall,Ubuntu 官方说明它是默认防火墙配置工具,目标是简化 iptables 配置,并提供更友好的主机防火墙管理方式 Ubuntu UFW 文档。入门建议:先放行 SSH,再启用防火墙,避免远程服务器把自己锁在门外。
- 查看状态:sudo ufw status verbose
- 默认拒绝入站:sudo ufw default deny incoming
- 默认允许出站:sudo ufw default allow outgoing
- 放行 SSH:sudo ufw allow ssh
- 放行 Web:sudo ufw allow 80/tcp;sudo ufw allow 443/tcp
- 启用防火墙:sudo ufw enable
2. RHEL/Fedora/CentOS 系:用 firewalld 更自然
firewalld 的核心概念是 zone,也就是把不同网络环境划分为不同信任级别。官方文档说明,firewalld 支持动态管理防火墙,并通过 zone 为网络连接、接口或来源地址分配信任等级,同时区分运行时配置与永久配置 firewalld 官方文档。这非常适合笔记本、云服务器、多网卡主机和需要分区管理的场景。
- 查看状态:sudo firewall-cmd --state
- 查看默认区域:sudo firewall-cmd --get-default-zone
- 查看当前规则:sudo firewall-cmd --list-all
- 永久放行 HTTP:sudo firewall-cmd --permanent --add-service=http
- 永久放行指定端口:sudo firewall-cmd --permanent --add-port=8080/tcp
- 重新加载:sudo firewall-cmd --reload
3. 进阶场景:理解 nftables
nftables 是 netfilter 项目中的现代规则框架。netfilter 官方介绍,nftables 用于替代传统的 iptables、ip6tables、arptables、ebtables,并提供新的内核包分类框架和 nft 命令行工具 netfilter nftables 项目。如果你需要写复杂规则、批量维护规则集、做性能更好的集合匹配,可以进一步学习 nftables。
三、实用配置思路:不要一上来就堆规则
一台普通 Web 服务器通常只需要开放少数端口,例如 SSH、HTTP、HTTPS。比较稳妥的做法是:先设置默认拒绝入站,再逐个放行必要服务。这样做符合最小权限原则,也方便日后审计。不要因为排障方便就执行“允许所有端口”,临时放行也应该记录原因和删除时间。
建议把防火墙规则当成配置资产管理:谁新增、为什么新增、影响哪些服务、是否需要回滚,都应该能说清楚。
对于 SSH,最好限制来源地址。例如办公室固定出口 IP、堡垒机地址或 VPN 网段可以访问 22 端口,公网任意来源则不应长期开放。UFW 可使用类似 sudo ufw allow from 203.0.113.10 to any port 22 proto tcp 的形式;firewalld 可结合 rich rule 或指定 source 管理来源,Red Hat 文档也将 zone、服务、端口和来源作为 firewalld 配置的重要对象 Red Hat firewalld 文档。
四、日常检查与排错清单
- 确认服务监听:使用 ss -tulpen 查看服务是否真的在目标端口监听。
- 确认防火墙状态:UFW 看 sudo ufw status verbose;firewalld 看 sudo firewall-cmd --list-all。
- 确认规则方向:入站、出站、转发是不同方向,服务器访问外网失败不一定是入站规则问题。
- 确认 IPv6:如果主机启用了 IPv6,别只配置 IPv4 规则。
- 确认云安全组:云服务器还要检查云平台控制台的安全组或网络 ACL。
- 谨慎重载:远程操作前保留一个已登录会话,必要时设置计划任务自动回滚。
五、几个容易忽略的安全细节
第一,规则越少越安全、越容易维护。第二,优先按服务名开放,如 http、https、ssh,只有自定义服务才按端口开放。第三,日志不要无限打开高等级,否则可能产生大量无用记录。第四,变更前后都要截图或保存命令输出,便于回溯。第五,防火墙不是漏洞修复工具,服务本身仍要及时更新、使用强认证并关闭不必要组件。
总结
🚀 Linux 防火墙配置的关键不是记住所有命令,而是建立正确流程:先识别服务需求,再选择 UFW、firewalld 或 nftables,随后按最小权限放行,最后定期检查和清理规则。新手从 UFW 或 firewalld 入门即可,等遇到复杂转发、批量匹配、统一规则集管理时,再深入 nftables。把防火墙当成日常运维的一部分,你的 Linux 主机就会稳定、安全、可控得多。