WEB TECKS - WEBサイト構築知識いろいろ

[PHP]TorからのWEBサイトへのアクセス遮断

更新日:2024-02-22 10:59:51 登録日:2024-02-22 10:59:17
[動作環境]
CentOS Stream release 8 / CentOS Linux release 7.6.1810 (Core)
PHP 8.1.4 (cli) (built: Mar 15 2022 20:18:41) (NTS gcc x86_64) / PHP 7.3.33 (cli) (built: Aug 1 2023 13:29:47) ( NTS )

 Torはプライバシーと匿名性を高めるために制定された通信規格で、その技術を使用したWebブラウザもあります。
 匿名性という観点では利点もありますが、犯罪目的で利用される場合もあり、WEBサイトを運営する場合、Torからのアクセスを遮断したい場面もあるかと思います。
 今回PHPを使用して、アクセスを遮断するサンプルを記述したいと思います。

 その前に、Torからアクセスする場合、複数のノードと呼ばれるサーバ(IP)を経由し、最後に経由したノード(IP)から最終的に、インターネット上のWEBサーバにアクセスされます。この最後のノード(IP)は 「Tor exit ノード」と呼ばれ、そのIPアドレス一覧はTor公式サイトで、公開されています。
 公開サイトのアドレスは以下になります。

https://check.torproject.org/torbulkexitlist

 こちらのサイトから、IPアドレス一覧を取得し、WEBサーバ側ではWEBサーバにアクセスしてきたIPアドレスと一覧のIPアドレスを突き合わせることでTorからのアクセスであることをチェックすることができます。

Torからのアクセス遮断PHPサンプルコード

// Tor exitノード IPアドレスの取得

// すべてのTor exitノード IPアドレスを公開しているサーバURL
$url = "https://check.torproject.org/torbulkexitlist";

// cURLセッションを初期化
$ch = curl_init();

// URLをセット
curl_setopt($ch , CURLOPT_URL , $url);
// 返り値を文字列で返す指定
curl_setopt($ch , CURLOPT_RETURNTRANSFER , true);

// Tor exitノードのIPアドレス一覧を取得
$tor_ips_text = curl_exec($ch);

// cURLセッションを閉じる
curl_close($ch);

// 空白スペースが入っている場合があるので、抜く
$tor_ips_text = str_replace(" " , "" , $tor_ips_text);

// IPアドレス一覧は改行区切りになっているので、改行で分割し配列に取得
$tor_ips = explode("\n" , $tor_ips_text);


// IPアドレス一覧にアクセス時のIPが含まれている場合
if (@in_array($_SERVER['REMOTE_ADDR'] , $tor_ips))
{
echo "Torからのアクセスはできません";
exit;
}

Torとは

 Tor(The Onion Router)は、匿名性を提供するために設計されたオープンソースのソフトウェアおよびネットワークです。このネットワークを利用すると、インターネット上での通信を匿名化することができます。Torネットワークでは、トラフィックを複数のノードを経由してルーティングすることで、ユーザーのIPアドレスや位置情報などの個人を特定する情報を隠すことができます。これにより、ユーザーはオンライン上でよりプライバシーを保護し、検閲や監視を回避することができます。
 Torは、一般的にはウェブブラウジングやオンラインコミュニケーションなどのプライバシーを重視する目的で利用されますが、違法な活動や悪用にも使われることがあります。