我对基于用户代理 + IP 的 NGINX 允许/拒绝规则有疑问。
我目前在我的 nginx.conf 中具有以下内容,以允许基于某个用户代理值“iOS”的所有 Internet 连接。
server {
proxy_set_header Proxy-Connection "";
listen *:8443;
server_name myserver.com;
if ($http_user_agent !~* (ELB|ios)) {
return 403;
}
location / {
proxy_http_version 1.1;
proxy_pass https://myserver;
proxy_set_header Connection "upgrade";
}
}
我想允许访问以下组合:
- 任何“IP”+“UserAgent”值为“iOS”
或者
- IP 子网 192.168.2.0/24 + “UserAgent” 值为“chrome”
提前致谢。
答案1
任何“IP”+“UserAgent”值为“iOS”
因此,您需要做的就是默认拒绝允许任何 iOS UserAgent。
IP 子网 192.168.2.0/24 + “UserAgent” 值为“chrome”
在这种情况下,您要尝试做的是在 Nginx 中创建一个复合 if。
GitHub 上的 Jrom 创建了一个脚本来执行此操作。
https://gist.github.com/jrom/1760790
如果我们使用 Jrom 的示例创建一个脚本,使用一些实现流程由 kolbyjack 发布,我们可以制造您想要的东西。
set $test DENIED;
geo $good_user {
default 0;
192.168.2.0/24 1;
}
if ($http_user_agent ~* (ELB|ios)) {
set $test ALLOWED;
}
if ($good_user) {
set $test DE;
}
if ($http_user_agent ~* (chrome)) {
set $test "${test}V";
}
if ($test = ALLOWED) {
proxy_pass https://myserver;
break;
}
if ($test = DEV) {
proxy_pass https://myserver;
break;
}
if ($test = DE) {
return 403;
}
if ($test = V) {
return 403;
}
if ($test = DENIED) {
return 403;
}
答案2
使用这个并输入你的 nginx conf 的主域级服务器块。
###
# BLOCK USER AGENTS
###
set $block_user_agents 0;
if ($http_user_agent ~ "Screaming Frog SEO Spider") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "Indy Library") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "libwww-perl") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "GetRight") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "GetWeb!") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "Go!Zilla") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "Download Demon") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "Go-Ahead-Got-It") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "TurnitinBot") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "GrabNet") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "dirbuster") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "nikto") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "SF") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "sqlmap") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "fimap") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "nessus") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "whatweb") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "Openvas") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "jbrofuzz") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "libwhisker") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "webshag") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "Acunetix-Product") {
set $block_user_agents 1;
}
if ($http_user_agent ~ "Acunetix") {
set $block_user_agents 1;
}
if ($block_user_agents = 1) {
return 403;
}