使用nginx,您可以允许和拒绝范围和ips(https://www.nginx.com/resources/admin-guide/restricting-access/)。 使用realip模块,您可以在cloudflare之后将其使用的IP更改为真实IP。 (http://nginx.org/en/docs/http/ngx_http_realip_module.html)
现在就是这样,我想将任何不是Cloudflare或localhost的ip列入黑名单。这是相当困难的,我在设置real_ip模块设置之前尝试过它,而且没有雪茄。
这有可能吗?如果用户没有通过cloudflare似乎是一个缺陷,它允许对某个虚拟主机进行更多的滥用。
有$ realip_remote_addr变量,但我不能在我的生活中找到一种方法来允许/拒绝使用而不是正常的$ remote_addr。
编辑:我注意到防火墙可以为此提供帮助。不幸的是,我真的只需要几个vhosts。
答案 0 :(得分:1)
我认为你想要阻止你机器的直接访问,即通过机器的ip。
您可以使用cloudflare设置的http标头。每当通过cloudflare发出请求时,它会将$http_cf_connecting_ip
设置为访问您计算机的计算机的IP。
因此,您可以编写条件,拒绝所有空$http_cf_connecting_ip
的请求。
答案 1 :(得分:1)
您可以使用地理区块轻松完成
geo $realip_remote_addr $giveaccess {
default 0;
IPBLOCK1 1;
IPBLOCK2 1;
…
}
server {
…
location / {
if ($giveaccess = 0){
return 403 "$realip_remote_addr";
#use it for debug
}
}
答案 2 :(得分:0)
这种简单性可以带来很棒的东西。
使用 $realip_remote_addr == $remote_addr
会更聪明,因为$http_*
可能会被发送此类请求的客户端伪造。 (朋友指出我。)
编辑:好的,考虑到上述问题,最好使用Lua模块。
类似于下面的东西。
access_by_lua_block {
if ngx.var.remote_addr == ngx.var.realip_remote_addr then
return ngx.redirect("http://somewhere.else.please/");
end
}