我有一个 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");
?>