如何在 RHEL7 / CentOS 7 中使用 Firewalld 启用/设置多播规则

如何在 RHEL7 / CentOS 7 中使用 Firewalld 启用/设置多播规则

我找不到有关如何为 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

相关内容