防火墙配置Skill configuring-firewalls

本技能提供全面的防火墙配置指南,涵盖主机防火墙(iptables、nftables、UFW)、云安全组(AWS、GCP、Azure)和容器网络策略(Kubernetes),适用于Web服务器、数据库、堡垒主机等场景,实现网络安全加固、服务暴露和防御策略。关键词:防火墙配置、安全组、iptables、nftables、UFW、AWS、GCP、Azure、网络安全、云安全、容器安全。

安全运维 0 次安装 2 次浏览 更新于 3/23/2026

name: 配置防火墙 description: 配置主机基础防火墙(iptables、nftables、UFW)和云安全组(AWS、GCP、Azure),提供常见场景如Web服务器、数据库和堡垒主机的实用规则。用于服务暴露、服务器加固或实施网络分段防御策略。

配置防火墙

目的

指导工程师通过配置防火墙,涵盖主机基础(iptables、nftables、UFW)、云基础(AWS安全组、NACLs)和容器基础(Kubernetes NetworkPolicies)环境,提供实用规则示例和安全模式,以防止锁定和安全配置错误。

何时使用此技能

触发短语:

  • “为[服务器/服务]配置防火墙”
  • “为[AWS资源]设置安全组”
  • “允许端口[X]通过防火墙”
  • “阻止IP地址[X.X.X.X]”
  • “在Ubuntu服务器上设置UFW”
  • “创建iptables/nftables规则”
  • “配置堡垒主机防火墙”
  • “实施出口过滤”

常见场景:

  • 初始服务器设置和加固
  • 暴露新服务(Web服务器、API、数据库)
  • 实施网络分段
  • 创建堡垒主机或跳转盒
  • 从iptables迁移到nftables
  • 配置云安全组
  • 故障排除连接问题

决策框架:选择哪个防火墙工具?

云环境

AWS:

  • 实例级控制 → 安全组(有状态,仅允许规则)
  • 子网级执行 → 网络ACLs(无状态,允许 + 拒绝规则)
  • 两者结合用于深度防御

GCP:

  • 使用 VPC防火墙规则(有状态,基于优先级)

Azure:

  • 使用 网络安全组(NSGs)(有状态,基于优先级)

主机基础Linux防火墙

Ubuntu/Debian + 简单性:

  • 使用 UFW(简化防火墙)- 推荐给大多数用户
  • iptables/nftables的前端,简化语法

RHEL/CentOS/Fedora:

  • 使用 firewalld(Red Hat生态系统的默认)
  • 基于区域的配置,动态更新

现代发行版 + 高级控制:

  • 使用 nftables(最佳性能,现代标准)
  • O(log n) 性能 vs iptables O(n)
  • 统一IPv4/IPv6/NAT语法

遗留系统:

  • 使用 iptables(可行时迁移到nftables)
  • 旧内核(< 4.14)必需

Kubernetes/容器

  • 使用 NetworkPolicies(需要CNI插件:Calico、Cilium、Weave)
  • 参见references/k8s-networkpolicies.md

有状态 vs 无状态

有状态(推荐大多数情况):

  • 自动允许返回流量
  • 配置更简单
  • 示例:安全组、UFW、nftables默认

无状态(专用用途):

  • 必须明确允许双向流量
  • 更细粒度控制,较少状态跟踪
  • 示例:网络ACLs、自定义nftables规则

快速启动示例

UFW(Ubuntu/Debian)

# 1. 设置默认
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 2. 关键:在启用前允许SSH(防止锁定)
sudo ufw allow ssh
sudo ufw limit ssh  # 速率限制以防止暴力攻击

# 3. 允许Web流量
sudo ufw allow http    # 端口80
sudo ufw allow https   # 端口443

# 4. 允许来自特定IP(例如数据库访问)
sudo ufw allow from 192.168.1.100 to any port 5432

# 5. 启用防火墙
sudo ufw enable

# 6. 验证规则
sudo ufw status verbose

完整UFW模式,见references/ufw-patterns.md

nftables(现代Linux)

#!/usr/sbin/nft -f
# /etc/nftables.conf

flush ruleset

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

        # 接受回环
        iif "lo" accept

        # 接受已建立连接(有状态)
        ct state established,related accept

        # 丢弃无效数据包
        ct state invalid drop

        # 允许SSH
        tcp dport 22 accept

        # 允许HTTP/HTTPS
        tcp dport { 80, 443 } accept

        # 记录丢弃的数据包
        log prefix "nftables-drop: " drop
    }

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

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

应用:sudo nft -f /etc/nftables.conf 启动时启用:sudo systemctl enable nftables

