在 CentOS 上“批量管理防火墙”通常有三种常见场景,我分别说明,你可以按需要选择。
适用于:一台 CentOS 服务器,需要一次性加很多规则
for port in 80 443 8080 9000; do
firewall-cmd --permanent --add-port=${port}/tcp
done
firewall-cmd --reload
for ip in 192.168.1.10 192.168.1.11 10.0.0.5; do
firewall-cmd --permanent --add-source=${ip}
done
firewall-cmd --reload
for svc in http https ssh; do
firewall-cmd --permanent --add-service=${svc}
done
firewall-cmd --reload
适合:按 IP + 端口 + 协议控制
for ip in 192.168.1.0/24 10.0.0.0/8; do
firewall-cmd --permanent --add-rich-rule="
rule family=ipv4
source address=${ip}
port protocol=tcp port=3306
accept"
done
firewall-cmd --reload
查看规则:
firewall-cmd --list-all
firewall-cmd --list-rich-rules
适用于:几十上百台服务器
- hosts: centos
tasks:
- name: allow ports
firewalld:
port: "{{ item }}"
permanent: yes
state: enabled
loop:
- 80/tcp
- 443/tcp
- 8080/tcp
notify: reload firewalld
handlers:
- name: reload firewalld
service:
name: firewalld
state: reloaded
运行:
ansible-playbook firewall.yml
✅ 优点:可审计、可回滚、适合生产环境
for host in node1 node2 node3; do
ssh $host "firewall-cmd --permanent --add-port=80/tcp && firewall-cmd --reload"
done
适合大规模、强一致性环境。
CentOS 7/8:
/etc/firewalld/zones/public.xml
改完执行:
firewall-cmd --reload
⚠️ 容易改错,不建议手工频繁改。
--permanent--reload如果你能告诉我:
我可以直接给你一套可直接用的脚本或 Ansible Playbook。