温馨提示×

Linux防火墙怎样实现自动化运维

小樊
35
2025-12-28 04:49:08
栏目: 智能运维

Linux防火墙自动化运维实践

一、总体思路与工具选型

  • 选择统一的管理栈:在 RHEL/CentOS 7+/Fedora 优先用 firewalld;在 Debian/Ubuntu 常见 UFW 或直接用 iptables;大规模环境建议引入 Ansible 做编排与合规审计。
  • 区分运行时与永久配置:firewalld 的配置有 运行时(立即生效、重启失效)与 永久(重启仍有效)之分,永久变更需 –reload 或设置 immediate=yes 才会立即生效。
  • 变更可回滚与幂等:脚本与编排需具备“检查-变更-验证”闭环,避免重复添加、支持回滚与差异对比。
  • 安全与可用性:远程操作务必保留 SSH 22/TCP 的应急通道,变更前先备份、分批灰度、变更后即时校验。

二、本地自动化方法

  • firewalld 一键批量与幂等

    • 批量开放服务与端口,并立即生效:
      • services=“http https ssh”
      • for s in $services; do firewall-cmd --permanent --zone=public --add-service=$s; done
      • firewall-cmd --permanent --zone=public --add-port=8080-8090/tcp
      • firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” accept’
      • firewall-cmd --reload
    • 幂等与回滚:用 –query-service/–query-port 先判断是否存在,再决定 add/remove,变更后用 –list-all 校验。
  • UFW 简化管理

    • 启用与规则管理:
      • ufw enable
      • ufw allow 22/tcp, 80/tcp, 443/tcp
      • ufw allow from 192.168.1.0/24 to any port 22
      • ufw delete allow 22/tcp
      • ufw status verbose
    • 自动化:将常用命令写入脚本,结合参数化与日志,便于批量执行与审计。
  • iptables 与持久化

    • 使用 iptables-persistent/netfilter-persistent 保存与恢复:
      • 保存:sudo netfilter-persistent save
      • 恢复:sudo netfilter-persistent reload
    • 开机自动加载:可配置 /etc/network/if-pre-up.d/iptables 调用恢复命令并赋权,确保重启后规则恢复。

三、批量与编排自动化

  • Ansible firewalld 模块(推荐)

    • 典型任务:
      • 开放服务/端口(幂等):
        • ansible all -m firewalld -a “zone=public service=http state=enabled permanent=yes”
        • ansible all -m firewalld -a “zone=public port=8080/tcp state=enabled permanent=yes immediate=yes”
      • 关闭规则:
        • ansible all -m firewalld -a “zone=public service=ftp state=disabled permanent=yes immediate=yes”
    • 优势:声明式、幂等、可并发、可做灰度与回滚,适合 数十至数千台 主机的统一治理。
  • 跨平台统一脚本

    • 在混合环境(如 CentOS/Ubuntu/macOS)中,先检测 OS 类型 与防火墙后端(firewalld/ufw/pf),再调用对应命令实现“一键查询/启停/放行端口/关闭端口”,并对 timeout 与交互式删除做容错处理,适合做临时应急与小规模标准化。

四、可落地的最小实践

  • 场景:为新上线的 Web 主机批量开放 80/443/TCP,仅允许 192.168.1.0/24 访问 22/TCP,其余默认拒绝;变更可回滚、可审计。
  • firewalld 方案(幂等)
    1. 备份与基线
      • cp /etc/firewalld/zones/public.xml /root/backups/public.xml.$(date +%F_%T)
      • firewall-cmd --list-all > /root/backups/firewall-$(date +%F_%T).txt
    2. 变更(立即生效且永久)
      • for s in http https; do firewall-cmd --permanent --zone=public --add-service=$s; done
      • firewall-cmd --permanent --zone=public --add-port=443/tcp
      • firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“22” protocol=“tcp” accept’
      • firewall-cmd --reload
    3. 校验
      • firewall-cmd --list-services | egrep ‘http|https’
      • firewall-cmd --query-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“22” protocol=“tcp” accept’ && echo OK
    4. 回滚(示例)
      • firewall-cmd --permanent --zone=public --remove-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“22” protocol=“tcp” accept’
      • firewall-cmd --permanent --zone=public --remove-service=https
      • firewall-cmd --permanent --zone=public --remove-port=443/tcp
      • firewall-cmd --reload
  • Ansible 方案(并发与一致性)
    • 新建 playbook firewall_web.yml:
      • hosts: webservers become: yes tasks:
        • name: 允许 http/https ansible.builtin.firewalld: zone: public service: “{{ item }}” state: enabled permanent: yes immediate: yes loop: [http, https]
        • name: 放行 443/TCP ansible.builtin.firewalld: zone: public port: 443/tcp state: enabled permanent: yes immediate: yes
        • name: 仅内网访问 22/TCP ansible.builtin.firewalld: zone: public rich_rule: ‘rule family=ipv4 source address=192.168.1.0/24 port port=22 protocol=tcp accept’ state: enabled permanent: yes immediate: yes
    • 执行:ansible-playbook -i inventory firewall_web.yml。

五、变更安全与运维建议

  • 保留应急通道:任何变更前确认 SSH 22/TCP 可达;必要时设置 维护窗口回滚预案
  • 双写与备份:firewalld 用 –permanent 写入,再 –reload;iptables 用 netfilter-persistent save 备份到 /etc/iptables/;变更前先备份规则文件与当前状态。
  • 幂等与可观测:脚本/Playbook 先 queryadd/remove;变更后用 list/status 校验;关键操作写入 syslog/journald 并保留审计记录。
  • 分批灰度与回滚:先小批量验证,再扩大范围;出现异常按备份与回滚步骤快速恢复。

0