Torからのアクセスだったらブロックする
Torからのアクセスなのかは、TorノードのIPアドレスが各所で公開されているのでここと突き合わせを行うとよいと思います。
アクセス回数に制限があるサイトがいくつかありますが、 http://hqpeak.com/torexitlist/free/?format=json などがあります。
WEBアプリケーションに組み込む場合は、アクセス毎にアプリケーションプロセスがネットワークへ問い合わせにいくとプロセスが不足してしまうことが予測できるので、
IPアドレスのリストを予め保持しておくといいと思います。
ちなみにrubygemsにあるgemの大半がネットワーク問い合わせ型でした。
ということでIPアドレスのリストをActiveRecordを使って取得&検索を行うgemを作りました。
https://github.com/jiikko/activerecord_tor_node
使い方について。
Gemfile に追加からのbundle install で まずtor_nodesテーブルを作成します
class CreateTorNode < ActiveRecord::Migration
def change
create_table :tor_nodes do |t|
t.string :ip, limit: 191
end
add_index :tor_nodes, :ip, unique: true
end
TorNode.fetch_tor_nodes_ip!
でIPアドレスのリストを更新します。
controller の filter で下記メソッドを書きます。
def block_if_from_tor_node!
if from_tor_node?
redirect_to(home_root_path, notice: 'tor からは送信できません')
return false
end
end
def from_tor_node?
TorNode.exists?(ip: remoteaddr)
end
以上。
-
category:
- rails