![如何在 RHEL7 / CentOS 7 中使用 Firewalld 启用/设置多播规则](https://linux22.com/image/1429872/%E5%A6%82%E4%BD%95%E5%9C%A8%20RHEL7%20%2F%20CentOS%207%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20Firewalld%20%E5%90%AF%E7%94%A8%2F%E8%AE%BE%E7%BD%AE%E5%A4%9A%E6%92%AD%E8%A7%84%E5%88%99.png)
我找不到有关如何为 RHEL / CentOS 7 中的默认防火墙firewalld 启用多播的文档。有人能指点一下吗?仅供参考:我知道如何使用 iptables 来做到这一点。
答案1
起初我尝试了这个命令:
firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 1 -d 224.0.0.18 -j ACCEPT
但CentOS7似乎无法在重启后重新加载直接规则。
[root@test01-galera02 firewalld]# firewall-cmd --direct --get-all-rules
[root@test01-galera02 firewalld]# firewall-cmd --direct --get-all-rules --permanent
ipv4 filter IN_public_allow 1 -d 224.0.0.18 -j ACCEPT
[root@test01-galera02 firewalld]#
[root@test01-galera02 firewalld]# cat direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
<rule priority="1" table="filter" ipv="ipv4" chain="IN_public_allow">-d 224.0.0.18 -j ACCEPT</rule>
</direct>
[root@test01-galera02 firewalld]# pwd
/etc/firewalld
[root@test01-galera02 firewalld]#
其次,我成功使用了这个命令。firewalld 现在在我的 galera 集群上运行良好,并且上面有 keepalived。
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" destination address="224.0.0.18" protocol value="ip" accept' --permanent
firewall-cmd --reload
答案2
变体IPv4多播和防火墙使用富人规则:
- 定义规则:
ALLOW_MULTICAST_RICH_RULE=" rule family=ipv4 destination address=224.0.0.0/4 protocol value=udp accept" ALLOW_IGMP_RICH_RULE=" rule family=ipv4 protocol value=igmp accept"
- 在运行时应用规则:
firewall-cmd --add-rich-rule="$ALLOW_MULTICAST_RICH_RULE" firewall-cmd --add-rich-rule="$ALLOW_IGMP_RICH_RULE"
- 永久添加规则(即它们将在重启后应用):
firewall-cmd --permanent --add-rich-rule="$ALLOW_MULTICAST_RICH_RULE" firewall-cmd --permanent --add-rich-rule="$ALLOW_IGMP_RICH_RULE"
此外CentOS 7,这也适用于RHEL/CentOS/Rocky/AlmaLinux 8,其中直接的默认情况下不支持规则:
请注意,
firewalld
后端nftables
不支持使用选项将自定义nftables
规则传递给。firewalld
--direct
答案3
IPv6
firewall-cmd --permanent --direct --add-rule ipv6 filter PREROUTING 0 -t raw -m rpfilter --invert -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -d ff00::/8 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv6 filter OUTPUT 0 -d ff00::/8 -j ACCEPT
IPv4
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -m udp -p udp -m pkttype --pkt-type multicast -j ACCEPT
答案4
你打开此文件:/etc/firewalld/direct.xml
。
写入:
<?xml version="1.0" encoding="utf-8"?>
<direct>
<rule priority="0" table="filter" ipv="ipv4" chain="OUTPUT">' --out-interface' [ens33] --destination 224.0.0.18 --protocol vrrp -j ACCEPT</rule>
<rule priority="1" table="filter" ipv="ipv4" chain="IN_public_allow">-d 224.0.0.18 -j ACCEPT</rule>
</direct>
替换[ens33]
为您的服务器的端口。
然后:firewall-cmd --reload
。