Skip to Content

Discourse

ProxyTracer の公式 Discourse 統合プラグインです。コミュニティにエンタープライズグレードの IP インテリジェンスを導入し、既知の VPN、プロキシ、データセンター、Tor ノードを自動検出して、登録、ログイン、またはフォーラム全体の閲覧を遮断するオプションを提供します。

プラグインは Github repository を通じて配布されています。

機能

  • 新しいユーザーの登録時にプロキシおよび VPN を自動検証。
  • 信頼できるユーザーグループや IP アドレスに対するバイパス設定。
  • プロキシ検出時のアクション(ブロック、警告、モデレーションキューへの送信)を柔軟に設定可能。
  • インメモリ処理による完全ノーログ保証。

インストール

  1. サーバーの Discourse インストールディレクトリ(通常は /var/discourse)に SSH で接続します。
    cd /var/discourse
  2. containers/app.yml ファイルを開き、hooks.after_code セクションにプラグインのリポジトリ URL を追加します:
    nano containers/app.yml
  3. Discourse アプリケーションコンテナをリビルドします:
    hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git - git clone https://github.com/proxytracer/discourse-proxytracer.git
  4. ./launcher rebuild app
    ./launcher rebuild app

設定:

  1. ProxyTracer Dashboard から標準の API キーを取得します。
  2. proxytracer enabled をオンにしてプラグインを有効化します。
  3. proxytracer api key に ProxyTracer API キーを入力します。
  4. proxytracer block mode を選択します(blockwarn、または log)。
  5. proxytracer whitelist ips で除外する IP アドレス(CIDR 形式対応)を指定します。
  6. proxytracer whitelist trust level でチェックを免除するトラストレベルを設定します。
  7. 設定を保存すると、即座にプロキシ検出が有効化されます。

Settings Screenshot

ネットワーク設定: Cloudflareとリバースプロキシ

重要: Discourse が Cloudflare やリバースプロキシの背後にある場合、実際のクライアント IP が正しく渡されていることを確認してください。

プロキシ検出が正しく機能するためには、Discourse がリバースプロキシの IP ではなく、エンドユーザーの実際の IP アドレスを認識している必要があります。

直接のCloudflare統合(標準インストール)

Cloudflare を直接使用している場合(標準構成):

  1. app.ymltemplates: セクションに templates/cloudflare.template.yml が含まれていることを確認します。
  2. これにより、Discourse の Nginx 設定に Cloudflare の公式 IP 範囲が自動的に追加され、CF-Connecting-IP ヘッダーが正しく信頼されます。
    templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/cloudflare.template.yml"
  3. 設定変更後は ./launcher rebuild app を実行して反映してください。

多層プロキシ構成(Cloudflare + ローカルリバースプロキシ)

多層リバースプロキシ構成(Cloudflare + Nginx Proxy Manager / HAProxy 等)の場合:

中間のリバースプロキシが X-Forwarded-For ヘッダーまたは CF-Connecting-IP ヘッダーを正確に Discourse に転送するように設定してください。

中間のプロキシサーバーのローカル IP アドレスを Discourse の信頼できるプロキシ一覧に追加します。
# IPv4 Cloudflare IP、参照: https://www.cloudflare.com/ips/ set_real_ip_from 173.245.48.0/20; set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 108.162.192.0/18; set_real_ip_from 190.93.240.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 162.158.0.0/15; set_real_ip_from 104.16.0.0/13; set_real_ip_from 104.24.0.0/14; set_real_ip_from 172.64.0.0/13; set_real_ip_from 131.0.72.0/22; # IPv6 Cloudflare IP set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29; real_ip_header CF-Connecting-IP;

Discourse の config/discourse.conf または環境変数で DISCOURSE_TRUSTED_PROXIES を設定します。

location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... }

設定を保存してコンテナを再起動します。

検証とテスト

設定が正しく動作しているか確認するためのテスト手順:

  1. VPN に接続した状態で新しいシークレットウィンドウを開き、フォーラムへの登録を試みます。
  2. 設定したブロックメッセージ(例: 「VPN またはプロキシ経由での登録は制限されています」)が表示されることを確認します。
    • 誤った設定: Cloudflare の IP(一覧は here を参照)やローカルネットワーク IP(例: 127.0.0.1, 172.x.x.x)が記録されている場合、IP 転送が失敗しています。この状態では ProxyTracer はサイトを保護できません。
    • ✅ 正常な状態: ユーザーの実際の IP アドレスが正しく認識され、VPN 接続がブロックされる。

緊急アクセス

💡
緊急アクセス: 設定ミスにより管理者自身がロックアウトされた場合は、SSH 経由でコンテナに入り、Rails コンソールからプラグインを無効化できます: ./launcher enter app -> rails c -> SiteSetting.proxytracer_enabled = false
cd /var/discourse ./launcher enter app rails c SiteSetting.proxytracer_enabled = false exit exit

ライセンス

このプラグインは MIT ライセンスの下で提供されています。

最終更新日: