【问题标题】:HaProxy: Fetching string from the headerHaProxy:从标头中获取字符串
【发布时间】:2020-08-21 05:33:48
【问题描述】:

我有一个 007 任务:将 HaProxy 设置为从 CDN 发送的标头中获取字符串,如果检测到字符串,HaProxy 将仅允许对后端服务器的 HTTPS 请求。 目标是阻止我们 CDN 以外的非授权访问到达后端服务器。

迄今为止我得到的最接近的。

前端:

acl allow_traffic_from_cdn req.hdr(STRING NAME HERE) -m str (STRING VALUE HERE)
http-request deny if !allow_traffic_from_cdn

当我尝试通过 CDN 访问服务器时,haproxy.log 确实显示了我期望的字符串,但仅此而已。 只有主页可以访问,如果您尝试不访问任何其他页面,您会收到错误消息:(

我一直在阅读文档,但无法完全理解此过程。

那么,如何设置 haproxy 以从允许访问的标头中获取值,但如果 HTTPS 请求没有访问,则阻止访问?

谢谢

...

【问题讨论】:

    标签: regex security https acl haproxy


    【解决方案1】:

    您可以创建 ACL 来搜索标头及其值是否存在。 然后,拒绝所有缺少此 ACL 的请求:

     acl from_cdn hdr(X-my-cdn-header) -i "your header value"
     http-request deny if !from_cdn
    

    【讨论】:

    • 感谢您的回复。我明天会测试这个并报告:) 干杯
    • 嘿,我已经添加了你的建议,但我不确定我是否理解正确。考虑到信息类似于“STRING_NAME=STRING_VALUE”。那个“X-my-cdn-header”是 STRING_NAME 吗?如果是这样,我仍然遇到同样的问题,第一页还可以,其他一切都失败:(谢谢
    • 您可以发布您尝试过滤的标题示例吗?在我的回答中,“X-my-cdn-header”是您从 CDN 附加的 HTTP 标头名称,-i “您的标头值”是标头值
    • 抱歉回复晚了。这是 HaProxy 在接受 HTTP 请求之前应该搜索的标头信息: set req.http.SECRET = "SECRET_VALUE";如果 HTTP 标头请求没有该值,则请求被拒绝。谢谢。
    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 2012-11-08
    • 2019-03-20
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多