高级模式(集合、映射),见references/nftables-patterns.md

AWS安全组(Terraform)

# Web服务器安全组
resource "aws_security_group" "web" {
  name        = "web-server-sg"
  description = "Web服务器安全组"
  vpc_id      = aws_vpc.main.id

  # 允许来自任何地方的HTTP/HTTPS
  ingress {
    description = "来自任何地方的HTTPS"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # 仅允许来自堡垒的SSH
  ingress {
    description     = "来自堡垒的SSH"
    from_port       = 22
    to_port         = 22
    protocol        = "tcp"
    security_groups = [aws_security_group.bastion.id]
  }

  # 允许所有出站
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "web-server-sg"
  }
}

安全组与NACLs指南,见references/aws-security-groups.md

安全检查清单

启用任何防火墙前:

  • [ ] 总是在启用前允许SSH(防止锁定)
  • [ ] 在启用前测试规则(尽可能干运行)
  • [ ] 启用日志记录以调试
  • [ ] 在版本控制(Git)中记录规则
  • [ ] 外部验证使用nmap:nmap -Pn <服务器-ip>
  • [ ] 拥有控制台访问(云)或物理访问(本地)
  • [ ] 从默认拒绝开始,明确允许所需流量
  • [ ] 对SSH使用速率限制(ufw limit ssh

常见模式

模式1:基础Web服务器

要求:

  • 允许来自任何地方的HTTP(80)和HTTPS(443)
  • 仅允许来自特定IP或堡垒的SSH
  • 默认拒绝所有其他入站流量

UFW:

sudo ufw default deny incoming
sudo ufw allow from 203.0.113.0/24 to any port 22  # 办公室IP
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

nftables: 见references/nftables-patterns.md完整示例

AWS安全组: 见references/aws-security-groups.md Terraform模块

模式2:数据库服务器(私有)

要求:

  • 仅允许来自应用层的数据库端口(5432、3306等)
  • 无公共互联网访问
  • 仅允许来自堡垒的SSH

见references/database-patterns.md实现

模式3:堡垒主机(跳转盒)

目的: SSH访问的单一加固入口点

见references/bastion-pattern.md完整实现

模式4:出口过滤

目的: 控制出站流量以防止数据泄露

见references/egress-filtering.md实现

关键概念

有状态防火墙

跟踪连接状态(已建立、相关、新):

  • 自动允许返回流量
  • 规则配置更简单
  • 使用:安全组、UFW、nftables(默认)

无状态防火墙

无连接跟踪:

  • 必须明确允许双向流量
  • 必须为返回流量允许临时端口(1024-65535)
  • 使用:网络ACLs

深度防御

多层防火墙控制:

  • 云: 安全组 + NACLs
  • 主机: UFW/nftables + fail2ban
  • 容器: NetworkPolicies

规则评估

安全组(AWS): 所有规则评估,最宽松者胜 网络ACLs(AWS): 顺序评估,首次匹配胜 nftables/iptables: 顺序,首次匹配胜 UFW: 按规则编号顺序

通用最佳实践

  1. 默认拒绝: 从拒绝所有开始,明确允许所需流量
  2. 最小权限原则: 仅打开必要端口/IP
  3. 不在敏感端口上使用0.0.0.0/0: 永远不允许来自任何地方的SSH/RDP/数据库
  4. 版本控制: 在Git中存储防火墙规则
  5. 日志记录: 启用并监控防火墙日志
  6. 定期审计: 每季度审查规则,移除未使用
  7. 不要混合工具: 避免同时运行iptables和nftables
  8. 在生产前测试: 首先使用暂存环境

高级主题

堡垒主机架构: 见references/bastion-pattern.md单一入口点模式

DMZ(非军事区): 见references/dmz-pattern.md网络分段

出口过滤: 见references/egress-filtering.md出站流量控制

Kubernetes NetworkPolicies: 见references/k8s-networkpolicies.md Pod到Pod隔离

迁移iptables到nftables: 见references/migration-guide.md转换过程

云防火墙比较:

  • AWS:references/aws-security-groups.md
  • GCP:references/gcp-firewall.md
  • Azure:references/azure-nsg.md

故障排除

“我通过SSH锁定了自己”:

  • 云:使用控制台/会话管理器访问
  • 本地:物理控制台访问或IPMI/iLO
  • 预防:总是在启用防火墙前允许SSH

连接超时:

  • 检查防火墙是否阻止流量:sudo ufw statussudo nft list ruleset
  • 验证服务是否监听:ss -tuln | grep <端口>
  • 外部测试:nmap -Pn <ip> -p <端口>
  • 检查日志:/var/log/ufw.logjournalctl -u nftables

AWS:临时端口问题:

  • NACLs需要返回流量:允许1024-65535入站
  • 安全组是有状态(无需临时配置)

Kubernetes Pods无法通信:

  • 检查NetworkPolicies:kubectl get networkpolicies -n <命名空间>
  • 验证CNI插件支持NetworkPolicies(Calico、Cilium)
  • 先测试无策略

完整故障排除指南,见references/troubleshooting.md

常见错误避免

在SSH/RDP上允许0.0.0.0/0 → 使用堡垒或VPN ❌ 忘记启用防火墙 → 规则配置但未激活 ❌ 不在启用前测试 → 锁定风险 ❌ 在NACLs中遗漏临时端口 → 返回流量被阻止 ❌ 同时运行iptables + nftables → 冲突和不可预测行为 ❌ 无日志记录 → 无法调试或审计 ❌ 大端口范围 → 不必要的攻击面 ❌ 不记录规则 → 未来混淆

工具特定命令

UFW

# 状态
sudo ufw status verbose
sudo ufw status numbered

# 添加规则
sudo ufw allow <端口>/<协议>
sudo ufw allow from <ip> to any port <端口>
sudo ufw limit ssh  # 速率限制

# 删除规则
sudo ufw delete <规则编号>
sudo ufw delete allow 80/tcp

# 日志记录
sudo ufw logging on
tail -f /var/log/ufw.log

# 重置(禁用并移除所有规则)
sudo ufw reset

nftables

# 列出规则集
sudo nft list ruleset

# 加载配置
sudo nft -f /etc/nftables.conf

# 刷新所有规则
sudo nft flush ruleset

# 动态添加规则
sudo nft add rule inet filter input tcp dport 8080 accept

# 启动时启用
sudo systemctl enable nftables

iptables

# 列出规则
sudo iptables -L -v -n
sudo iptables -L INPUT --line-numbers

# 添加规则
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 删除规则
sudo iptables -D INPUT <规则编号>

# 保存规则
sudo netfilter-persistent save  # Debian/Ubuntu
sudo service iptables save      # RHEL/CentOS

AWS CLI

# 列出安全组
aws ec2 describe-security-groups --group-ids sg-xxxxx

# 列出NACLs
aws ec2 describe-network-acls --network-acl-ids acl-xxxxx

# 添加规则到安全组
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxx \
  --protocol tcp \
  --port 443 \
  --cidr 0.0.0.0/0

基础设施即代码方法,使用Terraform(见references/aws-security-groups.md)

示例目录

完整工作示例可在:

  • examples/ufw/ - UFW配置脚本
  • examples/nftables/ - nftables规则集
  • examples/iptables/ - iptables规则脚本
  • examples/terraform-aws/ - AWS安全组和NACLs
  • examples/terraform-gcp/ - GCP防火墙规则
  • examples/terraform-azure/ - Azure NSGs
  • examples/kubernetes/ - NetworkPolicy清单

集成点

相关技能:

  • security-hardening - 防火墙是服务器加固的组成部分。见security-hardening技能用于SSH加固、fail2ban、auditd和SELinux。

  • building-ci-pipelines - CI运行器需要网络访问仓库和工件存储。为自托管运行器配置防火墙规则。

  • deploying-applications - 应用程序需要服务暴露的防火墙规则。见deploying-applications集成。

  • infrastructure-as-code - 使用Terraform/CloudFormation将防火墙作为代码管理。见infrastructure-as-code用于IaC最佳实践。

  • kubernetes-operations - 超越基础NetworkPolicies的K8s网络。见kubernetes-operations用于服务、Ingress和CNI配置。

  • network-architecture - 更广泛的网络设计模式。见network-architecture用于VPC设计、子网和路由。

参考文件

工具特定指南:

  • references/ufw-patterns.md - 完整UFW指南及示例
  • references/nftables-patterns.md - nftables语法、集合、映射、日志记录
  • references/iptables-patterns.md - iptables基础及迁移路径
  • references/migration-guide.md - 转换iptables到nftables

云提供商指南:

  • references/aws-security-groups.md - 安全组与NACLs及Terraform
  • references/gcp-firewall.md - GCP VPC防火墙规则
  • references/azure-nsg.md - Azure网络安全组

高级模式:

  • references/bastion-pattern.md - 跳转盒架构
  • references/dmz-pattern.md - 网络分段与DMZ
  • references/egress-filtering.md - 出站流量控制
  • references/k8s-networkpolicies.md - Kubernetes Pod隔离

支持:

  • references/troubleshooting.md - 常见问题及解决方案
  • references/decision-tree.md - 工具选择视觉指南