P2P匿名掲示板を構成するプロトコルである shingetsu(新月) をpythonで実装した saku(朔)というプログラムがあります。2023年07月現在、参加しているノード数は15前後。一人で何台か動かしている方もいるようなので10人程度が利用しているのだと思います。
参加人数が少ないので投稿は独り言のようなモノになってしまいがちです。しかし、今の時代はコミニュケーションツールには事欠きませんで、返事が欲しいのならSNSや5chへ行けば良いのです。
sakuをプロキシの下で動かす
前提条件として下記構成を目指します。
- 個人または限定されたユーザが利用する
- SSL通信で掲示板へのアクセスする
- sakuを直接外へさらさない
※1:
sakuは誰でも利用できるように設定(公開ゲートウェイ)可能です。しかし、公開ノードとして運用していた時にISPから警告を受けたことがあり、それ以来もっぱら個人専用として動かしています。
※2:
SSL通信でなければ最近のブラウザは警告マークが表示されたりと落ち着かないので。
※3:
深い意味はないのですが。
このような構成を目指します。
1.DNS Aレコードを登録
sakuへアクセスする為にAレコードを登録します。同時にAAAAレコードも用意すればsaku自体はIPv4にしか対応していませんが、nginxがプロキシするのでユーザはIPv6でsaku掲示板を利用できるようになります。
1 2 3 |
$ host saku.loneb.net saku.loneb.net has address 160.16.83.207 saku.loneb.net has IPv6 address 2001:e42:102:1517:160:16:83:207 |
この A 及び AAAA レコードを使い nginx にvirtualhost を作成します。
2. SSL証明書を準備
すでにSSL証明書を持っている場合はソレを。持っていなければLet’s encrypt. 等でSSL証明書を取得します。取得した証明書はnginxの設定ファイル内に記述します。
3. nginxの設定
最初に上げたようにnginxはローカルアドレス(今回は1台ですべてを賄うのでloopback)へ受け取ったリクエストを転送するようにproxyとして設定します。
gateway.cgi(掲示板アクセス用 設定ファイル)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
server { # HTTPリクエストはHTTPSへリダイレクト listen 80; listen [::]:80; server_name saku.loneb.net saku6.loneb.net; rewrite ^ https://saku.loneb.net$request_uri? permanent; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name saku.loneb.net; : : : # SSL関連 ssl_certificate /etc/letsencrypt/live/saku.loneb.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/saku.loneb.net/privkey.pem; : : : # リバースプロキシ proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; : : : # server.cgiは見せない location / { if ($request_uri ~ server.cgi) { return 403; } auth_basic "Require Auth."; auth_basic_user_file /xxx/.htpasswd; # loopbackへ転送 proxy_pass http://127.0.0.1:8000/; } } |
サーバ間通信用設定ファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 160.16.83.207:8000; server_name saku.loneb.net; : : : proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; location / { # server.cgi以外は遮断 if ($request_uri !~ server.cgi){ return 403; } proxy_pass http://127.0.0.1:8000/; } } |
4. sakuにパッチ当て
※ 追記始め
saku-4.12.0 にマージされました。
saku.ini の [Network]セクションに、以下の2項目を追記して下さい。
1 2 3 |
[Network] bind_addr: 127.0.0.1 use_x_forwarded_for: yes |
※ 追記終わり
- 0.0.0.0 以外にbindできるようにしたパッチ
- リモートホストをHOST_ADDRではなく HTTP_X_FORWARDED_FORから取得するようにしたパッチ
- PINGを受けた際、PONGに相手のアドレスを添えて返事をしなければならないのですが、nginx配下は HOST_ADDRで相手のアドレス取得に失敗するので・・・
上記の修正をします。パッチ内容は github を参照してください。
5. sakuの設定ファイル
saku.ini の [Network] セクションに、bindアドレスを記述します。
1 2 |
[Network] bind_addr: 127.0.0.1 |
5. 動作確認
リダイレクト
1 2 3 4 5 6 7 8 9 |
% curl -D - http://saku.loneb.net/ HTTP/1.1 301 Moved Permanently Server: nginx Date: Wed, 19 Jul 2023 18:33:06 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive Location: https://saku.loneb.net/ |
BASIC認証
1 2 3 4 5 6 7 8 |
% curl -D - https://saku.loneb.net/ HTTP/2 401 server: nginx date: Wed, 19 Jul 2023 18:34:01 GMT content-type: text/html content-length: 172 www-authenticate: Basic realm="Require Auth." |
認証後
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
% w3m -dump https://saku.loneb.net Username for Require Auth.: Password: • トップ • 最終更新 • 一覧 • 新着情報 • 新規作成 • RSS 新月 - P2P匿名掲示板 • 最終更新 • 一覧 • 新着情報 • 新規作成 • 検索 • 状態 • 公式サイト • ネットワーク利用規約 • RSS 最近の更新 • 2023-07-20 01:30 ゲーム総合 (12/0.0MB) • 2023-07-19 21:02 自作PC (21/0.0MB) • 2023-07-19 07:01 雑談 (117/0.0MB) • 2023-07-18 22:01 節約生活 (28/0.0MB) • 2023-07-18 21:16 何故新月は過疎なのか (47/0.0MB) • 2023-07-18 14:41 KIWAMI OS について語るスレッド (15/0.0MB) • 2023-07-18 11:53 【ただひたすら書き込むスレ】 (81/0.0MB) • 2023-07-17 18:56 節電スレ (11/0.0MB) • 2023-07-17 18:18 【P2P】ニュース速報【掲示板】 (50/0.0MB) • 2023-07-17 09:24 Twitterの真似事 (54/0.0MB) タイトル [ ] タグ [ ] スペースで区切ってタグを入力してください。<>&は使えません。 新しい掲示板を作るときに検索する [*] [新規作成] Powered by shinGETsu. |