Linux 防火墙配置完全指南
前言
防火墙是 Linux 服务器安全的第一道防线。无论是个人 VPS 还是企业生产环境,正确配置防火墙规则能有效阻止未经授权的网络访问、抵御恶意扫描和攻击。本文将系统介绍 Linux 下主流的三种防火墙方案——iptables、ufw 和 firewalld,涵盖基本概念、配置方法和实战场景。
一、Linux 防火墙基础概念
1.1 Netfilter 框架
Linux 内核的防火墙功能基于 Netfilter 框架实现。Netfilter 是一组内核态的网络数据包处理钩子(hooks),允许用户态程序注册回调函数来检查、修改、丢弃或转发数据包。
Netfilter 支持以下五种钩子点(Hook Points):
- PREROUTING:数据包进入协议栈后、路由决策前
- INPUT:数据包目标为本机时触发
- FORWARD:数据包需要经过本机转发时触发
- OUTPUT:本机发出的数据包
- POSTROUTING:路由决策后、数据包离开前
1.2 规则匹配与处理动作
防火墙规则按顺序匹配,一旦匹配即执行对应动作(target),不再继续匹配后续规则。常见处理动作包括:
- ACCEPT:允许数据包通过
- DROP:丢弃数据包(不回复任何信息)
- REJECT:拒绝数据包(回复 ICMP 不可达消息)
- LOG:记录日志但不影响处理
- SNAT/DNAT:源/目标地址转换(NAT)
1.3 防火墙方案对比
| 特性 | iptables | ufw | firewalld |
|---|---|---|---|
| 底层引擎 | 直接操作 Netfilter | 基于 iptables 的封装 | 基于 nftables(新版) |
| 适用发行版 | 所有 Linux 发行版 | Ubuntu/Debian 为主 | RHEL/CentOS/Fedora |
| 配置方式 | 命令行规则链 | 简单语法规则 | 区域(zone)管理 |
| 学习曲线 | 较陡峭 | 平缓 | 中等 |
| 动态更新 | 需手动重载 | 即时生效 | 即时生效 |
| 适合场景 | 深度自定义、路由器 | 桌面/简单服务器 | 企业服务器集群 |
二、iptables 详解
iptables 是最经典、功能最强大的 Linux 防火墙工具,几乎所有的上层防火墙工具底层都使用 iptables 或其继任者 nftables。
2.1 表(Tables)与链(Chains)
iptables 按功能划分为多个表(table),每个表包含若干链(chain):
| 表名 | 包含的链 | 主要用途 |
|---|---|---|
| filter | INPUT, FORWARD, OUTPUT | 数据包过滤(默认表) |
| nat | PREROUTING, POSTROUTING, OUTPUT | 网络地址转换 |
| mangle | PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING | 修改数据包头部 |
| raw | PREROUTING, OUTPUT | 配置连接跟踪例外 |
2.2 基本命令语法
1 | iptables -t <表名> <操作命令> <链名> <匹配条件> -j <动作> |
常用操作命令:
| 命令 | 含义 |
|---|---|
-A |
在链末尾追加规则 |
-I |
在链开头插入规则 |
-D |
删除匹配的规则 |
-R |
替换指定编号的规则 |
-L |
列出当前规则 |
-F |
清空所有规则 |
-P |
设置链的默认策略 |
2.3 实战:基础安全配置
以下是一套适用于 Web 服务器的 iptables 安全配置模板:
1 |
|
2.4 高级规则示例
限制单个 IP 的并发 SSH 连接数:
1 | iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT |
防止端口扫描(SYN Flood 防护):
1 | iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT |
仅允许特定 IP 访问 SSH:
1 | iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT |
端口转发(DNAT):
1 | # 将外部 8080 端口流量转发到内网 192.168.1.100:80 |
2.5 规则持久化
Debian/Ubuntu:
1 | # 安装 iptables-persistent |
CentOS/RHEL 7+:
1 | # 安装 iptables-services |
三、ufw 详解
ufw(Uncomplicated Firewall)是 Ubuntu 系统默认的防火墙配置工具,对 iptables 进行了友好封装,语法简洁明了,适合初学者和快速配置场景。
3.1 基础命令
1 | # 查看状态 |
3.2 常用规则配置
1 | # 默认策略:拒绝所有入站,允许所有出站 |
3.3 应用配置文件
ufw 支持通过应用配置文件管理复杂规则,配置文件位于 /etc/ufw/applications.d/。
1 | # 查看所有可用的应用配置 |
自定义应用配置示例(/etc/ufw/applications.d/myapp):
1 | [MyApp] |
3.4 日志与限速
1 | # 启用日志 |
ufw limit会在 30 秒内拒绝超过 6 次连接的 IP 地址,非常适合保护 SSH 端口。
3.5 完整配置示例
1 |
|
四、firewalld 详解
firewalld 是 RHEL/CentOS 7+ 和 Fedora 的默认防火墙管理工具,基于 区域(zone) 概念管理规则,支持动态更新无需重启。
4.1 区域(Zone)概念
firewalld 通过将网络接口分配到不同区域来管理信任级别:
| 区域名 | 信任级别 | 默认策略 | 适用场景 |
|---|---|---|---|
| trusted | 最高 | 全部接受 | 内网可信网络 |
| home | 高 | 有限接受 | 家庭网络 |
| internal | 高 | 有限接受 | 内部网络 |
| work | 中高 | 有限接受 | 工作网络 |
| public | 低 | 仅允许 SSH/DHCP | 公共网络(默认) |
| external | 最低 | 禁止入站,NAT 出站 | 外部网络、网关 |
| dmz | 隔离 | 禁止入站 | DMZ 区域 |
| block | 拒绝 | 全部拒绝(reject) | 黑名单 |
| drop | 丢弃 | 全部丢弃(drop) | 最高安全级别 |
4.2 基本命令
1 | # 查看状态 |
4.3 配置服务与端口
1 | # 允许服务(推荐方式) |
重要:不加
--permanent的规则是运行时规则,重启后会丢失。如需永久生效,需加--permanent参数并执行--reload:
1 | # 永久生效的规则 |
4.4 高级配置
限制来源 IP:
1 | # 仅允许内网访问 SSH |
端口转发:
1 | # 将 8080 端口流量转发到 80 |
速率限制:
1 | # 限制 SSH 连接频率 |
自定义区域:
1 | # 将 eth0 接口分配到 trusted 区域 |
4.5 完整配置示例
1 |
|
五、常见问题排查
5.1 查看当前规则状态
1 | # iptables |
5.2 测试端口是否开放
1 | # 本机测试 |
5.3 查看连接跟踪
1 | # 查看当前连接跟踪表 |
5.4 防火墙导致常见问题
SSH 连接断开后无法重连:
- 检查 SSH 端口规则是否被覆盖
- 使用 VNC/IPMI/KVM 等带外管理接入
- 检查默认策略是否为 DROP
Web 服务无法访问:
1 | # 确认防火墙未阻止端口 |
防火墙规则太多导致性能下降:
- 使用
ipset管理大量 IP 集合 - 合理使用连接跟踪(
--state ESTABLISHED,RELATED) - 将常用规则放在链的前面
六、安全最佳实践
6.1 通用原则
- 最小权限原则:只开放必要的端口,能不开就不开
- 白名单优先:默认为 DROP,仅允许明确需要的流量
- SSH 保护:修改默认端口 + 密钥登录 + fail2ban + ufw limit
- 定期审计:每周检查防火墙规则,清理过期规则
- 规则备份:将配置文件纳入版本管理(如 Git)
- 双层防护:云服务商安全组 + 系统防火墙
6.2 常用端口速查表
| 端口号 | 协议 | 用途 | 建议策略 |
|---|---|---|---|
| 22 | TCP | SSH | 限制来源 IP + 限速 |
| 80 | TCP | HTTP | 公开开放 |
| 443 | TCP | HTTPS | 公开开放 |
| 3306 | TCP | MySQL/MariaDB | 仅限内网 |
| 5432 | TCP | PostgreSQL | 仅限内网 |
| 6379 | TCP | Redis | 仅限内网 |
| 27017 | TCP | MongoDB | 仅限内网 |
| 8080 | TCP | HTTP 备用/代理 | 按需 |
| 8443 | TCP | HTTPS 备用 | 按需 |
| 9090 | TCP | Prometheus | 限制来源 IP |
| 9100 | TCP | Node Exporter | 限制来源 IP |
6.3 结合 fail2ban
fail2ban 能自动检测恶意登录尝试并添加临时防火墙规则:
1 | # 安装 fail2ban |
总结
无论使用哪种防火墙工具,核心原则是一致的:
- 理解网络流量模型——只有确定哪些端口需要开放,才能精确配置规则
- 从严格开始,逐步开放——先设默认 DROP,再逐步添加 ACCEPT 规则
- 持久化配置——确保规则在重启后依然生效
- 定期维护——随着业务变化调整防火墙策略
对于初学者,推荐从 ufw 入门(Ubuntu)或 firewalld(CentOS),简单直观;对于需要精细控制的场景,iptables 仍然是最强大的选择。同时建议所有服务器都启用 fail2ban 作为第二道防线,形成纵深防御体系。
本文由AI辅助生成,内容仅供参考
- 标题: Linux 防火墙配置完全指南
- 作者: Someone
- 创建于 : 2026-06-07 16:31:00
- 更新于 : 2026-06-18 08:39:57
- 链接: https://demo-blog.qusite.cn/2026-06-07-linux-firewall-guide/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。