为多个IP建立安全链接的任何可行方法?

时间:2018-07-08 11:52:06

标签: nginx cdn

我正在使用Nginx运行一个使用率相当高的CDN系统,我需要保护我的链接,以免用户之间共享它们。

当前配置完美运行。.

# Setup Secure Links
secure_link      $arg_md5,$arg_expires;
secure_link_md5  "$secure_link_expires$uri$remote_addr secret";

if ($secure_link = "") { return 403; }
if ($secure_link = "0") { return 410; }

但是,随着互联网的移动性越来越强,现在有许多用户来自大学校园等,我看到大量失败的请求,并且由于请求者的IP在两次请求之间发生了变化,最终用户感到恼火。

发出请求的IP几乎总是在同一范围内,例如:

Original Request: 192.168.0.25
File Request:     192.168.0.67

我很乐意将这些安全链接锁定在一定范围内,例如

192.168.0.0 - 192.168.0.255

或者走得更远,使其更大

192.168.0.0 - 192.168.255.255

但是我无法在nginx中找到一种方法来实现此目的,或者secure_link功能甚至支持此方法。

如果这不可能-有人对如何保护链接(虽然限制较少但仍然相当安全)有其他想法吗?我曾经看过使用浏览器字符串,但是我们许多用户都有下载管理器或使用3rd part桌面客户端-因此这是不可行的。

我非常想做到这一点,而不必使用任何动态代码来检查远程数据库,因为这是非常大的工作量,而我宁愿没有这种依赖性。

3 个答案:

答案 0 :(得分:0)

您可以在Nginx中使用多个身份验证指令,因此可以从安全链接中删除IP并将其指定为单独的指令。

Nginx使用CIDR范围,因此在您的示例中,只是

allow 192.168.0.0/16;
deny all;

答案 1 :(得分:0)

您可以使用地图方法

series = np.unique(series)
count = 0 
pcorrect = np.zeros(len(nseries))
for s in nseries:
   if data.loc[data['series'] == s]:
       outcome_count = data['outcome'].value_counts()
       nstarted_trials = outcome_count['T'] + outcome_count[F'] 
       pcorrect[count]= outcome_count['T'] / nstarted_trials
    count +=1

然后再使用一些东西

map $remote_addr $auth_addr {
    default         $remote_addr;
    ~*^192\.168\.100     192.168.100;
    ~*^192\.169     192.169;
}

我没有使用这种方法,但是我认为它应该起作用。如果没有,请告诉我

答案 2 :(得分:0)

由于@Tarun Lalwani指出了地图的想法,我设法使这项工作得以实现。

# This map breaks down $remote_addr into octets 
map $remote_addr $ipv4_first_two_octets {
  "~(?<octet1>\d+)\.(?<octet2>\d+)\.(?<octet3>\d+)\.(?<octet4>\d+)" "${octet1}.${octet2}";
  default "0.0";
}


location / {
  # Setup Secure Links secure_link $arg_md5,$arg_expires;
  secure_link_md5 "$secure_link_expires$uri$ipv4_first_two_octets secret";
}