Show HN: Tailsnitch – Tailscaleのセキュリティ監査ツール
101日前原文(github.com)
概要
Tailsnitchは、Tailscale環境のセキュリティ監査ツール。
50以上の設定ミスや過剰な権限、ベストプラクティス違反を自動検出。
OAuthやAPIキー認証、インタラクティブな問題修正機能を搭載。
SOC 2監査証跡やCI/CD統合にも対応。
柔軟なフィルタ・エクスポート・無視リスト機能を提供。
Tailsnitch:Tailscale設定のセキュリティ監査ツール
- TailsnitchはTailscaleネットワーク(tailnet)をスキャンし、50以上の設定ミスやリスクを検出
- アクセス制御の過剰許可やセキュリティベストプラクティス違反の特定
- 重大度別のフィルタやカテゴリ別抽出が可能
クイックスタート
- Tailscale API認証情報の設定
export TSKEY="tskey-api-..."
- 監査実行
tailsnitch
- 重大度「高」だけ表示
tailsnitch --severity high
- インタラクティブな修正モード
tailsnitch --fix
インストール方法
- GitHub Releasesからバイナリダウンロード
- macOSの場合、ダウンロード後にquarantine属性削除
sudo xattr -rd com.apple.quarantine tailsnitch
- macOSの場合、ダウンロード後にquarantine属性削除
- Goによるインストール
go install github.com/Adversis/tailsnitch@latest
- ソースビルド
git clone ... && cd tailsnitch && go build -o tailsnitch .
認証方式
- OAuthクライアント(推奨)
- スコープ制御・監査対応・従業員退職時も有効
- 必要な環境変数:
export TS_OAUTH_CLIENT_ID="..."export TS_OAUTH_CLIENT_SECRET="tskey-client-..."
- 作成: Tailscale OAuth設定ページ
- 監査用スコープ:
all:read(簡単)または個別スコープ(例:policy_file:read、devices:core:read等)
- 修正モード用追加スコープ:
devices:core、auth_keys
- APIキー
- キー発行者の権限を継承
- 作成: Tailscale APIキー発行ページ
- 設定:
export TSKEY="tskey-api-..."
使い方例
- フル監査
tailsnitch
- 合格チェックも表示(詳細モード)
tailsnitch --verbose
- JSON出力
tailsnitch --json
- 特定tailnetを指定
tailsnitch --tailnet mycompany.com
結果のフィルタ
- 重大度でフィルタ
tailsnitch --severity high
- カテゴリでフィルタ
tailsnitch --category access(アクセス制御)tailsnitch --category auth(認証・キー)tailsnitch --category device(デバイスセキュリティ)tailsnitch --category network(ネットワーク露出)tailsnitch --category ssh(SSHルール)tailsnitch --category log(ログ・管理)
- 特定チェックのみ実行
tailsnitch --checks ACL-001,AUTH-001,DEV-010
- 利用可能なチェック一覧表示
tailsnitch --list-checks
インタラクティブ修正モード
- API経由で直接修正
tailsnitch --fix- ドライラン(プレビュー):
tailsnitch --fix --dry-run - 安全な修正自動選択:
tailsnitch --fix --auto - 監査ログ無効化:
tailsnitch --fix --no-audit-log
- 修正可能な主な項目
- 認証キー削除(AUTH-001, AUTH-002, AUTH-003)
- エフェメラルキーへの置換(AUTH-004)
- ユーザーデバイスのタグ削除(DEV-002)
- ステールデバイス削除(DEV-004)
- 保留中デバイスの承認(DEV-005)
- 手動対応が必要な問題は管理コンソールへのリンクを提供
SOC 2監査エビデンス出力
- エビデンスレポート出力(Common Criteriaマッピング付き)
- JSON形式:
tailsnitch --soc2 json > soc2-evidence.json - CSV形式:
tailsnitch --soc2 csv > soc2-evidence.csv
- JSON形式:
- 各リソースごとのテスト結果、CCコード、合否、タイムスタンプを記録
既知リスクの無視リスト
- .tailsnitch-ignoreファイルで特定の検出結果を抑制
- 例:
ACL-008(情報レベルのチェックを無視)DEV-006(外部委託業者のデバイス許可)
- 例:
- 無視ファイルの検索順
- カレントディレクトリ→ホームディレクトリ
- 明示的なファイル指定:
tailsnitch --ignore-file /path/to/ignore
- 無視処理の完全無効化:
tailsnitch --no-ignore
JSON出力とデータ処理
- フルレポート出力
tailsnitch --json > audit.json
- 失敗チェックのみ抽出(TSV)
tailsnitch --json | jq -r ... > findings.tsv
- 重大度ごとのサマリ
tailsnitch --json | jq ...
- 管理リンク付き重大/高レベル問題一覧
tailsnitch --json | jq -r ...
コマンドリファレンス
- 主なフラグ一覧
--json:JSON出力--severity:重大度フィルタ--category:カテゴリフィルタ--checks:特定チェックのみ実行--list-checks:全チェック一覧--tailnet:監査対象tailnet指定--verbose:合格チェックも表示--fix:修正モード--auto:安全な修正自動選択--dry-run:修正プレビュー--no-audit-log:修正時の監査ログ無効--soc2:SOC 2エビデンス出力--tailscale-path:tailscale CLIのパス指定--ignore-file:無視ファイルパス指定--no-ignore:無視処理無効--version:バージョン情報表示
セキュリティチェック一覧
- 全52項目・7カテゴリ
- クリティカル例
ACL-001:デフォルト「全許可」ポリシーACL-002:SSH設定ミスで非rootユーザーも許可ACL-006:tagOwnersが広範囲ACL-007:外部ユーザーへの権限付与
- 高リスク例
AUTH-001:再利用可能な認証キーDEV-001:タグ付きデバイスにキー有効期限なしDEV-010:Tailnet Lock無効NET-001:インターネット公開SSH-002:root SSHで再認証不要
- 中リスク例
ACL-004:外部ユーザー含む設定DEV-003:古いクライアントNET-006:ローカルサービス露出SSH-003:セッションUI露出
- 情報レベル:ログ設定、DNS、ユーザーロール、手動確認項目
- クリティカル例
監査出力例
- 監査サマリ
- クリティカル: 1件、高: 3件、中: 5件、低: 2件、情報: 8件
- 合格: 33件、合計: 19件の問題
Tailnet Lockチェック
- **Tailnet Lock関連チェック(DEV-010, DEV-012)**はローカルCLI経由で実行
--tailscale-pathでCLIパス指定可能
CI/CD統合
- CI/CDパイプラインでの利用例(GitHub Actions等)
- 重大・高リスク検出時にビルド失敗
- JSONレポート生成や自動チェック組み込み
参考情報・ライセンス
- Tailscale Security Hardening GuideやACL Syntax Referenceなど公式ドキュメント参照
- MITライセンス下で提供
- コントリビューションガイドラインはCONTRIBUTING.md参照
Tailsnitchは、Tailscale環境のセキュリティ強化・運用効率化に不可欠なツール。
柔軟な監査・修正・エビデンス出力機能で、組織のセキュリティ体制を強力にサポート。