1 ポイント 投稿者 GN⁺ 2024-05-13 | 1件のコメント | WhatsAppで共有

WagWagの主な機能

  • Wireguard に MFA、経路制限、デバイス登録機能を追加
    • MFA 認証が必要な経路や、常に公開アクセス可能な経路を定義可能
    • 新しいクライアントを登録するためのシンプルな API を提供
    • 高可用性をサポート
    • Webauthn、OIDC など多様な MFA オプションを提供
  • Aura Information Security の支援を受けて開発

要件

  • iptableslibpam がインストールされている必要あり
  • Wag は iptableswireguard デバイスを管理するため root で実行する必要あり
  • sysctl でフォワーディングが有効化されている必要あり
    sysctl -w net.ipv4.ip_forward=1
    
  • Wag はカーネルが wireguard をサポートしていれば wg-quick などを必要としない

インストール方法

バイナリリリース(glibc 2.31+ が必要)

curl -L $(curl -s https://api.github.com/repos/NHAS/wag/releases/latest | jq -M -r '.assets[0].browser_download_url') -o wag
sudo ./wag gen-config
sudo ./wag start -config <generated_config_name>  

ソースからインストール(go1.19, npm, gulp, clang, llvm-strip, libbpf が必要)

git clone git@github.com:NHAS/wag.git
cd wag
make
cp example_config.json config.json
sudo ./wag start
  • リバースプロキシの背後で実行中なら X-Forwarded-For を設定する必要あり

管理

root ユーザーは以下のコマンドで wag サーバーを管理可能:

wag subcommand [-options]
  • サポートされるサブコマンド: start, cleanup, reload, version, firewall, registration, devices, users, webadmin, gen-config
  • 各コマンドの使い方説明を提供

ユーザーガイド

Wag のインストール

  1. wag, config.json/opt/wag にコピー
  2. wg genkey で wireguard 秘密鍵を生成し、サンプル設定の PrivateKey に設定
  3. wag.service/etc/systemd/system/ にコピー(またはリンク)し、サービスを起動・有効化

新しい登録トークンの作成

# ./wag registration -add -username tester

token,username
e83253fd9962c68f73aa5088604f3f425d58a963bfb5c0889cca54d63a34b2e3,tester

トークンを curl する:

curl http://public.server.address/register_device/…

サービスは完全な形式のレスポンスを返し、これを config ファイルとして保存できる。

MFA の実行

ユーザーは VPN アドレス(例: 192.168.1.1:8080)に接続して 2FA コードを入力する。設定ファイルでセッション寿命を指定可能。

管理コンソールにログイン

ManagementUI.Enabledtrue に設定し、以下のコマンドを実行:

sudo ./wag webadmin -add -username <your_username> -password <your-password-here>

管理用リッスンアドレスに接続して認証情報を入力する。Web インターフェースからは管理ユーザーを追加できない。

GN⁺ の意見

  • クラスタリング機能により高可用性をサポートしている点が印象的だ。災害復旧や無停止サービスに役立ちそうだ。

  • 多様な認証方式をサポートしているのも良い点だ。TOTP、WebAuth、OIDC などを通じて企業の認証基盤と容易に統合できそうだ。

  • ACL ルールを柔軟に定義できるため、きめ細かなアクセス制御が可能に見える。ユーザー/グループごとにアクセス可能な IP、ポート、プロトコルを制限できる。

  • IPv6 をサポートしていないのは惜しい。最近は IPv6 への移行が活発なので、早めの対応が必要に見える。

  • Linux に特化した VPN ソリューションを探しているなら、良い選択肢になりそうだ。カーネル 5.9 以上の最新システムで動作する。

1件のコメント

 
GN⁺ 2024-05-13
Hacker Newsのコメント

要約:

  • サーバーが秘密鍵を生成してクライアントに送信する方式は望ましくない。クライアントが秘密鍵を生成し、公開鍵をサーバーに送信するのが適切。
  • 例ではHTTPプロトコルを使用しているが、セキュリティ上適切ではないため、HTTPSに置き換えることを提案する。
  • セッションタイムアウト時にクライアントがそれを認識できる方法が必要。たとえば、Wi‑FiのCaptive Portal検知機能のように、定期的にURLをチェックして状態を確認する方法などを検討できる。
  • WireGuardの鍵は永続的なセッション鍵の役割を果たすため、完全なVPNサーバーソリューションになるには、定期的なセッション鍵のローテーション、セッション終了、IPアドレス変更、経路設定、必要に応じた認証更新などの追加機能の実装が必要。
  • HeadやTailscaleと似ている点が多く、機能の重複、違い、実装計画などを比較できる資料があるとよい。
  • TOTPコードに対する総当たり攻撃(Brute-force Attack)防止策を整えるべき。たとえば、リクエストのレート制限、試行回数制限などの対策を検討できる。
  • WireGuardを選ぶサイトであれば最新の設定を使うと予想されるため、IPv6のULA(Unique Local Address)の活用度は高いはず。