我之前使用防火墙和区域的经历是不完整的。
- 通过指定区域
nmcli
仅有的、验证 中的设置/etc/sysconfig/network-scripts/ifcfg-*
和验证设置不是重新启动时仍将/etc/firewalld/zones/
两个接口置于默认区域中。 - 通过指定区域
firewalld-cmd --permanent
仅有的、验证 中的设置/etc/firewalld/zones/
和验证设置不是重新启动时仍将/etc/sysconfig/network-scripts/ifcfg-*
两个接口置于默认区域中。 - 通过这两个命令指定区域并验证两个文件集中的设置仍然会将两个接口置于默认区域中。
某物在关闭/启动过程中正在重置这些文件。
答案1
这是被追踪的这里我详细介绍了该问题的临时解决方案,但我也会在这里写下:
我在 CentOS 7.2.1511 和 CentOS 7.3.1611 上确认了此行为。
无论我使用什么 NetworkManager 或 firewalld 命令组合来保持区域持久,似乎都不起作用。我尝试了上面列出的“解决方法”,但仍然没有任何结果。这是我为我的用例想出的解决方法。
我有以下接口,它们应该永久属于相应区域:
- enp0s3 - 公共
- enp0s8 - 内部
- enp0s9 - 外部
我创建了一个 systemd 单元文件来临时解决我的问题: /etc/systemd/system/myzones.service
[Unit]
Description=Custom Zones
After=network.target network.service
[Service]
Type=oneshot
User=root
Group=root
ExecStart=/bin/nmcli connection modify enp0s3 connection.zone public
ExecStart=/bin/nmcli connection modify enp0s8 connection.zone internal
ExecStart=/bin/nmcli connection modify enp0s9 connection.zone external
[Install]
WantedBy=multi-user.target
然后我启用该服务并重新启动
# systemctl daemon-reload
# systemctl enable myzones.service
# reboot
到目前为止,我遇到的唯一问题是,当 /etc/sysconfig/network-scripts/ 中存在 ifcfg-*.old 文件时,您是否尝试重新启动 network.service。但重启就能解决这个问题。我不使用网络服务,所以我现在可以接受这个临时修复。
答案2
我只尝试过ZONE=
在ifcfg-*
文件中进行设置,这在重新启动后始终对我有用。
我不清楚你是否尝试过仅有的编辑ifcfg-*
文件,但这对我有用,所以我建议将其作为答案。
答案3
使用 Ansible 修改接口区域时,我在 CentOS 7 和 8 上看到了非常类似的行为。@user136881 的回答中提到的问题已移至这里。虽然据说已经修复,但我发现当使用 Ansible 的 firewalld 模块将接口移动到不同的区域时,这些区域更改会在重新启动 firewalld 后恢复。
正如 @charley 评论的那样,只需编辑/etc/sysconfig/network-scripts/ifcfg-*
文件即可(需要您systemctl restart NetworkManager
、 来应用)。
所以我停止这样做了:
- name: Set interface for internal zone
ansible.posix.firewalld:
interface: "{{ internal_nic }}"
state: enabled
zone: "{{ internal_zone }}"
immediate: yes
permanent: yes
并开始这样做:
- name: Set interface for internal zone
ansible.buitin.lineinfile:
path: /etc/sysconfig/network-scripts/ifcfg-{{ internal_nic }}
regexp: '^ZONE='
line: 'ZONE="{{ internal_zone }}"'
notify: Restart NetworkManager