开发者社区 问答 正文

Firewalld如何添加任意的外网IP段?相当于以前iptable的--src-range?

Firewalld的富规则,ip段好像只支持掩模形式,例如 firewall-cmd --add-rich-rule="rule family=ipv4 source address=1.1.1.1/24 accept"

问题我如果想加100.0.0.1-100.0.0.3这类相对任意的外网ip段呢?

原来iptables很简单: iptables -A INPUT -p tcp -m iprange --src-range 100.0.0.1-100.0.0.3 --dport 1234 --sport 1024:65534 -j ACCEPT

现在的Firewalld要变成3条富规则分别加入吗? firewall-cmd --add-rich-rule="rule family=ipv4 source address=100.0.0.1 accept" firewall-cmd --add-rich-rule="rule family=ipv4 source address=100.0.0.2 accept" firewall-cmd --add-rich-rule="rule family=ipv4 source address=100.0.0.3 accept"

有没有更好的方法,因为以前iptables只需要几百条,现在用firewalld分拆后变成几十万条富规则了

展开
收起
aptony 2019-10-16 11:13:25 1587 分享 版权
阿里云 AI 助理回答

Firewalld 的确更倾向于使用子网掩码(CIDR)来定义IP地址范围,这使得处理连续的大IP段时不如iptables的iprange模块灵活。但是,对于您希望添加的特定连续IP地址范围,如100.0.0.1至100.0.0.3,如果直接转换为多条规则确实会变得非常繁琐且低效。

虽然Firewalld没有直接等同于--src-range的选项,但您可以考虑使用一个变通的方法:创建一个自定义服务或者直接利用地址组(address set)功能来管理这类复杂规则。

使用地址组(Address Set)

地址组允许您定义一组IP地址,并可以在规则中引用这个组,这样可以简化管理大量IP地址的情况。以下是步骤:

  1. 创建地址组:

    firewall-cmd --permanent --new-ipset=MyIPRange
    
  2. 向地址组中添加IP地址:

    firewall-cmd --permanent --ipset=MyIPRange --add-entry=100.0.0.1
    firewall-cmd --permanent --ipset=MyIPRange --add-entry=100.0.0.2
    firewall-cmd --permanent --ipset=MyIPRange --add-entry=100.0.0.3
    
  3. 应用更改并重载防火墙配置:

    firewall-cmd --reload
    
  4. 创建富规则引用地址组:

    firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address-set=MyIPRange accept'
    
  5. 最后,再次重载以应用新规则:

    firewall-cmd --reload
    

通过这种方式,即使将来需要添加或删除IP地址,也只需修改地址组内容,而无需逐条调整规则,大大提高了管理效率。虽然这仍然需要为每个IP地址执行一次命令,但它提供了一个集中管理和更新的机制,比直接写多条规则要灵活和高效得多。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: