2017年9月22日

在 nginx 擋掉透過 CDN 或是 load balanced 的 IP 連線

一般來說、原始伺服器的 IP 最好不要直接對外、不然被攻擊時很麻煩。
但是透過 CDN 連線後、就無法直接使用 iptables 或是 nginx 的 deny 功能阻止連線。

這時候就需要通過 $http_x_forwarded_for 這個參數來取得真正的IP

1.少量 ip 的話、直接寫在 server{} 裡面
server{
...............
...............
if ($http_x_forwarded_for ~* "8.8.8.8|8.8.4.4") {
return 403;
break;
}
}


2.ip 數量可能不少的狀況下、就要透過 map 功能了
另外編輯一個 deny_ip.conf 檔
map $http_x_forwarded_for $allowed {
default allow;
~\s*192.168.1.*$ deny;
~\s*192.168.168.11$ deny;
}


然後 nginx.conf 的 http{} 內加一行
http{
...............
...............
include deny_ip.conf;
}


server{} 裡面加上
server{
...............
...............
if ( $allowed = "deny" ) {
return 403;
}
}


這樣之後單獨編輯 deny_ip.conf 檔就好了
編輯後 nginx 要 reload 才會生效

0 意見:

張貼留言