使用firewalld/firewalld.richlanguage 拒绝主机(非 ip)

使用firewalld/firewalld.richlanguage 拒绝主机(非 ip)

是否可以在 linux firewalld 中添加一条规则来拒绝整个主机(不是 ip 或 ip 范围)?

例如,我希望拒绝来自 my133y.org 的所有连接。

使用防火墙丰富的语言我可以删除 IP,但手册页中没有提供主机拒绝。

拒绝 IP 的示例

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.100.4/24" drop'

修改为:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="my133t.org" drop'

我收到错误:

Error: INVALID_ADDR: my133t.org

答案1

手册页防火墙命令讲述事实:

源地址或地址范围可以是 IP 地址或带有 IPv4 或 IPv6 掩码的网络 IP 地址,也可以是 MAC 地址或带有 ipset: 前缀的 ipset。对于 IPv4,掩码可以是网络掩码或纯数字。对于 IPv6,掩码是纯数字。不支持使用主机名。

这是有原因的。firewalld 是一个数据包过滤器。它将数据包与它所拥有的规则进行比较。IP 数据包既有源 IP 地址,也有目标 IP 地址,但没有主机名。因此,使用主机作为标准需要从其他来源收集更多信息,即域名系统DNS。这种实现方式容易受到拒绝服务攻击,因为它很容易让您的服务器在尝试过滤数据包时生成新的流量。

此外,虽然通过查询 DNS 中的记录可以轻松将主机名转换为 IP 地址A,但检测 IP 地址的所有主机名并不那么简单。当然,IP 可以有反向PTR记录,但这不是强制性的,也不值得信赖。

例如一些统一威胁管理具有内容过滤器的 (UTM) 解决方案会根据禁止的主机名阻止 HTTPS 流量,而不会加密 TLS 流量。这意味着它无法使用 URL,因为 HTTP 请求及其Host:标头已加密:它只能看到 IP 地址,就像您的防火墙一样。它不会过滤内容,而是使用该主机名的预取 IP 地址列表阻止到该 IP 地址的所有 HTTPS 流量。这正是您必须做的。

如果您确实想使用主机名,则首先需要查询 IP 地址。假设您想阻止员工serverfault.com在宝贵的工作时间上网。

  1. dig +short serverfault.com
  2. 阻止那些目的地IP 地址。
  3. 从删除过时的规则开始,定期重复此操作。

相关内容