阻止所有对公共 eth 接口 IP 的直接 IP 请求但同时允许某些 fqdn(基于域的)请求的最佳 Linux 选项是什么?
例子:
服务器的公共 IP 是 166.137.1.1,www.mywebsite.com DNS 指向该服务器和 IP。以下是一些场景:
- 向 166.137.1.1 发出请求 - 阻止(在所有端口上)
- 对 www.mywebsite.com 的请求 - 允许(仅端口 80 和 443)
- 对 www.maliciouswebsite.com 的请求在我不知情的情况下指向我的服务器 IP 166.137.1.1 - 阻止(在所有端口上)
示例 3 使恶意用户能够伪造 Web 服务器的环境变量(CGI 范围),例如 HTTP_HOST
答案1
当数据包到达您的机器时,您完全不知道启动用户/软件/进程是否使用了 IP 地址或 DNS 名称。
答案2
HTTP 1.1 协议允许根据Host:
标头中给出的主机名决定要做什么,因此您无法在防火墙的 TCP 数据包级别上执行此操作。不过,您可以获得几乎相似的结果:
- 在防火墙处
DROP
,除发往端口80
和的数据包之外的每个数据包443
。 - 在 Web 服务器上
- 创建一个默认的万能虚拟主机,响应错误
404 Not Found
或显示一些简单的“主机名未在此处配置”页面。或者301
使用您的规范主机名;无论您希望如何。 - 创建另一个仅为正确
Host:
标头提供内容的虚拟主机。
- 创建一个默认的万能虚拟主机,响应错误