2016-08-27 160 views
0

使用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或本地主機的任何IP。這證明相當困難,我已經嘗試在設置real_ip模塊設置之前將其放入,並且沒有雪茄。

這可能嗎?這似乎是一個缺陷,如果用戶不通過cloudflare,它允許更多的虐待對某個虛擬主機。

有$ realip_remote_addr變量,但我不能爲我的生活找到一種方法來允許/拒絕使用,而不是正常的$ remote_addr。

編輯:它引起了我的注意,防火牆可以幫助解決這個問題。不幸的是,我真的只需要這幾個虛擬主機。

回答

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 
} 
0

我認爲你想阻止你的機器的直接訪問,即通過你的機器的IP地址。

您可以使用由cloudflare設置的http標題。每當通過cloudflare發出請求時,它會將$http_cf_connecting_ip設置爲訪問您計算機的計算機的IP。

因此,您可以編寫一個條件來拒絕所有具有空$http_cf_connecting_ip的請求。

+0

甚至從來沒有想過,很容易做到這一點!謝謝。請注意,您還可以檢查$ remote_addr == $ realip_remote_addr –

+0

如果解決了您的問題,請立即投訴並接受。 :) – Satys

0

您可以用地理塊

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 
     } 
    }