Назад | Перейти на главную страницу

Nginx - Перенаправляет список IP-адресов выходных узлов Tor на специальную страницу

Я скачиваю каждые 30 минут список выходных узлов Tor https://www.dan.me.uk/torlist/ и сохраните его в файл tor-ip.conf.

Мой хостер не позволяет устанавливать какие-либо модули для nginx, поэтому я должен использовать то, что у меня есть.

Я решил включить файл в переменную и перенаправить его, если он должен совпадать.

nginx.conf

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

if ($bad_user) {
    rewrite ^ http://www.google.com;
}

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

Nginx не позволяет мне использовать переменную напрямую как $bad_user. Как я мог это установить?

Более простой способ заблокировать пользователей Tor - использовать deny директива в nginx. Вы можете создать список запрещенных записей на основе torlist и включить его в конфигурацию nginx.

Как ваша cronjob работает с tor-ip.conf? Если вы можете выполнять некоторые команды оболочки, вы можете сделать что-то похожее на это Гист 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

Затем в nginx вы просто включаете черный список.

include blacklist.conf;

Файл содержит такие утверждения:

deny    100.0.53.178;
deny    100.15.114;
...

Вам нужно перезагружать nginx каждый раз, когда изменяется черный список.

Если вы хотите перенаправить на специальную страницу. Вы можете попробовать использовать error_page директива в сочетании с директивой deny.

location / {
    error_page 403 = @blacklisted;
    include blacklist.conf;
}
location @blacklisted {
    allow all;
    return 301 https://www.google.com;
}

Может быть, проще даже вот так:

location / {
    error_page 403 =301 https://www.google.com;
    include blacklist.conf;
}

Я не думаю, что вы можете сделать это с помощью базовых примитивов nginx. Вам нужно будет создать свой собственный сценарий Lua для выполнения чтения файла и реализации перенаправления.