Nginx - 将 Tor 出口节点 IP 列表重定向到特殊页面

kar*_*ayi 1 nginx redirect tor

我每 30 分钟下载一次 Tor 出口节点列表https://www.dan.me.uk/torlist/并将其保存到 tor-ip.conf 文件。

我的主机不允许为 nginx 安装任何模块,所以我必须使用我拥有的模块。

我想将文件包含到一个变量中,并在匹配时调用重定向。

配置文件

$bad_user {
    include /var/www/vhosts/domain/tor-ip.conf;
}

if ($bad_user) {
    rewrite ^ http://www.google.com;
}
Run Code Online (Sandbox Code Playgroud)

tor-ip.conf

1.41.177.72
1.42.47.215
100.0.53.178
100.15.114.155
100.16.220.246
100.34.251.120
100.36.123.111
100.6.14.127
100.7.25.216
101.100.144.174
101.175.68.120
101.176.45.79
...
Run Code Online (Sandbox Code Playgroud)

Nginx 不允许我直接使用变量作为$bad_user. 我怎么能设置呢?

bbx*_*bx0 5

阻止 Tor 用户的更简单方法是deny在 nginx 中使用该指令。您可以根据 torlist 创建拒绝条目列表,并将其包含在您的 nginx 配置中。

你的 cronjob 是如何拉出 tor-ip.conf 的?如果您可以执行一些 shell 命令,您可以执行类似于此Gist tiagoad/block-tor.sh 的操作

wget -qO- https://check.torproject.org/exit-addresses | grep ExitAddress | cut -d ' ' -f 2 | sed "s/^/deny /g; s/$/;/g" > blacklist.conf
Run Code Online (Sandbox Code Playgroud)

在 nginx 中,您只需包含黑名单。

include blacklist.conf;
Run Code Online (Sandbox Code Playgroud)

该文件包含如下语句:

deny    100.0.53.178;
deny    100.15.114;
...
Run Code Online (Sandbox Code Playgroud)

每次黑名单更改时都需要重新加载nginx。

如果你想重定向到一个特殊的页面。您可以尝试将该error_page指令与拒绝指令结合使用。

location / {
    error_page 403 = @blacklisted;
    include blacklist.conf;
}
location @blacklisted {
    allow all;
    return 301 https://www.google.com;
}
Run Code Online (Sandbox Code Playgroud)

甚至像这样可能更容易:

location / {
    error_page 403 =301 https://www.google.com;
    include blacklist.conf;
}
Run Code Online (Sandbox Code Playgroud)