温馨提示×

Linux防火墙如何进行安全策略制定

小樊
36
2025-11-24 18:16:49
栏目: 智能运维

Linux防火墙安全策略制定

一 策略设计总览

  • 最小暴露面:仅开放必需服务端口(如 22/SSH、80/HTTP、443/HTTPS),其余默认拒绝;对管理口与业务口分别制定策略。
  • 默认拒绝 + 显式允许:将 INPUT/FORWARD 默认策略设为 DROP/REJECT,仅对白名单放行;必要时对 OUTPUT 按需限制。
  • 状态化放行:优先放行已建立和相关连接(conntrack/state),避免会话中断。
  • 分区分域:按网络信任级别使用 firewalld zones(如 public、internal、trusted),将接口与源地址映射到不同区域。
  • 纵深防御:与 Fail2Ban、系统日志、主机加固(如 SELinux/AppArmor)配合,形成多层防护。
  • 可运维性:规则命名/注释、变更留痕、定期审计与演练回滚预案。

二 工具选择与适用场景

  • firewalld:基于 zones/services 的动态管理,支持运行时与永久配置分离,适合 CentOS/RHEL 7+Fedora 及需要快速分区分域的场景。
  • ufw:Ubuntu 的简化前端,适合 Ubuntu/Debian 桌面与通用服务器的一键式策略管理。
  • iptables/nftables:底层 Netfilter 工具,适合复杂、细粒度与高性能需求;nftables 为新一代语法与性能改进方向。

三 落地步骤与最小可用模板

  • 通用流程

    1. 明确资产与风险:梳理需要开放的 端口/协议/来源网段
    2. 选择工具与区域/接口:如 firewalld 绑定 public/internal 区域到对应网卡或源地址。
    3. 设定默认策略:INPUT/FORWARD 默认 DROP/REJECT,OUTPUT 按业务需要放行。
    4. 建立基础放行:回环、已建立连接、DNS、ICMP(按需)、管理口(如 SSH 白名单)。
    5. 业务放行:按服务开放 80/443 等,数据库等仅对受控网段开放。
    6. 日志与告警:对拒绝流量做 LOG,结合 Fail2Ban 自动封禁。
    7. 备份与回滚:保存规则、导出配置,变更前保留可回滚方案。
    8. 测试验证:从内外网多路径回归测试,确认业务与监控无异常。
  • 最小可用模板(可直接按需裁剪)

    • firewalld(示例:仅放行业务 80/443 与白名单 SSH)
      sudo systemctl start firewalld
      sudo firewall-cmd --set-default-zone=public
      
      # 基础:回环、已建立/相关
      sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="127.0.0.1" accept'
      sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" state ESTABLISHED,RELATED accept'
      
      # 业务放行
      sudo firewall-cmd --permanent --add-service=http
      sudo firewall-cmd --permanent --add-service=https
      
      # SSH 白名单(示例网段)
      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="22" protocol="tcp" accept'
      
      # 可选:拒绝某 IP(注意顺序与默认策略)
      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.99" reject'
      
      sudo firewall-cmd --reload
      sudo firewall-cmd --list-all
      
    • ufw(示例:仅放行业务 80/443 与白名单 SSH)
      sudo apt update && sudo apt install ufw -y
      sudo ufw default deny incoming
      sudo ufw default allow outgoing
      sudo ufw allow 80/tcp
      sudo ufw allow 443/tcp
      sudo ufw allow from 203.0.113.0/24 to any port 22
      sudo ufw enable
      sudo ufw status verbose
      
    • iptables(示例:状态化、默认拒绝、白名单 SSH 与业务 80/443)
      # 允许回环与已建立/相关
      sudo iptables -A INPUT -i lo -j ACCEPT
      sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
      
      # 业务放行
      sudo iptables -A INPUT -p tcp --dport 80  -j ACCEPT
      sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
      
      # SSH 白名单
      sudo iptables -A INPUT -p tcp -s 203.0.113.0/24 --dport 22 -j ACCEPT
      
      # 可选:速率限制 SSH 暴力尝试
      sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
      sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
      
      # 默认拒绝(谨慎:确保已放行 SSH,避免锁死)
      sudo iptables -P INPUT DROP
      sudo iptables -P FORWARD DROP
      # 如本机需主动外联,可保留 OUTPUT ACCEPT 或按需细化
      
      提示:使用 iptables 时务必先放行回环与已建立连接,再设置默认拒绝,避免远程会话中断。

四 常见场景与加固要点

  • SSH 安全:更改默认端口、限制来源网段、速率限制、仅密钥登录;变更前在本地控制台预留应急通道。
  • Web 服务:仅开放 80/443,静态资源与 API 分离网段/端口;对外最小化暴露管理端口。
  • 数据库:仅对应用/从库网段开放 3306/5432 等,禁止公网直连;配合主机防火墙与数据库自身 ACL。
  • NAT/端口转发与网关:在出口或边界启用 MASQUERADE 做源地址转换;必要时做端口转发(DNAT)。
  • 日志与监控:对 INPUT 拒绝流量做前缀日志(如 “IPTables-Dropped:”),集中到 rsyslog/SIEM 分析;结合 Fail2Ban 自动封禁暴破源。

五 运维与风险控制

  • 变更管控:规则变更前备份(iptables-save/firewalld 配置导出),先在测试环境验证;变更窗口内保留回滚方案。
  • 持久化与重载firewalld 区分运行时与永久配置,修改后用 –reload 生效;iptables 规则按发行版使用服务保存或规则文件持久化。
  • 审计与清理:定期列出规则(如 iptables -L -n -vfirewall-cmd --list-all),清理过期/冗余规则,避免规则膨胀。
  • 多网卡/多区域:按接口与源地址绑定 zone,对管理网、业务网、管理口/数据口分别制定策略,减少横向移动风险。

0