是否可以在 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'
Run Code Online (Sandbox Code Playgroud)
当修改为:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="my133t.org" drop'
Run Code Online (Sandbox Code Playgroud)
我得到了错误:
Error: INVALID_ADDR: my133t.org
Run Code Online (Sandbox Code Playgroud)
firewall-cmd的手册页说明了事实:
源地址或地址范围是带有 IPv4 或 IPv6 掩码的 IP 地址或网络 IP 地址,或带有 ipset: 前缀的 MAC 地址或 ipset。对于 IPv4,掩码可以是网络掩码或普通数字。对于 IPv6,掩码是一个普通数字。不支持使用主机名。
这是有充分理由的。firewalld 是一个数据包过滤器。它将数据包与其拥有的规则进行比较。IP 数据包具有源 IP 地址和目标 IP 地址,但没有主机名。因此,使用主机作为标准需要从其他来源(即域名系统DNS)收集附加信息。这种实现很容易受到拒绝服务攻击,因为在尝试过滤数据包时很容易使您的服务器产生新的流量。
此外,虽然通过查询ADNS 中的记录可以轻松地将主机名转换为 IP 地址,但检测 IP 地址的所有主机名并不是那么简单。当然,IP 可以有反向PTR记录,但这不是强制性的,也不值得信赖。
例如,一些带有内容过滤器的统一威胁管理(UTM) 解决方案会根据禁止的主机名阻止 HTTPS 流量,而不加密 TLS 流量。这意味着它不能使用 URL,因为 HTTP 请求及其Host:标头是加密的:它只能看到 IP 地址,就像您的防火墙一样。它不会过滤内容,而是使用该主机名的预取 IP 地址列表来阻止所有到该 IP 地址的 HTTPS 流量。这正是你必须做的。
如果您真的想使用主机名,则需要首先查询 IP 地址。假设您想阻止您的员工serverfault.com在他们宝贵的工作时间上网。
dig +short serverfault.com| 归档时间: |
|
| 查看次数: |
4235 次 |
| 最近记录: |