Little Snitch for Linux
(obdev.at)- アプリケーションのネットワーク接続を可視化して制御できるツールで、どのプログラムがどのサーバーと通信しているかを確認可能
- Connections Viewではリアルタイムおよび過去のトラフィックをアプリ別に表示し、ワンクリックで接続の遮断とデータ使用量の追跡をサポート
- BlocklistsとRules機能により、望ましくないトラフィックをカテゴリ単位または詳細条件ごとに精密に制御可能
- 内部的にeBPFを利用してカーネルレベルで接続を監視し、Web UIを通じてPWA形式のインターフェースを提供
- セキュリティツールではなくプライバシー重視のツールであり、一般的なソフトウェアの外部通信を遮断する用途には適しているが、高度な攻撃への防御には限界がある
概要
- Little Snitch for Linuxは、アプリケーションのネットワーク接続をリアルタイムで可視化し、制御できるツール
- どのアプリケーションがどのサーバーと通信しているかを確認可能
- 不要な接続の遮断、トラフィック記録、データ使用量追跡機能を提供
- Linuxカーネル 6.12以上とBTFカーネルサポートが必要
- Web UIは
http://localhost:3031/でアクセスでき、**PWA(Progressive Web App)**としてインストール可能
接続モニタリング
- Connections Viewで現在および過去のネットワーク活動をアプリケーション別に表示
- ルールやブロックリストによって遮断された項目、データ使用量、トラフィック履歴を表示
- 最近の活動、データ量、名前を基準に並べ替えやフィルタリングが可能
- ワンクリックで接続を遮断可能
- 下部のトラフィックダイアグラムは時間ごとのデータ量を可視化
- 特定区間をドラッグして拡大すると、その期間の活動のみをフィルタして表示
ブロックリスト管理
- Blocklists機能により、不要なトラフィックカテゴリを一括で遮断可能
- リモートソースから自動ダウンロードし、最新状態を維持
- 対応形式: ドメインごとに1行、ホスト名ごとに1行、
/etc/hosts形式(IP + ホスト名)、CIDRネットワーク範囲 -
ワイルドカード、正規表現、glob、URLベースの形式は非対応
- 効率のためドメインベースのリストの使用を推奨
- 例示リスト: Hagezi, Peter Lowe, Steven Black, oisd.nl
- macOS向け
.lsrules形式はLinux版と互換性がない
ユーザー定義ルール
- Rules機能はブロックリストよりも細かな制御を提供
- 特定のプロセス、ポート、プロトコル単位で設定可能
- ルール一覧は並べ替えやフィルタリングが可能
- ルールによって詳細なネットワーク制御ポリシーを構成可能
アクセスセキュリティ
- デフォルトではWebインターフェースはローカルで動作中のすべてのプロセスからアクセス可能
- 悪意あるアプリケーションがルール変更、ブロックリスト修正、フィルタ無効化を行える可能性がある
- これを防ぐため認証必須の設定が可能
- 詳細設定は高度な構成(Advanced configuration)で行う
内部構造
- eBPFを用いてLinuxのネットワークスタックにフック
- eBPFプログラムが送信接続を監視し、データをデーモンへ渡す
- デーモンは統計追跡、ルール処理、Web UI提供を担当
- eBPFプログラムとWeb UIのソースコードはGitHubで公開
高度な構成
- 基本UIでは主要設定のみを公開し、高度な設定はテキストファイルで構成
- 変更後は
littlesnitchデーモンの再起動が必要
- 変更後は
- 既定の設定パス:
/var/lib/littlesnitch/config/- 直接編集せず、修正するファイルを
/var/lib/littlesnitch/overrides/config/へコピーしてから編集 - overrideディレクトリの設定が常に優先適用される
- 直接編集せず、修正するファイルを
- 主な設定ファイル
web_ui.toml: ネットワークアドレス、ポート、TLS、認証設定- 複数ユーザーがアクセス可能な場合は認証の有効化が必要
- ループバック以外に公開する場合はTLSの追加が必要
main.toml: ルールに一致しない接続の既定動作を設定- 既定値は許可で、必要に応じて拒否に変更可能
- 誤設定するとシステムにアクセスできなくなる危険がある
executables.toml: 実行ファイルのグループ化ルール- バージョン番号を除去し、同一アプリの複数バージョンを1つとして表示
- シェルおよびアプリ管理プロセスの親子関係を定義
- コミュニティからのフィードバックを通じて継続的に改善
- eBPFプログラムとWeb UIはユーザービルド版に置き換え可能
- overrideディレクトリ内のバージョンが優先適用される
制限事項
- セキュリティツールではなくプライバシーツールとして設計
- macOS版よりシンプルで、eBPFの制約により機能面の限界がある
- eBPFには保存領域とプログラム複雑性の制限があるため
- トラフィックが多い場合、キャッシュテーブルがあふれてパケット、プロセス、DNS名の対応付けが不完全になる可能性がある
- IPアドレスから元の問い合わせホスト名を復元する際に**推論(heuristics)**を使用
- macOS版は**ディープパケットインスペクション(DPI)**により、より正確な対応付けを実施
- 一般的なソフトウェアの外部通信の監視と遮断には適しているが 高度な攻撃者に対するシステム防御には不向き
ライセンス
- 3つのコンポーネントで構成
- eBPFカーネルプログラムとWeb UIはGNU GPL v2で公開され、GitHubで利用可能
- デーモン(
littlesnitch --daemon)はプロプライエタリだが、無料で使用および再配布可能
1件のコメント
Hacker Newsのコメント
Little Snitch や Open Snitch は使っていないが、許可済みプログラムを悪用したリクエストもブロックできるのか気になった
たとえば
suspicious.pyが Firefox を呼び出してデータをアップロードした場合、ファイアウォールがこれを防げるのか知りたいスクリプトを
#!/bin/interpreterで実行した場合はスクリプトのパスにルールが適用されるが、interpreter script形式で実行すると動作が異なるOpen Snitch では、親ツリーに python プロセスが含まれているかどうかなどを基準に細かくマッチできる
昔の Windows ファイアウォールである Outpost や Zone Alarm には、こうした挙動を検出する Leak Control 機能があった
ほとんどのディストリビューションがこの機能を含んでいるが、一般ユーザーはルール学習や設定をあまり行わない
Fedora 43 で試したところ、CPU コアをすべて使い切り、5万行のログを吐いて失敗した
BPF_PROG_LOAD syscall returned Argument list too longエラーが発生したARM64 VM ではロードされるがプロセスを識別できない
eBPF の互換性問題を調査中で、リソースが限られているため時間が必要とのこと
Fedora のデフォルトファイルシステムが Btrfs のためプロセス識別が不可能で、1.0.1 で修正予定とのこと
Linux ユーザーとして、コードの公開性を重視している
OpenSnitch + OpenSnitch-UI の組み合わせで十分満足している
Linux で有料ツールモデルがどれほど成立するのか気になった
多くは無料、寄付ベース、あるいはオープンコアモデルだ
Little Snitch が Linux 版を無料公開した理由が、「Linux ではお金にならない」という認識からなのか、それとも別の理由があるのか気になる
私もネットワークトラフィックを扱うクローズドなプログラムには抵抗がある
その代わり FOSS プロジェクトには毎年数千ドルを寄付している
ただ、こういうユーザーは少数なので、完全オープンソースだけで収益を上げるのは難しい
特にファイアウォールのような高権限コードは、オープンソースでなければ信頼しづらい
結果がどうなるか興味深いとのこと
関連ブログ記事: Little Snitch for Linux 紹介
昔は Windows 用の ZoneAlarm があった
Linux にはなぜこういうものがなかったのか、ずっと不思議だった
Direwall のコード を見つけたら、昔ながらの C スタイルがそのまま残っていた
ソケットライブラリをパッチして動かしていたが、今でもコンパイルできるのか気になる
最初はうるさく尋ねるが、学習後は静かになる仕組みを明確に説明していた
だからこそユーザーの信頼を得られ、私もその点で勧めていた
商用ソフトウェアが Linux に入ってくるにつれ、ネットワーク監視への欲求が生まれた
Windows の無秩序な実行を制限できるのが良かった
Little Snitch を長年使っていて、すべてのネットワークリクエストを手動承認している
ただし、カーネル拡張レベルの権限を持つプログラムをどこまで信頼できるのか考えさせられる
会社や開発者に関する情報がほとんどなく、気になっている
eBPF コンポーネントは GPLv2 オープンソースとして公開されており、GitHub のコード で確認できる
ただしデーモンは root 権限で動作する必要があるため、SELinux のようなアクセス制御で制限する必要がある
初回リリースなのでバグレポート対応中であり、Linux 環境の多様さに驚いたとのこと
macOS ではカーネル拡張ではなく Network Extension API を使う
ネットワーク観測が目的なら、Sniffnet のような GUI スニファーもある
Linux 版ポートのリリースを祝う
完全オープンソースでターミナルベースの代替として、自分がメンテしている RustNet を紹介したい
TUI ベースのリアルタイムパケット監視ツールで、ファイアウォールではないが Landlock によって自己サンドボックス化している
OpenSnitch との比較が気になる
OpenSnitch GitHub
これは Linux 版の技術的制約によるものだ
eBPF ベースなので、キャッシュオーバーフロー時にはプロセスマッピングができず、macOS のようなディープパケット検査も使えない
公式説明 に詳しく書かれている
関連投稿
OpenSnitch を満足して使っている
ただ、プラグインシステムができて、ユーザー行動とネットワーク接続をあわせて分析し、予期しない接続だけ通知してくれるといいと思う
ポップアップの代わりに CLI ベースの自動許可ラッパーがあると便利そうだ