Nginx 如何在 auth_basic 上使用 limit_req_zone 来防止暴力攻击?

Nginx 如何在 auth_basic 上使用 limit_req_zone 来防止暴力攻击?

我有一个 Nginx 服务器,它作为在本地主机上运行的服务的 SSL 代理,该服务不支持 SSL 身份验证。

我想使用 Nginx 的限制请求区域函数来保护 Basic_Auth 免受暴力攻击。有一个类似问题答案是使用Fail2ban,但如果可能的话,我想使用limit_req_zone。

我已经让它工作了——它是使用这两行代码完成的:

http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; # only one login in 2 seconds allowed
  ...

  location / {
    limit_req zone=one burst=5 nodelay; # only five connections allowed for the whole / root
    ...
    proxy_pass      http://127.0.0.1:2222/myapp/www/; # redirections to my unauthenticated service
  }
}

问题是它还会在用户通过身份验证后阻止大量请求其结果是,它http://127.0.0.1:2222/myapp/www/并没有完全加载。

我应该使用什么location指令来阻止使用 Basic_Auth 的尝试次数?

答案1

您可以在授权后设置一些秘密的 cookie 标头。并且阻止只需要没有“秘密 cookie”

http {

    map $cookie_SECRET_NAME $is_limited{
        default $binary_remote_addr;
        "SECRET_VALUE" "";
    }

    limit_req_zone $is_limited zone=one:10m rate=30r/m; # only one login in 2 seconds allowed
    ...

    location / {
        limit_req zone=one burst=5 nodelay; # only five connections allowed for the whole / root
        ...
        proxy_pass      http://127.0.0.1:2222/myapp/www/; # redirections to my unauthenticated service
    }
}

在 php 脚本中,您可以在首次成功登录后添加 cookie

<?php
setcookie("SECRET_NAME", "SECRET_VALUE");
?>

相关内容