我正在做一个项目,其中一项测试需要网站的某些部分无法访问,以查看网站如何反应以及出现错误时提供哪些消息描述。
我的网站在端口 7002 上使用 HTTPS。无法访问的部分将定义为测试
iptables -A OUTPUT -p tcp -m string --string "test" --destination-port 7002 --algo kmp -j REJECT --reject-with tcp-reset
这应该可以。我的问题是 HTTPS 会加密所有内容,使服务器无法看到网络设备何时请求测试 URI,因此它永远不会被激活
下面这行代码有效,但是会导致整个网站瘫痪,也就是说错误消息表明整个网站瘫痪:
iptables -D INPUT -p tcp --destination-port 7002 -j DROP
有没有什么办法可以-m string --string "test"
通过 HTTPS 来实现?
答案1
有什么方法可以让 -m string --string "test" 通过 HTTPS 工作吗?
不,这有点重点HTTPS。防火墙可能能够匹配域名(由于 SNI),但它永远不会看到路径。
然而,同一域内的不同路径有不同的可达性其实没什么意义,因为路径只是传输后已成功到达服务器(TCP 和 TLS 握手成功完成)。
我认为,如果网站被阻止的部分确实位于不同的域(或端口)上,或者如果您让它返回 HTTP 级别的失败代码(例如 50x)而不是悄悄地丢弃请求,那么您的测试会更加现实。
例如,您可以设置 Apache 或 Nginx 来假装它是 API 服务器,然后您可以将其配置为对某些 URL 返回错误 503,但将其他所有内容反向代理到真实服务器。