Linux 防火墙安全加固

Linux 服务器一旦暴露在公网,防火墙就是第一道也是最重要的一道防线。 很多服务器被攻陷的根本原因并不是系统有严重漏洞,而是防火墙配置过于宽松、甚至直接关闭,导致端口扫描工具可以轻松探测到所有开放服务,然后再针对性暴力破解或利用已知漏洞。

本文将系统讲解 2026 年生产环境中 Linux 防火墙(主要是 firewalld、ufw、nftables/iptables)的安全加固思路,从最小权限原则出发,覆盖最实用、最有效的配置方法与常见误区。

一、当前主流防火墙工具对比(2026 年视角)

工具默认发行版后端配置复杂度推荐场景生产推荐度
firewalldRHEL 8/9、CentOS Stream、Rocky、Almanftables/iptables中等企业级服务器、需要 zone 管理的场景★★★★★
ufwUbuntu Server/Desktopiptables/nftablesUbuntu 服务器、个人/中小项目★★★★☆
nftablesDebian 12+、Fedora、Archnftables追求极致性能与精细控制的高级用户★★★★☆
iptables老系统、自定义脚本iptables中~高历史遗留系统、极简环境★★☆☆☆

结论

  • RHEL 系 → 统一使用 firewalld
  • Ubuntu 系 → 统一使用 ufw(简单场景)或直接 nftables(复杂场景)
  • 所有新项目都建议迁移到 nftables 后端(性能更好、规则更清晰)

二、防火墙安全加固核心原则(必须牢记)

  1. 默认拒绝(Default Deny) 所有 incoming 流量默认丢弃,只显式允许需要的
  2. 最小开放原则 只开业务必须的端口,禁止一切“可能有用”的端口(如 22、3306、6379、27017 等直接暴露)
  3. 基于源 IP 限制 管理端口(如 SSH)只允许公司出口 IP / VPN IP / 堡垒机 IP
  4. 分区域(zone)管理 不同信任级别的接口/来源使用不同策略
  5. 记录与告警 所有被拒绝的流量都要记录,重要端口尝试连接要实时告警
  6. 定期审计 每月检查一次开放端口与规则,删除不再需要的放行

三、firewalld 生产级加固方案(RHEL 系主流)

基础配置模板

Bash
# 1. 默认拒绝所有入站,只允许出站
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=drop --add-masquerade   # 如果需要 NAT

# 2. 创建专用 zone 用于管理访问(SSH 等)
firewall-cmd --permanent --new-zone=management
firewall-cmd --permanent --zone=management --add-service=ssh   # 或自定义端口
# 只允许特定来源 IP
firewall-cmd --permanent --zone=management --add-source=203.0.113.0/24
firewall-cmd --permanent --zone=management --add-source=10.8.0.0/16

# 3. 业务 zone(http/https)
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
# 可进一步限制来源(CDN 回源 IP、白名单 IP)
# firewall-cmd --permanent --zone=public --add-source=限定IP/32

# 4. 数据库等高危服务(强烈建议不直接暴露)
# 方式一:彻底关闭外网访问,只允许本地或内网
# 方式二:只允许特定来源(如应用服务器内网 IP)
firewall-cmd --permanent --zone=internal --add-source=10.0.0.0/16
firewall-cmd --permanent --zone=internal --add-port=3306/tcp   # MySQL 示例

# 5. 启用并重载
firewall-cmd --reload

推荐 zone 划分(生产常用)

  • drop:默认丢弃所有未匹配流量
  • management:SSH、堡垒机访问,只允许白名单 IP
  • public:http/https、DNS、NTP 等对外服务
  • internal:内网数据库、Redis、MQ 等,只允许业务服务器 IP
  • trusted:极少数完全信任的来源(慎用)

四、ufw 加固方案(Ubuntu 主流)

Bash
# 1. 默认拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 2. 只允许特定来源的 SSH(强烈推荐)
ufw allow from 203.0.113.0/24 to any port 5522 proto tcp
ufw allow from 10.8.0.0/16 to any port 5522 proto tcp

# 3. 业务端口(http/https)
ufw allow http
ufw allow https
# 或更严格:只允许 Cloudflare / 阿里云 CDN 等回源 IP
# ufw allow from 104.16.0.0/12 to any port 443   # Cloudflare 示例

# 4. 高危端口(如数据库)只允许内网
ufw allow from 10.0.0.0/16 to any port 3306

# 5. 启用并查看状态
ufw enable
ufw status verbose

ufw 小技巧: ufw limit ssh → 对 SSH 启用连接速率限制(防暴力破解辅助)

五、nftables 极简安全模板(高级用户)

nftables 是未来方向,规则更清晰、性能更高。

极简安全模板示例:

nft
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
chain input {
type filter hook input priority 0; policy drop;

# 允许已建立和相关连接
ct state established,related accept

# 允许 loopback
iifname "lo" accept

# 允许 ICMP(可按需限制)
ip protocol icmp accept
ip6 nexthdr icmpv6 accept

# 只允许特定 IP 的 SSH(自定义端口 5522)
tcp dport 5522 ip saddr { 203.0.113.0/24, 10.8.0.0/16 } accept

# http/https
tcp dport { 80, 443 } accept

# 日志被拒绝的包(可选)
log prefix "DROPPED: " drop
}

chain forward {
type filter hook forward priority 0; policy drop;
}

chain output {
type filter hook output priority 0; policy accept;
}
}

保存为 /etc/nftables.conf,然后:

Bash
nft -f /etc/nftables.conf
systemctl enable nftables

六、常见误区与高危行为

  1. 把所有端口都加到 trusted zone → 等于没防火墙
  2. 只开 22 端口但不限制来源 IP → 成为暴力破解靶子
  3. 数据库/Redis 直接暴露公网 → 几乎必被打穿
  4. 定期清空 iptables 规则 → 破坏 Docker / Kubernetes 的 NAT 规则
  5. 关闭 fail2ban/crowdsec 后不加源 IP 限制 → 噪音极大且风险极高

七、加固效果验证与后续维护

验证命令(必须执行):

Bash
# 查看真正开放的端口
ss -tuln | grep LISTEN

# 查看防火墙实际规则
firewall-cmd --list-all-zones    # firewalld
ufw status numbered              # ufw
nft list ruleset                 # nftables

# 外部扫描验证(用 nmap)
nmap -Pn -p- your-server-ip      # 从外部机器执行

后续维护建议:

  • 每月审计一次开放端口与允许来源
  • 每次新增服务必须同步更新防火墙规则
  • 重要端口尝试连接实时告警(crowdsec / fail2ban webhook)
  • 定期升级内核与防火墙组件(修复新 CVE)

结语

防火墙加固的核心只有一句话:“除了明确允许的,什么都不放行”

在 2026 年,黑客工具已经高度自动化,端口扫描 + 漏洞利用的速度以秒计算。 一个合理的防火墙策略,能把 95% 以上的噪音攻击挡在门外,让你把精力真正放在业务逻辑、代码审计和入侵检测上。

推荐的最终目标状态:

  • SSH 只允许公司出口 IP / VPN / 堡垒机
  • 数据库/Redis/MQ 等高危服务零公网暴露
  • HTTP/HTTPS 只开放给 CDN / 负载均衡 / 白名单 IP
  • 所有被拒绝的异常访问都被记录并告警

做好这些,你的服务器至少在网络层已经有了合格的防护底座。

欢迎留言分享你当前服务器的防火墙策略,或者你觉得最容易被忽略的一个防火墙配置点,我们可以一起讨论更安全的写法。

THE END