.htaccessでTor経由のアクセスを遮断する
Tor使っててなんとなくTorからのアクセス遮断したくなったので書いてみた(特に意味は無い) Torの出口ノードを.htaccessで遮断するだけなので
出口ノード一覧はここにあります
http://torstatus.blutmagie.de/ip_list_exit.php/Tor_ip_list_EXIT.csv
一覧更新が定期的に行われるっぽいので.htaccessをその都度更新します
# -*- coding: utf-8 -*- import time import datetime from subprocess import call, PIPE, DEVNULL while True: # download Tor list cmd = "wget -nc http://torstatus.blutmagie.de/ip_list_exit.php/Tor_ip_list_EXIT.csv" ret = call(cmd.split(), stdout=DEVNULL, stdin=DEVNULL, stderr=DEVNULL) if ret != 0: print("download error") else: with open('/var/www/.htaccess', 'w') as fp: fp.write('Order allow,deny\n') fp.write('Allow from all\n') fp.write('<IfModule mod_rewrite.c>\n') fp.write(' RewriteEngine on\n') with open('Tor_ip_list_EXIT.csv', 'r') as torfp: list = torfp.readlines() for l in list: ip = l.replace('.', '\\.').replace('\n', '') + '$' fp.write(' RewriteCond %{REMOTE_ADDR} ^' + ip) tail = '\n' if l == list[-1] else ' [OR]\n' fp.write(tail) fp.write(' RewriteRule ^(.*) torpage.html [L]\n') fp.write('</IfModule>\n') print(datetime.datetime.now().isoformat(' '), "done") time.sleep(60 * 60 * 12) # 12じかんおき
python3で書いてます。
12時間おきにTorの出口ノード一覧をチェックし、/var/www/.htaccessを上書きします。内容はTorからのアクセスをtorpage.htmlに書き換えて返すだけです(以前のhtaccessは失われるので注意)
実行&常駐
$ screen $ python3 torlimit_htaccess.py [Ctrl + A + D]でデタッチ
出力
Order allow,deny Allow from all <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REMOTE_ADDR} ^2\.98\.200\.182$ [OR] RewriteCond %{REMOTE_ADDR} ^2\.111\.64\.26$ [OR] (略) RewriteCond %{REMOTE_ADDR} ^217\.172\.190\.19$ [OR] RewriteCond %{REMOTE_ADDR} ^217\.210\.165\.43$ RewriteRule ^(.*) torpage.html [L] </IfModule>
http://zipsan.pw/ にTorでアクセスしてみるとしっかり遮断してくれるので一応動いてるっぽい。
他にうまい方法あるかも?